1. Creazione Database OSM

Creazione template_gis

Dopo aver installato PostgreSQL (versione maggiore e 9.0) e PostGIS (preferibilmente 2.0) è bene creare creare un template che contenga le funzioni di PostGIS e quelle di hstore. Diventate utente postgres ed eseguite i seguenti comandi se avete una versione di PostGIS almeno 2.0

#create il database template_gis
createdb template_gis
#entrate dentro il database
psql template_gis
#aggiungete le estensioni postgis e hstore
CREATE EXTENSION postgis;
CREATE EXTENSION hstore;
#impostate che il database template_gis è un tamplate
UPDATE pg_database SET datistemplate = True where datname = 'template_gis';

Altrimenti se avete un versione precedente alla 2.0

#create il database template_gis
createdb template_gis
# aggiungete il linguaggio plpgsql
createlang plpgsql template_gis
# aggiungere le funziona spaziali e i sistemi di riferimento
psql -d template_gis -f /percorso/al/file/postgis.sql
psql -d template_gis -f /percorso/al/file/spatial_ref_sys.sql
# aggiungete hstore
psql -d template_gis -f /percorso/al/file/hstore.sql
# a questo punto entrare nel database e settare il template
psql template_gis
UPDATE pg_database SET datistemplate = True where datname = 'template_gis';

Terminato con il template, create un utente SUPERUSER con il nome del vostro utente del sistema operativo e uscite dal database così

#sempre da dentro il database
CREATE USER $USER SUPERUSER password 'vostrapassword';
#uscite
\q

Avvertimento

$USER va sostituito il proprio nome utente

Usciti dal database dovete ritornare ad essere il vostro normale utente uscendo da postgres e da amministratore (root)

Creazione e popolazione del database

A questo punto, ritornati utenti normali, potete creare il database con il template precedentemente impostato

createdb -T template_gis italia_osm

Ora ci rimane solo di importare i dati, perciò scaricate il file contenente i dati di OpenStreetMap nel formato e della zona a cui siete interessati, esistono diversi servizi dedicati per esempio quelli forniti da GFOSS.it (che permette di scaricare le regioni italiane aggiornate settimanalmente) oppure Geofabrik. In questa guida lavoreremo sul file italiano in formato pbf scaricato da Geofabrik. Una volta ottenuto il file bisogna importarlo all’interno del database utilizzando osm2pgsql, posizionatevi nella cartella in cui è presente il file e lanciate

osm2pgsql --slim --hstore -prefix italy -database italia_osm -username $USER italy.osm.pbf

Avvertimento

L’opzione --slim è fondamentale per poi creare il sistema di replica oraria o giornaliera

Hstore

Hstore è una tipologia di dato, il quale può archiviare molteplici coppie di chiavi/valori, proprio come sono definiti i tag di OpenStreetMap. Con questo formato di dati è possibile salvare tutti i tags di ogni singolo elemento senza doverli salvare in colonne dedicate. Se in futuro avrete necessità potrete sempre aggiungere una nuova colonna e popolarla attravarso la colonna hstore.

In osm2pgsql è possibile salvare i dati nella colonna hstore con tre differenti metodi:

  • l’opzione -k permette di inserire nella colonna hstore solo i tags che non sono considerati per creare colonne
  • l’opzione j o --hstore-all inserisce nella colonna hstore tutti i tags presenti per ogni elemento
  • l’opzione -z o --hstore-column permette di inserire solamente i tags che iniziano una specifica stringa, per esempio ‘name:’ importerà solo i tag “name:XX”

Cambiare lo stile di osm2pgsql

osm2pgsql per sapere quali tag di OpenStreetMap importare, utilizza un file che si chiama default.style. Questo contiene una serie di tag e le informazioni su come essere usati. Di seguito una estrapolazione del file

Elemento OSM Tag Tipologia valore Opzioni
way osmc:symbol text linear
node poi text  
node,way population text linear
node,way place text polygon

Fate una copia del suddetto documento rinominandolo con il vostro nome utente e modificatelo a piacere, per rimuovere alcuni tag basta mettere un cancelletto # davati alla riga per commentarlo. Vi consiglio di decommentare (rimuovere il cancelleto per far si che la riga venga letta) le righe che contengono i valori osm_user, osm_uid, osm_version, osm_timestamp questi quattro campi sono molto utili per effettuare analisi statistiche sugli utenti e per sapere che ha editato per ultimo quell’elemento. A questo punto il comando per importare i dati di OpenStreetMap verrà leggermente modificato per far si che le nuove impostazioni abbiano effetto; si dovrà aggiungere l’opzione --extra-attributes per far si che i quattro tag spiegati sopra vengano considerati e l’opzione --style per far si che venga letto il file delle impostazioni corretto.

osm2pgsql --smill --hstore --extra-attributes --style $USER.style -prefix italy -database italia_osm -username $USER italy.osm.pbf