Quieres hacer una evaluación y te das cuenta que los unicos datos disponibles estan en un PDF? Esta historia particular es muy frecuente al momento de hacer estudios y evaluaciones. Entonces cual debería ser la manera de obtener los datos espaciales de los planos del reporte? Tendríamos acaso que digitalizar todo de nuevo? Por suerte la respuesta es no, es posible extraer los datos espaciales de planos reportados en PDF con solo software libre.
El proceso de transformación de PDF requiere varios pasos con software como Inskape, QGIS3 e incluso con código de programación en Python con la librería Geopandas. Este tutorial muestra los pasos completos para este geoproceso.
Software utilizado
Inkscape: https://inkscape.org
QGIS: https://qgis.org/es/site/
Jupyter Notebook de Anaconda: https://www.anaconda.com/download/
Pasos del geoproceso
Cargar el Pdf en Inkscape
Guardar el Pdf como Png => Georefenciar
Guardar el Pdf como Dxf => Python y Geopandas
Georefenciar el Png con procedimiento del primer video
Cambiar el SRC del lienzo a WGS84 19S
Capturar la coordenada de la esquina inferior izquierda (247044.404,8347561.266)
Importar el dxf en QGIS3 como EPSG:32719
Calcular la escala. 904.63 px = 6000 m, entonces la escala es: 6.632545
Instalar geopandas en Anaconda: conda install geopandas
Generar un nuevo script y correr el codigo
Tutoriales
Se presentan dos tutoriales en este artículo, el primero es para la georeferenciación de un raster expuesto en el punto 4, y el segundo es el proceso completo de conversión de PDF a SHP.
Script de Python
Este es script de Python utilizado:
%matplotlib inline
import geopandas as gpd
#open the DXF file
plano = gpd.read_file('../Dxf/Plano_Ccamacmayo.dxf')
plano.plot(figsize=(20,40))
geometryScaled = plano.scale(6.632545,6.632545,1,origin=(0,0,0))
geometryTranslated = geometryScaled.translate(247044.404,8347561.266,0)
#apply the new geometry to the geopandas dataframe and apply the EPSG cpde
plano = gpd.GeoDataFrame(plano, geometry=geometryTranslated)
plano.crs = {'init':'epsg:32719'}
plano.plot(figsize=(20,40))
#filter only the line elements
planoLines = plano[plano.geometry.type=='LineString']
#export the spatial as shapefile
planoLines.to_file('../Shps/Dxf_Total.shp')
Datos de ingreso
Puede descargar los datos de ingreso para este tutorial de este enlace.