Archivio dei tag openstreetmap

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.

 

Una mappa per ogni esigenza grazie all’Opengeodata

In questa settimana ho messo on line la Mappa dei professionisti italiani dei GIS, grazie anche all’aiuto di Salvatore Fiandaca e di PjHooker, tutta basata sull’Opengeodata.

L’interesse da parte dei professionisti “gissari” verso questo piccolo progetto è stato alto, in meno di 24 ore sono passato da 28 adesioni a quasi 60 in tutta Italia – domani sera pubblicherò un nuovo aggiornamento con le 75 adesioni ricevute fin’ora – ci sono state anche delle critiche, poche, qualche buon consiglio ed indicazioni e tanto ma tanto entusiasmo ed interesse.

Questo post nasce da una riflessione che facevo ieri mentre con Salvatore cercavamo di risolvere un problema relativo alla geolocalizzazione degli intervistati.

Fino ad allora chi compilava il form inseriva la città di residenza, io importavo il form in un progetto QGIS fatto ad hoc e connesso a PostGIS, da PostGIS facevo il join che mi ha suggerito Salvatore ed ottenevo la posizione degli intervistati sui centroidi dei comuni di residenza. Il problema nasceva quando più persone hanno la residenza nello stesso comune; il risultato del join infatti è la sovrapposizione di più punti che rendono impossibile la corretta consultazione della mappa. In questi casi mi mettevo a spostare a mano i punti, avendo realizzato un buffer dei centroidi a 250 metri, posizionavo manualmente i punti sul confine del buffer. Questa operazione può essere accettabile se i punti sulla mappa sono pochi ma diventa un lavoraccio quando iniziano ad aumentare.

OpengeodataCercando in rete ho scoperto che è possibile collegare i form – solo ora mi accorgo di aver scritto un generico form in precedenza ma quello che ho usato io è un Google Form salvato su Google Drive – a Google My Maps. Così ho passato parte della giornata di ieri a fare una serie di test insieme con Salvatore ed ahinoi sono stati infruttuosi. L’idea era quella di esportare il kml da My Maps e caricarlo in QGIS in modo da tirare fuori il geojson da mettere online. Purtroppo Google, ad ora, consente di esportare i kml creati dai form solo come immagini; su Google Earth ti compare il marker del singolo intervistato ma il kml caricato in QGIS risulta essere solo una tabella senza attributi geografici. Almeno abbiamo capito che in alcuni casi Google prende e non restituisce.

La soluzione al problema ce l’ha data Geocode grazie ad una intuizione di Salvatore. Il nuovo form, già online, oltre alla città di residenza ora chiede anche l’indirizzo esatto e la regione. Grazie a Geocode ed all’Opengeodata ottengo uno shp che convertito in geojson mi consente di posizionare in maniera esatta gli intervistati sulla mappa in maniera automatica.

I contro, uno: se l’intervistato inserisce un indirizzo non corretto oppure omette un dato non compare sulla mappa. Sebbene chi risponde al form ha l’obbligo di compilare i campi con l’asterisco ogni tanto mi capita di vedere persone che aggirano l’obbligo inserendo caratteri a vuoto. I pro: ho ridotto sensibilmente i tempi di lavorazione dei dati e di pubblicazione, ho usato software Open Source non spendendo un euro, ho usato informazioni basate sugli Opengeodata ed in particolare su OpenStreetMap!

L’importanza dell’Opengeodata forse a molti ancora sfugge ma ci sono una infinità di servizi che possono essere sviluppati grazie a loro ed a prezzi abbordabilissimi sia per chi li fornisce che per chi li sfrutta. Un esempio, tutto made in Italy, è il videogioco basato sulla realtà aumentata Father.io, che ha superato del 651% l’obiettivo che si era posto su Indiegogo; il singolo player si sposta su una mappa ed indovinate quale mappa? Ovviamente la mappa di OpenStreetMap quindi basata su Opengeodata!

Purtroppo in Italia si è ancora affezionati al concetto, errato, che un prodotto generato o basato su software Open Source non è altrettanto buono quanto uno a pagamento. Ma si sta cambiando direzione per fortuna e forse non tutti se ne sono accorti!  Analizzando i dati di Google Trends, inserendo come chiavi di ricerca QGIS ed ArcGIS si nota come dall’inizio della crisi economica il programma ESRI abbia iniziato a perdere posizioni in Italia a favore di QGIS, con un sorpasso netto di quest’ultimo a cavallo tra il 2013 ed il 2014.

Un esempio pratico è il Geoportale della Regione Basilicata tutto basato su tecnologia Open Source ed indovinate quale è la regione italiana con il maggior numero di ricerche con chiave QGIS? Date un occhio alla mappa!