Come applicare una funzione spaziale a un vettore importato

Come applicare una funzione spaziale a un vettore importato in duckDB.

A cura di Totò Fiandaca  | issue #256 | guida/e Totò Fiandaca Andrea Borruso


Caso d’uso

Interrogare uno shapefile collegato a duckdb ed estrarre info anche tramite funzioni spaziali come ST_Centroid().

soluzione

In duckDB la geometry di un vettore è convertita automaticamente nel formato WKB e il nome della colonna geometrica sarà wkb_geometry, pertanto, per richiamare la geometry in una funzione spaziale occorre necessariamente convertirla usando la funzione ST_GeomFromWKB(), quindi la query deve essere così:

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

Nota bene: duckDB non supporta tutti le tipologie di geometrie, ma solo quelle 2D, per esempio non supporta (attualmente) tutti le tipologie con Z o M.

dati

download

Riferimenti utili

Ultima modifica 02/09/2023: add prima ricetta su duckdb (7bfdee3)