1 votos

Cómo importar raster de PostGIS a Python como dataframe

Estoy tratando de importar el raster de PostGIS en un raster para su posterior análisis. Sé que debo utilizar psycopg2 para conectarme a la base de datos, pero no sé cómo consultar el raster desde la base de datos, y luego convertirlo en dataframe. Cada columna debe mostrar sólo el valor de píxel de la trama uno

El objetivo es hacer una clasificación, y necesito importar rásters monobanda y multibanda.

4voto

Anton8000 Puntos 165

Un poco enrevesado, pero parece que funciona:

import geopandas as gpd
import pandas as pd
import psycopg2

con = psycopg2.connect(database="somedbname", user="someuser", password="somepassword",
    host="somehost")

sql = "SELECT x, y, val, geom FROM (SELECT dp.* FROM somerastername, LATERAL ST_PixelAsCentroids(rast, 1) AS dp) foo"

df = gpd.GeoDataFrame.from_postgis(sql, con, geom_col='geom' ) #Create geodataframe
df2 = pd.pivot_table(df, values='val', index='x', columns='y') #Pivot

La consulta sql debería crear una tabla con el aspecto de la captura de pantalla siguiente:

enter image description here

A continuación, hago pivotar utilizando pandas a esto:

df2.head(5)
Out[17]: 
y        1           2           3     ...        1998        1999        2000
x                                      ...                                    
1  290.527374  291.153809  292.508698  ...  290.498169  294.330933  297.080139
2  290.632050  290.655670  290.633057  ...  293.128540  296.367706  297.665710
3  294.361938  291.505859  291.971100  ...  293.437775  295.462372  297.046967
4  295.409454  294.503357  293.324707  ...  292.185974  293.646912  294.779114
5  296.388123  296.558533  294.026611  ...  289.595337  291.347290  291.802368

[5 rows x 2000 columns]

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X