opendatasicilia / tansignari

"T'ansignari e t'appeddiri"
http://tansignari.opendatasicilia.it
Creative Commons Attribution 4.0 International
18 stars 10 forks source link

[duckdb] come applicare una funzione spaziale a un vettore importato #256

Closed pigreco closed 1 year ago

pigreco commented 1 year ago

Nel file che condivido ho un layer polygon e per estrarre il centroide scrivo la seguente query:

D load spatial
SELECT a.ClassREF, ST_Centroid (a.Shape) as shape
FROM ST_Read('x_andy.gdb',layer="polygon") a;

ma ricevo questo errore:

image

x_andy.gdb.zip

aborruso commented 1 year ago

@pigreco partirei da un formato di input più "normale". Fai una prova con un shp, e verifichi st_centroid?

pigreco commented 1 year ago

qui shapefile, ma lanciando:

SELECT ST_Centroid (geometry) as shape
FROM ST_Read(layer="shapefile");

image

shp_x_andy.zip

pigreco commented 1 year ago

Osservazioni: credo che per richiamare la geometry del vettore occorre utilizzare wkb_geometry, infatti la seguente query restituisce un output:

SELECT a.wkb_geometry AS centroid
FROM ST_Read("shapefile.shp") a;

image

pigreco commented 1 year ago

però se utilizzo la seguente query spaziale:

SELECT ST_Centroid(a.wkb_geometry) AS centroid
FROM ST_Read("shapefile.shp") a;

ho questo errore: image

pigreco commented 1 year ago

in duckdb la geometry è convertita in wkb quindi il nome del campo sarà wkb_geometry;

per poter utilizzare la funzione ST_Centroid() occorre prima convertire la colonna wkb_geometry utilizzando la funzione ST_GeomFromWKB() , quindi la query da utilizzare è:

SELECT ST_Centroid(ST_GeomFromWKB(a.wkb_geometry)) AS centroid
FROM ST_Read("shapefile.shp") a;

image

NOTA: non funziona usando lo shapefile allegato perché segnala questo errore: Error: Not implemented Error: Geometry type not supported

lo shapefile allegato ha una geometry: MultiPoligonZM

-- rif.: https://tech.marksblogg.com/duckdb-gis-spatial-extension.html

pigreco commented 1 year ago

ricetta fatta e pubblicata qui https://tansignari.opendatasicilia.it/ricette/riga_comando/duckdb_funzione_spaziale/ grazie @aborruso

aborruso commented 1 year ago

Grazie mille a te @pigreco !!!