Si, credo che tu abbia ragione. Il sab 29 mag 2021, 16:11 pigreco <pigrecoinfin...@gmail.com> ha scritto:
> Buongiorno, > non so se è il modo giusto e la ML corretta per chiedere, forse, una > Feature > Request per SpatiaLite, > in caso negativo chiedo scusa per il runore. > > Ko studiato e usato le favolose VirtualKNN presenti in spatialite [0] per > calcoli di distanze minime tra punti e linee su grandi dataset (milioni di > righe) e ho notato che l'approccio classico dell'uso degli indici spaziali > è > enormemente più performante rispetto all'uso dei VirtualKNN (2 sec contro > 100 secondi) questo è dovuto anche al fatto che non esiste, nelle > virtualKNN, l'opzione max_distance e quindi calcola le distanze su tutte le > righe. > > queste le due query a confronto, stessi dati in input e stessi output: > - geo-tabella `route` linestring 32632 con 116674 feature > - geo-tabella `scuole` point 32632 con 5529 feature > > uso VirtualKNN: > > CREATE TABLE t_scuole_100mKNN AS > SELECT d.chiave_uni, d.fid as id_route, d.distance as distance, > ST_shortestline(d.geometry, s.geometry) as geom > FROM > (SELECT a.fid as fid, a.distance as distance, zz.chiave_uni as > chiave_uni,zz.geometry > FROM knn as a > JOIN > scuole as zz > WHERE f_table_name = 'route' > AND f_geometry_column = 'geometry' > AND ref_geometry = zz.geometry > AND max_items = 1) d, > route s > WHERE ST_Distance(s.geometry, d.geometry) <= 100 and id_route = s.ogc_fid > ORDER BY d.chiave_uni; > SELECT > RecoverGeometryColumn('t_scuole_100mKNN','geom',32632,'LINESTRING','XY'); > > output 1737 righe > impiega circa 100 secondi > > uso spatialIndex classico > > CREATE TABLE t_scuole_100mMBR AS > SELECT a.ogc_fid as id_route, Min(ST_Distance(a.geometry, zz.geometry)) AS > distance, > zz.chiave_uni as chiave_uni, st_shortestline (a.geometry, zz.geometry) > as geom > FROM route as a, scuole as zz > WHERE ST_Distance(a.geometry, zz.geometry) <= 100 AND a.ogc_fid IN ( > SELECT rowid > FROM SpatialIndex > WHERE f_table_name = 'route' > AND search_frame = BuildCircleMbr(ST_X(zz.geometry), > ST_Y(zz.geometry), 100)) > GROUP by zz.chiave_uni; > SELECT > RecoverGeometryColumn('t_scuole_100mMBR','geom',32632,'LINESTRING','XY'); > > output 1737 righe > impiega circa 2 secondi > > Forse le query non sono scritte in modo ottimale, ma secondo me un > parametro > max_distance nelle virtualKNN aiuterebbe molto > > grazie > > [0] https://www.gaia-gis.it/fossil/libspatialite/wiki?name=KNN > > ----- > https://pigrecoinfinito.wordpress.com/ > -- > Sent from: > http://gfoss-geographic-free-and-open-source-software-italian-mailing.3056002.n2.nabble.com/ > _______________________________________________ > 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 _______________________________________________ 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