GeoPandas og PostGIS


Referanser som gir bakgunn for å forstå eksemplene nedenfor:

Utvalgte referanser

GeoPandas generelle referanser

PostGIS generelle referanser

NTNU 05.03.2021 - Sverre Stikbakke

GeoDataFrame: teiger

GeoDataFrame: bygninger

Postgis

Postgis-operasjoner med bruk av sqlalcemy, geoalchemy2 og psycopg2. Se Installasjon og oppstart av Geopandas i Windows 10 for info om installasjon av nødvendige Python-pakker.

Brukernavn og passord til databasen, samt vertsnavn (host), portnummer og databasenavn legges i en egen fil, mypostgisdb.py, slik:

postgis_connection_string = "postgresql://brukernavn:passord@host:5432/databasenavn"

SQL-spørringer som ikke returnerer geometri: bruk pd.read_sql()

Enkle SQL-spørringer mot databasen gjøres med Pandas-funksjonen read_sql(). Spørringene vil returnere en Pandas DataFrame.

Vi kan bruke PostGIS-funksjoner i databasen med Pandas read_sql() dersom de ikke returnerer geometri-data:

SQL-spørringer som returnerer geometri: bruk gpd.read_postgis()

GeoPandas-funksjonen read_postgis() krever at SQL-spørringen skal returnere en geometri-kolonne.
Det vil si at SELECT-delen av SQL-spørringen må inkludere en geometri-kolonne, enten eksplisitt eller implisitt som i SELECT *.
Merk også at kolonnenavn som inneholder store bokstaver må settes i anførselstegn.

Dette fungerer:

sql = 'SELECT * FROM teiger'
Dette fungerer ikke - gir feilmelding:
sql = 'SELECT localid, "SHAPE_Length" FROM teiger'
Dette fungerer:
sql = 'SELECT localid, "SHAPE_Length", geometry FROM teiger'

Sammenligning: Egenhofer-topologi-spørring med PostGIS-funksjoner vs. GeoPandas-funksjoner

Med spørringen vil vi finne de bygningene som ligger innenfor teig-polygonene for Beryll- og Smaragd-byggene.

Se Egenhofer-topologi for nærmere beskrivelse av GeoPandas-varianten.