2. Replicazione Database OSM

Requisiti

Prima configurazione

Per la replica del database trovi tutto nella cartella osm all’interno della home ($HOME/osm)

Per creare una replica bisogna, prima settare una variabile con il percorso alla cartella, lanciando i comandi

export WORKDIR_OSM=$HOME/osm
osmosis --read-replication-interval-init workingDirectory=$WORKDIR_OSM

A questo punto nella cartella troverete i seguenti file:

  • download.lock: serve per assicurarsi che ci sia solo un processo per l’aggiornamento
  • configuration.txt: questo è un file importante che serve per impostare alcune variabili fondamentali del processo. Le variabili sono due, baseUrl per settare l’indirizzo con la cadenza degli aggiornamenti (ogni minuto, oraria o giornaliera) tra uno dei tre che trovate a questo indirizzo http://planet.openstreetmap.org/replication/day/, il secondo parametro è maxInterval che serve per l’intervallo massimo tra un aggiornamento e l’altro, il valore di default 3600 (1 ora) con valori più alti (610000 per circa una settimana)

A questo punto andate sul sito di Peter Körner che ha messo a disposizione uno strumento molto utile che vi permetterà di creare l’ultimo file che vi serve per incominciare le repliche. Dovrete inserire data e ora del file OSM che avrete caricato sul database, è bene mettere qualche ora prima la creazione del vostro file.

_images/peter_korner.png

Nell’immagine il file da noi importato era successivo alle ore 8:00 del 6 Agosto 2012.

Una volta cliccato su fetch state-file vi apparirà un testo che andrà copiato sul file state.txt che indica da quale file di repliche partire (quasi sicuramente questo file non esisterà, perciò createne uno nuovo). Tra l’altro vi segnala anche l’url da utilizzare all’interno di configuration.txt nel parametro baseUrl.

Aggiornamento

A questo punto potete iniziare le repliche eseguendo il comando che va a creare il file changes.osc.gz contenente le modifiche effettuate in tutto il database di OSM nell’intervallo di tempo scelto

osmosis --read-replication-interval workingDirectory=$WORKDIR_OSM --simplify-change --write-xml-change ${WORKDIR_OSM}/changes.osc.gz

A questo punto potrete aggiornare il vostro database con il comando

osm2pgsql --hstore --extra-attributes --slim --style ${WORKDIR_OSM}/$USER.style --append --bbox 736908.312374,4364809.557207,2061080.260718,5926235.628896 --database italia_osm --username $USER --prefix italia ${WORKDIR_OSM}/changes.osc.gz

Avvertimento

Se utilizzate un file diverso dovete cambiare i valori dell’opzione --bbox. Dovrete usare coordinare con il sistema di proiezione EPSG:900913 (oppure col codice ufficiale EPSG:3857)

L’aggiornamento a questo punto è terminato. C’è ancora un passaggio facoltativo ma che consiglio vivamente ed è quello della pulizia del database da dati rimasti orfani (si trovano al di fuori della bounding box definita) per non fare aumentare troppo la dimensione del database, basta eseguire questi quattro comandi

psql -c "DELETE FROM italia_ways AS w WHERE 0 = (SELECT count(1) FROM italia_nodes AS n WHERE n.id = ANY(w.nodes));" italia_osm
psql -c "DELETE FROM italia_rels AS r WHERE 0 = (SELECT count(1) FROM italia_nodes AS n WHERE n.id = ANY(r.parts)) AND 0 = (SELECT count(1) FROM italia_ways AS w WHERE w.id = ANY(r.parts));" italia_osm
psql -c "REINDEX TABLE italia_ways;" italia_osm
psql -c "REINDEX TABLE italia_rels;" italia_osm
psql -c "VACUUM FULL;" italia_osm