spatialite e le virtualKNN

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

spatialite e le virtualKNN

pigreco
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
Reply | Threaded
Open this post in threaded view
|

Re: spatialite e le virtualKNN

a.furieri
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
Reply | Threaded
Open this post in threaded view
|

Re: spatialite e le virtualKNN

pigreco
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