Cómo cargar Shapefiles a PostGIS con Python, Geopandas y SQLAlchemy - Tutorial

howToUploadShapefilestoPostGISwithPython.jpg

En nuestra búsqueda de nuevas herramientas geoespaciales en Python y mejores formas de manejar datos geoespaciales, encontramos que procesos complejos o multifuncionales ya están incluidos en bibliotecas espaciales como Geopandas. Hemos desarrollado un ejemplo aplicado para cargar ESRI Shapefiles de punto / línea / polígono a una base de datos Postgres / Postgis con Python, Geopandas y SQL Alchemy en unas pocas líneas de código. Además, hemos simplificado el procedimiento para ejecutar una base de datos de Postgres dentro de la imagen de Docker Hakuchik completamente conectada a QGIS.

Este tutorial require tener Docker. Para los usuarios de Windows pueden instalar Docker con este tutorial.


Tutorial

Codigo

Este es código en Python:

#import required libraries
from sqlalchemy import create_engine
import geopandas as gpd
import matplotlib.pyplot as plt

Connect with Postgresql

engine = create_engine('postgresql://gis:gis@localhost:5432/geodatabase')

Open shapefiles

#create geodataframes from all shapefiles
pointDf = gpd.read_file('../Shps/wellPoints.shp')
lineDf = gpd.read_file('../Shps/contoursLines.shp')
polyDf = gpd.read_file('../Shps/lakesPolygons.shp')
#sample of import geodataframes
pointDf.head()
Bore Elev geometry
0 A. Isaac 976.579 POINT (575546.629 4820354.914)
1 A. Woodbridge 904.403 POINT (564600.367 4807827.447)
2 A.D. Watkins 965.698 POINT (558944.843 4789663.820)
3 A.L. Clark; 1 694.670 POINT (519259.006 4810958.617)
4 A.L. Clark; 2 1173.053 POINT (585351.150 4811459.503)
#you might need descartes, uncomment and run this line just one
#!pip install descartes
#a preview of the spatial data
fig, ax = plt.subplots(figsize=(12,8))
pointDf.plot(ax=ax,c='gold')
lineDf.plot(ax=ax,cmap='Oranges',alpha=0.5)
polyDf.plot(ax=ax,ec='royalblue')
plt.show()
output_6_0.png

Upload shapefiles

#points
pointDf.to_postgis('wellpoints',engine, index=True, index_label='Index')
#lines
lineDf.to_postgis('contourlines',engine, index=True, index_label='Index')
#polygons
polyDf.to_postgis('lakepolygons',engine, index=True, index_label='Index')

Datos de ingreso

Este es el enlace del repositorio en Github con los datos para este tutorial:

https://github.com/SaulMontoya/howToUploadShapefilestoPostGISwithPython

 

Suscríbete a nuestro boletín electrónico

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

 

Posted on February 25, 2021 and filed under TutorialQGIS, TutorialPython.