QueryOSM Italia

Introduzione

QueryOSM è un servizio WPS (Web Processing Service), realizzato con ZOO-project, per effettuare interrogazioni su un database PostgreSQL/PostGIS contenente una copia, attualmente aggiornata ogni ora, del database italiano di OpenStreetMap (d'ora in poi OSM). Il servizio restituisce i dati richiesti in un formato GIS aperto, ad oggi è supportato solo il GML, in futuro sarà possibile anche ottenere il formato GeoJSON.
WPS è uno standard OGC (Open Geospatial Consortium) che serve per effettuare operazioni geospaziali tramite web.
Attualmente è possibile interrogare il database solamente attraverso un desktop GIS con un client WPS, è in via di sviluppo un'interfaccia web per effettuare le richieste.

Come utilizzare il servizio

Di seguito troverete le informazioni su come sfruttare il servizio WPS utilizzando QGIS, un Desktop GIS libero.
  • Per prima cosa se non avete già QGIS dovete installarlo; è possibile scaricare versioni per ogni sistema operativo. Per gli utenti Windows si consiglia di utilizzare l'installer OSGEO4W
  • Una volta installato dovete scaricare il plugin WPS-client:
    • Dovete spostarvi su "Plugins" --> "Recupero Plugin Python"
      Interfaccia Recupero Plugin Python
    • Ora attivate i repositories aggiuntivi in modo da ottenere la maggior parte dei plugins per QGIS in specialmodo il WPS client; spostatevi su "Repository" e poi cliccate sul bottone "Aggiungi repository di parti terze"
    • Tornate sul pannello "Plugin", a questo punto cercate ed installate WPS-client
    • Se l'installazione si conclude correttamente troverete un nuovo pannello sotto quello dei layer che vi permette di effettuare le richieste WPS.
      Interfaccia QGIS con evidenziato il QGIS WPS Client
  • Lanciate il WPS Client plugin cliccando sul bottone "Connect", si aprirà una nuova finestra
    Interfaccia WPS client
  • A questo punto bisogna aggiungere la connessione al nostro server, cliccate "New" e vi apparirà questo form
    Interfaccia per aggiungere un nuovo server WPS
  • I parametri da inserire sono:
    "Nome": quello che preferite voi
    "URL": http://geodati.fmach.it/zoo/
    ora salvate cliccando "ok"
  • Ora selezionate il server corretto, se ne avete più di uno, e cliccare su "Connect". Verranno visualizzati i servizi utilizzabili tra cui queryosm, che dovrete selezionare (questa schermata si ottiene tramite una richiesta GetCapabilities)
    Lista dei servizi utilizzabili con evidenziato queryosm
  • Selezionato queryosm cliccate su "ok" a fondo pagina e verrà aperto un nuovo form da compilare inserendo alcuni campi (questa schermata si ottiene tramite una richiesta DescribeProcess)
    Interfaccia per effettuare la richiesta vera e propria a queryosm
  • Due sono i campi da compilare:
    "keyvalues": questa dev'essere la stringa SQL codificata rispetto alcuni parametri, leggete sotto per maggiori informazioni sulla creazione delle query
    "type": la tipologia che volete interrogare, le possibili opzioni sono: point,line,polygon
  • A questo punto non vi resta che aspettare la risposta del servizio. Maggiore sarà la quantità di dati richiesti (richiesta di dati generici, oppure grande numero di elementi all'interno del database) più sarà l'attesa per ottenere i dati

Creare le query

Le query vengono effettuate sulla colonna hstore, questo poiché tale colonna contiene tutti i tag di ogni singolo elemento. Per supportare in modo semplice la possibilità di creare query altamente personalizzabili si è dovuto inventare una codifica in modo tale da convertire le stringhe in query SQL valide.
Vediamo ora un esempio di stringa valida:
($ 'amenity=>recycling') questa stringa inserita nel campo "keyvalues" vi ritornerà tutti i cassonetti del reciclaggio presenti.

Spiegazione della stringa utilizzata sopra:
  • ( e ) sono normalissime parentesi tonde utilizzate da SQL, servono per creare query più complesse, ma è bene utilizzarle anche per un unico tag come in questo caso
  • $ questo carattere è fondamentale, il servizio lo sostituirà con il nome della tabella da interrogare, va inserito prima di ogni coppia di chiave e valore
  • 'amenity=>recycling' sono la chiave e il valore sui quali si vuole fare la query, devono essere sempre chiuse dentro a delle virgolette singole
Vediamo ora interrogazioni più complesse:
($ 'amenity=>recycling' AND $ 'recycling:paper=>yes') restituisce i cassonetti del riciclaggio con la possibilità di differenziare carta
($ 'amenity=>recycling' AND $ 'recycling:paper=>yes') AND NOT ($ 'amenity=>recycling' AND $ 'recycling:glass=>yes') restituisce i cassonetti del riciclaggio con la possibilità di differenziare carta ma non è presente il vetro
OpenStreetMap
ZOO-Project
PostGIS
GDAL/OGR
PostgreSQL
Python

Contatti