[Gfoss] VirtualKNN in SpatiaLite 5
a.furieri a lqt.it
a.furieri a lqt.it
Lun 19 Apr 2021 22:24:33 CEST
On Mon, 19 Apr 2021 12:37:29 -0700 (MST), pigreco wrote:
> Altra sorpresona,
> anche da me รจ velocissimo ma genera dati senza senso.
>
hai ragione, c'era una falla logica in qualle query;
occorre definire un buffer che "gonfi" il punto-incrocio,
altrimenti il filtro sullo spatial index prende in
considerazione solo quelle strade che casualmente
intersecano il BBOX del punto.
eccoti qua la versione riveduta e corretta:
CREATE TABLE wow AS
SELECT a.pk as fid, Min(ST_Distance(a.geom, zz.geom)) AS distance,
zz.pk as pk_punti, st_shortestline (a.geom, zz.geom) as geom
FROM strade_palermo as a, inc2k18Palermo as zz
WHERE a.pk IN (
SELECT rowid
FROM SpatialIndex
WHERE f_table_name = 'strade_palermo'
AND search_frame = ST_Buffer(zz.geom, 0.01))
GROUP by zz.pk;
------------------
abbiamo cosi' introdotto due perditempo:
- la ST_ShortestLine
- la ST_Buffer
e comunque stiamo sempre sui 6-7 secondi.
N.B. il raggio del buffer e' fissato "a occhio"
(circa 1km), che almeno in questo caso pare
rappresentare un buon compromesso tra efficienza
e precisione dei risultati.
ecco dove sta il principale vantaggio dal KNN;
che non ti costringe mai a fare assunzioni piu'
o meno arbitrarie sui raggi di probabile distanza.
ciao Sandro.
Maggiori informazioni sulla lista
Gfoss