Cómo convertir un PDF a un Shapefile SHP con Python Geopandas y QGIS3 - Tutorial

ConversionPDFaSHP.png

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

  1. Cargar el Pdf en Inkscape

  2. Guardar el Pdf como Png => Georefenciar

  3. Guardar el Pdf como Dxf => Python y Geopandas

  4. Georefenciar el Png con procedimiento del primer video

  5. Cambiar el SRC del lienzo a WGS84 19S

  6. Capturar la coordenada de la esquina inferior izquierda (247044.404,8347561.266)

  7. Importar el dxf en QGIS3 como EPSG:32719

  8. Calcular la escala. 904.63 px = 6000 m, entonces la escala es: 6.632545

  9. Instalar geopandas en Anaconda: conda install geopandas

  10. 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.

Smiley face

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

Posted on November 8, 2018 and filed under TutorialQGIS, TutorialPython.