I Virtual Layer sono stati introdotti, per la prima volta nel 2016, in QGIS 2.14 (mio blog post), oggi vediamo come velocizzare le query utilizzando il supporto Index implementato per i virtual layer da Hugo Mercier .
Il miglior modo per spiegarlo è facendo un esempio concreto.
Supponiamo di avere uno strato poligonale (circoscrizioni) e uno puntuale (point2), vogliamo calcolare il numero di punti su ogni poligono; la query base è la seguente:
SELECT pl.fid, count (*) AS numero
FROM point2 pt, circoscrizioni pl
WHERE st_intersects (pt.geometry, pl.geometry) = 1
GROUP BY 1;
tempo impiegato (il mio PC è del 2015) 38 secondi circa.
Utilizzando il supporto allo spatialIndex, implementato per i virtual layer, la query sarà:
SELECT pl.fid, count (*) AS numero
FROM point2 pt, circoscrizioni pl
WHERE pt._search_frame_ = pl .geometry
AND st_intersects (pt.geometry, pl.geometry) = 1
GROUP BY 1;
tempo impiegato (il mio PC è del 2015) 13 secondi circa.
Approfondimenti:
GitHub : https://github.com/mhugo/qgis_vlayers
QGIS virtual layer: https://docs.qgis.org/2.14/en/docs/user_manual/working_with_vector/virtual_layers.html
Buon lavoro con QGIS!
Grazie, ottimo come sempre!
"Mi piace"Piace a 1 persona
Grazie Luca.
"Mi piace""Mi piace"
Molto interessante, anche se dovrò provare a cimentarmi perchè non conosco il linguaggio sql.
"Mi piace"Piace a 1 persona
Ciao Roberta,
ecco un cookbook in italiano del 2011,
è una ottima base per iniziare.
PS. occorre sempre un po’ di studio su SQL
Fai clic per accedere a SpatiaLite-Cookbook_ITA.pdf
"Mi piace""Mi piace"