Salve a tutti,
ho scoperto che QGIS supporta solo spatialite 4.3, credo sia l'ultima versione stabile. Sto studiando le virtualKNN, un modulo implementato nella spatialite 4.4, ed ho scoperto che possono cambiare le sorti di un geodatabase. Ho scritto un articolo [0] e vorrei sottoporlo all'attenzione di persone più esperte di me. Ho alcuni dubbi sui trigger che ho realizzato, soprattutto su quelli senza far uso delle virtualKNN. [0] https://pigrecoinfinito.wordpress.com/2018/01/04/spatialite-e-virtualknn/ saluti -- *Ing. Salvatore Fiandaca* *mobile*.:+39 327.493.8955 *m*: *[hidden email] <[hidden email]>* *C.F*.: FNDSVT71E29Z103G *P.IVA*: 06597870820 *membro QGIS Italia - http://qgis.it/ <http://qgis.it/>* *socio GFOSS.it - *http://gfoss.it/ *blog:* * https://pigrecoinfinito.wordpress.com/ <https://pigrecoinfinito.wordpress.com/> FB: Co-admin - https://www.facebook.com/qgis.it/ <https://www.facebook.com/qgis.it/>** <https://www.facebook.com/qgis.it/> * *FB: moderatore - **https://www.facebook.com/groups/GisItalia/ <https://www.facebook.com/groups/GisItalia/>** <https://www.facebook.com/groups/GisItalia/> * *TW: <http://goog_95411464>**https://twitter.com/totofiandaca <https://twitter.com/totofiandaca>* 43°51'0.54"N 10°34'27.62"E - EPSG:4326 “Se la conoscenza deve essere aperta a tutti, perchè mai limitarne l’accesso?” R. Stallman Questo documento, allegati inclusi, contiene informazioni di proprietà di FIANDACA SALVATORE e deve essere utilizzato esclusivamente dal destinatario in relazione alle finalità per le quali è stato ricevuto. E' vietata qualsiasi forma di riproduzione o divulgazione senza l'esplicito consenso di FIANDACA SALVATORE. Qualora fosse stato ricevuto per errore si prega di informare tempestivamente il mittente e distruggere la copia in proprio possesso. _______________________________________________ [hidden email] 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. 796 iscritti al 28/12/2017 |
On Mon, 8 Jan 2018 18:44:55 +0100, Totò Fiandaca wrote:
> Salve a tutti, > ho scoperto che QGIS supporta solo spatialite 4.3, credo sia l'ultima > versione stabile. > > Sto studiando le virtualKNN, un modulo implementato nella spatialite > 4.4, > ed ho scoperto che possono cambiare le sorti di un geodatabase. > ciao Toto', occhio che la prima implementazione della KNN che trovi nella 4.4.0 era affetta da diversi problemi anche gravi che sono stati risolti in seguito. ti consiglio caldamente di utilizzare i sorgenti trunk che trovi sul repository Fossil (4.5.0-devel) se vuoi essere sicuro di avere un KNN che funzioni correttamente. > Ho scritto un articolo e vorrei sottoporlo all'attenzione di persone > più esperte di me. > > Ho alcuni dubbi sui trigger che ho realizzato, soprattutto su quelli > senza > far uso delle virtualKNN. > ho testato il tuo trigger, e funziona correttamente. ci trovo un unico difettuccio: utilizza ben tre UPDATE per ciascuna INSERT, e ciascuna delle UPDATE lancia una subquery KNN che e' un'operazione computazionalmente pesantuccia. ... non mi pare la via migliore per ottenere performances di buon livello. quindi ho provato a razionalizzare e semplificare, e sono arrivato a produrre questo: CREATE TRIGGER ins_punti AFTER INSERT ON punti BEGIN INSERT OR REPLACE INTO punti (fid, nome_strada, data_ins, distanza, geom) SELECT NEW.ROWID, s.nome_strada, DateTime('now'), k.distance, NEW.geom FROM knn AS k LEFT JOIN strade AS s ON (k.fid = s.pk_1) WHERE k.f_table_name = 'strade' AND ref_geometry = NEW.geom AND k.max_items = 1; END a questo punto e' ovvio che serve un secondo Trigger che entri in azione quando un "punto" gia' inserito viene spostato in una nuova posizione. come vedi il secondo Trigger e' praticamente identico al primo, tranne che per le dichiarazioni nella prima riga. CREATE TRIGGER upd_punti AFTER UPDATE OF geom ON punti BEGIN INSERT OR REPLACE INTO punti (fid, nome_strada, data_ins, distanza, geom) SELECT NEW.ROWID, s.nome_strada, DateTime('now'), k.distance, NEW.geom FROM knn AS k LEFT JOIN strade AS s ON (k.fid = s.pk_1) WHERE k.f_table_name = 'strade' AND ref_geometry = NEW.geom AND k.max_items = 1; END ciao Sandro _______________________________________________ [hidden email] 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. 796 iscritti al 28/12/2017 |
Buongiorno e grazie per la risposta.
Come scritto nell'articolo, il test da me effettuato utilizzando 10.000 punti e il mio trigger con tre insert ha impiegato circa 176 sec; cambiando trigger ed utilizzando quello suggerito, il tempo di esecuzione è 83 sec, praticamente meno della metà. fantastico. saluti Il giorno 8 gennaio 2018 21:56, <[hidden email]> ha scritto: > On Mon, 8 Jan 2018 18:44:55 +0100, Totò Fiandaca wrote: > >> Salve a tutti, >> ho scoperto che QGIS supporta solo spatialite 4.3, credo sia l'ultima >> versione stabile. >> >> Sto studiando le virtualKNN, un modulo implementato nella spatialite 4.4, >> ed ho scoperto che possono cambiare le sorti di un geodatabase. >> >> > ciao Toto', > > occhio che la prima implementazione della KNN che trovi nella 4.4.0 > era affetta da diversi problemi anche gravi che sono stati risolti > in seguito. > ti consiglio caldamente di utilizzare i sorgenti trunk che trovi sul > repository Fossil (4.5.0-devel) se vuoi essere sicuro di avere un > KNN che funzioni correttamente. > > > Ho scritto un articolo e vorrei sottoporlo all'attenzione di persone >> più esperte di me. >> >> Ho alcuni dubbi sui trigger che ho realizzato, soprattutto su quelli senza >> far uso delle virtualKNN. >> >> > ho testato il tuo trigger, e funziona correttamente. > ci trovo un unico difettuccio: utilizza ben tre UPDATE per > ciascuna INSERT, e ciascuna delle UPDATE lancia una subquery > KNN che e' un'operazione computazionalmente pesantuccia. > ... non mi pare la via migliore per ottenere performances > di buon livello. > quindi ho provato a razionalizzare e semplificare, e sono > arrivato a produrre questo: > > CREATE TRIGGER ins_punti AFTER INSERT ON punti > BEGIN > INSERT OR REPLACE INTO punti (fid, nome_strada, data_ins, distanza, > geom) > SELECT NEW.ROWID, s.nome_strada, DateTime('now'), k.distance, NEW.geom > FROM knn AS k > LEFT JOIN strade AS s ON (k.fid = s.pk_1) > WHERE k.f_table_name = 'strade' > AND ref_geometry = NEW.geom > AND k.max_items = 1; > END > > > a questo punto e' ovvio che serve un secondo Trigger > che entri in azione quando un "punto" gia' inserito > viene spostato in una nuova posizione. > come vedi il secondo Trigger e' praticamente identico > al primo, tranne che per le dichiarazioni nella prima > riga. > > CREATE TRIGGER upd_punti AFTER UPDATE OF geom ON punti > BEGIN > INSERT OR REPLACE INTO punti (fid, nome_strada, data_ins, distanza, > geom) > SELECT NEW.ROWID, s.nome_strada, DateTime('now'), k.distance, NEW.geom > FROM knn AS k > LEFT JOIN strade AS s ON (k.fid = s.pk_1) > WHERE k.f_table_name = 'strade' > AND ref_geometry = NEW.geom > AND k.max_items = 1; > END > > ciao Sandro > _______________________________________________ > [hidden email] > 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. > 796 iscritti al 28/12/2017 -- *Ing. Salvatore Fiandaca* *mobile*.:+39 327.493.8955 *m*: *[hidden email] <[hidden email]>* *C.F*.: FNDSVT71E29Z103G *P.IVA*: 06597870820 *membro QGIS Italia - http://qgis.it/ <http://qgis.it/>* *socio GFOSS.it - *http://gfoss.it/ *blog:* * https://pigrecoinfinito.wordpress.com/ <https://pigrecoinfinito.wordpress.com/> FB: Co-admin - https://www.facebook.com/qgis.it/ <https://www.facebook.com/qgis.it/>** <https://www.facebook.com/qgis.it/> * *FB: moderatore - **https://www.facebook.com/groups/GisItalia/ <https://www.facebook.com/groups/GisItalia/>** <https://www.facebook.com/groups/GisItalia/> * *TW: <http://goog_95411464>**https://twitter.com/totofiandaca <https://twitter.com/totofiandaca>* 43°51'0.54"N 10°34'27.62"E - EPSG:4326 “Se la conoscenza deve essere aperta a tutti, perchè mai limitarne l’accesso?” R. Stallman Questo documento, allegati inclusi, contiene informazioni di proprietà di FIANDACA SALVATORE e deve essere utilizzato esclusivamente dal destinatario in relazione alle finalità per le quali è stato ricevuto. E' vietata qualsiasi forma di riproduzione o divulgazione senza l'esplicito consenso di FIANDACA SALVATORE. Qualora fosse stato ricevuto per errore si prega di informare tempestivamente il mittente e distruggere la copia in proprio possesso. _______________________________________________ [hidden email] 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. 796 iscritti al 28/12/2017 |
Free forum by Nabble | Edit this page |