Eliminare le geometrie duplicate dopo aver raggruppato e sommato alcuni attributi relativi a geometrie duplicate.

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:

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


I MIEI CANALI – ISCRIVITI


Se il blog post Ti è piaciuto cliccate su ‘Mi piace’, grazie!!!
if you liked the blog post click on ‘Like’, thank you !!!

SE IL POST/BLOG TI È STATO UTILE CONTRIBUISCI A MANTENERLO AGGIORNATO PAYPAL


Pubblicità

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.