In questo blog post descriverò come ho risolto questo problema e metterò a confronto i metodi utilizzati.
Eliminare le geometrie duplicate, o più genericamente, eliminare elementi con un attributo duplicato, è cosa abbastanza semplice e veloce in quanto esistono tool che lo fanno egregiamente; in questo caso specifico il problema ha una piccola complicazione, ovvero, per quei casi di geometria duplicata, prima di eliminare il duplicato, occorre raggruppare e sommare alcuni attributi.
Query SQL spaziale con SpatiaLite 5
La prima cosa che ho provato è quella di risolvere il problema tramite query SQL, ecco sotto la query utilizzata:
SELECT
t1.pk AS pk,
t1.abc AS abc,
t1.def AS def,
t2.vol_auto AS vol_auto,
t2.vol_mezzi AS vol_mezzi,
t2.vol_autobu AS vol_autobus,
t2.lista_pk AS lista_pk,
t2.nro AS nro,
t1.geom AS geom
FROM
rete t1
JOIN (
SELECT
pk,
SUM("vol auto") AS vol_auto,
SUM("vol mezzi") AS vol_mezzi,
SUM("vol autobus") AS vol_autobus,
group_concat(pk) AS lista_pk,
COUNT(*) AS nro
FROM
rete a
GROUP BY
AsWKT(st_centroid(geom), 3)
) t2 ON t1.pk = t2.pk
ORDER BY
1
il database di partenza aveva circa 9k feature, dopo il lancio della query, ottengo l’output dopo 313 millesimi di secondo, praticamente istantaneo:
Algoritmo AGGREGA di QGIS 3.26 Buenos Aires
In QGIS ci sono centinaia di algoritmi pronti all’uso, uno tra questi, utile allo scopo è l’algoritmo AGGREGA:
ottengo stesso output dopo oltre 37 secondi:
In realtà all’algoritmo non faccio calcolare la lista dei pk
e il numero di feature unite.
NOTE FINALI : La query SQL è 100 volte più veloce rispetto l’algoritmo di QGIS, probabilmente l’algoritmo non è ottimizzato.
NOTA IMPORTANTE : per risolvere il quesito ho dovuto calcolare, sia per la query che per l’algoritmo, il baricentro degli elementi e di questi calcolare la rappresentazione WKT, attraverso la quale ho potuto definire la precisione dei valori delle coordinate dopo la virgola.
RIFERIMENTI
- SpatiaLite : http://www.gaia-gis.it/gaia-sins/
- QGIS : https://www.qgis.org/it/site/
I MIEI CANALI – ISCRIVITI
- Telegram : https://t.me/pigrecoinfinito
- YouTube : https://www.youtube.com/c/TotòFiandaca
Se il blog post Ti è piaciuto cliccate su ‘Mi piace’, grazie!!!
if you liked the blog post click on ‘Like’, thank you !!!