Archivio dei tag topologia

Eliminare i duplicati da un vettore

Lavorando sui dati di OSM mi sono trovato a dover affrontare un piccolo grande problema di sovrapposizione di vettori lineari.

Ho scaricato una grossa mole di dati relativi all’idrografia della Francia orientale usando il plugin QuickOSM e, siccome l’area era davvero vasta, l’ho dovuta suddividere in quadranti di 100km di lato. Solo in questo modo, sfruttando ogni singolo quadrante, ho potuto effettuare il download in maniera corretta e senza superare il tempo massimo di risposta del server.

Questa procedura ha però fatto nascere la problematica che mi ha portato a fare questo articolo ed il video tutorial che troverai in fondo. In pratica, ogni qualvolta scaricavo da un quadrante l’idrografia ed esso era attraversato da fiumi che a loro volta attraversavano altri quadranti, questi venivano caricati anche nel quadrante attivo in quel momenti e, visto che tutto confluiva in un unico vettore lineare presente in un GeoDB contenuto in PostGIS, mi sono ritrovato tantissimi duplicati; nello specifico 11.919! I duplicati oltre a rendere il vettore pesante lo rendevano affetto da errori topologici.

Mi sono accorto di questi duplicati perchè ho fatto una verifica topologica con il plugin Topology Checker impostando la verifica sui duplicati, così come visualizzato nell’immagine che segue.

duplicati

Effettuata la verifica il risultato è stato quello che vedi di seguito.

duplicati

Indagando la tabella attributi ho notato la presenza della colonna full_id e, guardando il feature ID delle geometrie duplicate presenti nel report di Topology Checker, ho notato che in quella colonna i duplicati erano facilmente individuabili perchè avevano lo stesso full_id.

duplicati

Istintivamente mi sono così concentrato su quella colonna e visto che volevo risolvere il tutto usando l’SQL mi sono documentato in giro sul web su come poter eliminare il problema.

Ho prima lanciato questa query:

SELECT
full_id,
COUNT(full_id) AS counter
FROM waterway_new
GROUP BY full_id
ORDER BY counter;

Individuando così un elenco di duplicati. Alcuni fiumi erano duplicati anche 7 volte!

Poi ho usato la query che segue per creare un nuovo vettore depurato dai duplicati:

CREATE TABLE waterway_new_noduplicate AS
SELECT DISTINCT ON (full_id) *
FROM waterway_new;

Tutta la procedura l’ho racchiusa nel video tutorial che trovi di seguito. Un’altra strada sarebbe potuta essere quella di usare il plugin MMQGIS senza quindi usare l’SQL.

 

Topologia e relazioni spaziali

La topologia – o studio dei luoghi – (dal greco tόpos “luogo” e lόgos “studio”) è una delle branche della matematica moderna; studia le proprietà delle figure geometriche e delle forme che non subiscono cambiamenti quando vengono deformate senza strappi, sovrapposizioni o incollature. Essa si basa sui concetti di spazio topologico, funzione continua ed omeomorfismo.

La topologia studia relazioni spaziali tra oggetti geometrici, grazie ad essa, nella “tecnologia” GIS, possiamo organizzare in maniere molto sofisticata le informazioni. Possiamo infatti suddividere le informazioni su due livelli: un livello geometrico dedicato unicamente alle geometrie ed un livello topologico in cui esplicitiamo tramite tabelle alcune relazioni spaziali tra primitive dette topologiche.

La topologia si basa su tre concetti principali:

  1. arco-nodo: gli archi possono essere connessi soltanto agli estremi;
  2. sinistra-destra: gli archi hanno un verso e quindi un lato destro e uno sinistro;
  3. poligono-arco: le aree sono definite come porzioni di superficie racchiuse in poligoni formati da archi.

Per soddisfare, sia l’esigenza di archiviazione e rappresentazione dei dati grafici che di strutturazione delle connessione con i dati alfanumerici, si utilizzano dei modelli di archiviazione di primitive grafiche organizzati secondo strutture topologicamente definite. I modelli di archiviazione sono:

  • il punto, che in base alla scala potrà essere utilizzato sia per rappresentare una posizione (ad esempio l’intersezione di assi stradali) che oggetti dotati di dimensioni non nulle (ad esempio un albero); esso viene comunemente archiviato con un coppia o una terna di coordinate;
  • gli archi, rappresentati come spezzate o poligonali aperte, sono usati per la rappresentazioni di elementi lineari e vengono archiviati come sequenze di coordinate dei nodi di estremità e dei loro vertici intermedi;
  • i poligoni, individuati per rappresentare aree chiuse, vengono rappresentati con spezzate aventi il primo e l’ultimo vertice coincidente, vengono archiviati come sequenza di archi e di linee che li delimitano.

La connessione tra due archi è rappresentata dal fatto di possedere un nodo in comune, l’adiacenza (o contiguità) tra due poligoni è rappresentata dal fatto di avere un arco in comune.

Grazie alla struttura topologica, alle entità geografiche, sono associate degli attributi permettendo l’analisi spaziale del territorio che stiamo studiando; con la topologia lasciamo invariate le relazioni spaziali tra gli elementi, cioè:

  • adiacenza (o contiguità): consideriamo due poligoni, A e B, confinanti; qualunque sia la manipolazione che effettuo su A, il poligono B dovrà continuare ad essere confinante con A. Ad esempio se deformo la carta dell’Europa politica, la Spagna dovrà continuare a confinare con Francia e Portogallo;topologia
  • intersezione: un poligono può essere intersecato da un elemento lineare ad esempio. Per fare un esempio pratico si consideri una autostrada che attraversa il territorio di un certo comune; topologia
  • contenimento: consideriamo due poligoni, A e B; B contiene A. Ad esempio il poligono Italia contiene il poligono San Marino; topologia
  • connettività: se due elementi lineari sono connessi tra di loro, la connettività ci consente di passare dall’uno all’altro;
  • posizione relativa: una volta stabilita una direzione, un sistema di riferimento, il poligono rettangolare A del primo esempio sarà sempre alla sinistra del poligono esagonale B.

Guarda la video dimostrazione!