[Gfoss] spatialite e le virtualKNN

Totò Fiandaca pigrecoinfinito a gmail.com
Mar 9 Gen 2018 10:18:38 CET


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, <a.furieri a lqt.it> 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
> _______________________________________________
> Gfoss a 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.
> 796 iscritti al 28/12/2017




-- 
*Ing. Salvatore Fiandaca*
*mobile*.:+39 327.493.8955
*m*: *pigrecoinfinito a gmail.com <pigrecoinfinito a gmail.com>*
*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.


Maggiori informazioni sulla lista Gfoss