[Gfoss] [spatialite] spatialIndex e punti

a.furieri a lqt.it a.furieri a lqt.it
Gio 27 Maggio 2021 10:06:15 CEST


On Wed, 26 May 2021 22:28:42 +0200, Totò Fiandaca wrote:
> Ho il classico problema di determinare, a partire da punti e linee, 
> quale
> sia la distanza minima tra punti e linee.
>
> Per velocizzare la query uso lo spatialIndex e la query è la seguente
>
> SELECT a.pk_uid as fid, Min(ST_Distance(a.geom, zz.geom)) AS 
> distance,
>     zz.pk_uid as pk_uid_punti, st_shortestline (a.geom, zz.geom) as 
> geom
> FROM strade as a, punti as zz
> WHERE a.pk_uid IN (
>         SELECT rowid
>         FROM SpatialIndex
>         WHERE f_table_name = 'strade'
>            AND search_frame = ST_Buffer(zz.geom, 100))
> GROUP by zz.pk_uid
> order by 2 desc;
>
> nel  search_frame uso un buffer di 100 m sul punto, cosi facendo mi 
> aspetto
> che determini le distanze solo per punti entro 100 m, invece ci sono 
> punti
> anche oltre i 100m (fino a 163 m);
>
> non riesco a capire il perché.
>

Toto',

giusto una considerazione finale che mi era sfuggita nella mia
risposta precedente.

non c'e' nessun bisogno di costruire un Buffer attorno al punto se
almeno una delle due geometrie e' sicuramente un (multi)Linestring
oppure un (multi)Polygon.
bastano abbondantemente i BBOX cosi' come sono.

costruire un Buffer e' invece strettamente indispensabile per
riuscire a far funzionare lo SpatialIndex quando entrambe le
geometrie sono Point, perche' altrimenti il filtro ti lascera'
passare solo i punti esattamente sovrapposti, una circostanza
decisamente improbabile.

considerando che l'operazione di costruzione di un Buffer
richiede comunque un certo carico computazionale, e' meglio
evitare di effetturarla quando non e' strettamente
indispensabile perche' finisce per rallentare la query.

ciao Sandro


Maggiori informazioni sulla lista Gfoss