On Mon, 19 Apr 2021 19:36:25 +0200, Marco Curreli wrote:
On 19.04.21, a.furi...@lqt.it wrote:
On Mon, 19 Apr 2021 03:20:37 -0700 (MST), pigreco wrote:
>
> dati due tabelle, una con circa 3000 punti e un'altra con circa 10000
> linee
> (assi stradali); trovare, per ogni punto, l'asse stradale più vicino.

Con v.distance di GRASS è molto più veloce.


Sorpresona ... alla fine si scopre che il miglior tempo su
SpatiaLite lo si ottiene usando l'approccio classicissimo
lasciando perdere il KNN :-D

SELECT a.pk as fid, Min(ST_Distance(a.geom, zz.geom)) AS distance, zz.pk as pk_punti
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 = zz.geom)
GROUP by zz.pk;

chiude con un tempo superstellare di 0.409 secondi
(si, avete letto bene: meno di mezzo secondo)

conclusione: il KNN e' un metodo sofisticato basato sulle API
"advanced" di SQLite che consentono l'introspezione degli R*Tree.
nulla assicura che sia il metodo in grado di dare i risultati
migliori in assoluto.

sarebbe casomai interessante indagare come evolvono i tempi
quando si passa di risolvere problemi piu' complessi (tipo
svariati milioni di righe e di punti) ... magari nella
prossima vita, quando magari avremo piu' tempo libero
per divertici a fare benchmarking ;-)

ciao Sandro

_______________________________________________
Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
I messaggi di questa lista non hanno relazione diretta con le posizioni 
dell'Associazione GFOSS.it.
764 iscritti al 23/08/2019

Rispondere a