domenica 4 ottobre 2009

Creare una mappa in locale con OpenStreetMap

Le mappe di OpenStreetMap possono essere inserite nel proprio sito reperendole online oppure ricreando i TILE che le compongono tramite software di render per essere poi consultabili in locale senza aver la necessità di una connessione ad internet.

Mettiamo ad esempio il caso che questo servizio ci serva per la creazione di uno strumento interattivo per musei e che il museo non possegga una connessione ad internet per l'integrazione di questo servizio (faccio questo esempio perché mi è capitato), in questo caso basta fare una copia in locale della porzione di mappa che ci interessa.

Questo è quello che cercherò di mostrarvi oggi!!!

Per prima cosa è necessario scaricare e installare i seguenti software:

  • Python2.5
    N.B. installare Python2.5 e non versioni precedenti

Ora convertiremo il file OSM (che è un file di backup del database di OpenStreetmap) in un database con estensione geografica.

Creeremo un nuovo ruolo all'interno di Postgres a cui daremo il nome dell'account windows e un nuovo database di nome 'gis'.
Quindi andremo su ruolo utente -> nuovo ruolo utente

  • In proprietà metteremo come nome del ruolo il nome che abbiamo dato all'account windows
  • In privilegi di ruolo spunteremo tutto


Ora creeremo il database:

Andremo su database (tasto destro) -> nuovo database

  • Nome: gis
  • Proprietario: nome del ruolo creato prima
  • Codifica: UTF8
  • Modello: template_postgis
  • Tablespace: pg_default
  • Aggiungeremo al database alcuni requisiti tramite una query:
    GRANT ALL ON DATABASE gis TO public;
    GRANT ALL ON DATABASE gis TO " account windows ";
    COMMENT ON DATABASE gis IS 'OSM';






Il prossimo passo sarà quello di andare a modificare il file pg_hba.conf in modo che l'accesso al server possa essere fatto senza l'utilizzo di una password, altrimenti il programmino osm2psql non riuscirebbe ad accedervi.
File->Apertura di pg_hba.conf
Selezioniamo il file che nel mio caso ha il seguente percorso:
C:\Program Files\PostgreSQL\8.4\data
Una volta aperto modifichiamo il metodo in 'trust' e facciamo ricaricare il server.

A questo punto bisognerà scaricare il file OSM che conterrà tutte le informazioni riguardanti i nodi, le vie e le relazioni tra esse dell'intero pianeta o della sola area che si vorrà renderizzare.
Eccovi i file OSM:
http://debian.gfoss.it/maps/
http://planet.openstreetmap.org/planet-latest.osm.bz2

Scaricato il file basterà far partire il comando DOS osm2pgsql, se ad esempio il programmino si trova in:
C:\Program Files\PostgreSQL\8.4\bin
Basterà eseguire i seguenti comandi da DOS:
cd C:\Program Files\PostgreSQL\8.4\bin
osm2pgsql.exe -v E:\Openstreetmap\planet.osm

In questo modo I dati verranno caricati all'interno del database precedentemente creato.

Con l'utilizzo del database venutosi a creare sarà possibile renderizzare i TILES.
Per fare ciò è necessario installare Python2.5 e Mapnik:

  • Per prima cosa si installa Python che è un eseguibile e non necessità di spiegazioni per l'installazione

Se non si dovesse riuscire a configurare i file con python basta usare uno dei tanti editor per sostituire all'interno del file osm-template.xml le variabili con i nostri dati.
Ad esempio:

SYMBOLS_DIR=C:/mapnik-0_5_1/osm/symbols
WORLD_BOUNDARIES_DIR= C:/mapnik-0_5_1/osm/boundaries
DBHOST="localhost"
DBPORT="5432"
DBNAME='gis'
DBUSER=`Sym`
DBPASS=""
PREFIX="planet_osm"

Una volta sostituite queste variabili con I vostri dati, bisognerà modificare alcune cose all'interno del file generate_tiles.py:

in fondo al file al posto di:

if __name__ == "__main__":
home = os.environ['HOME']
try:
mapfile = os.environ['MAPNIK_MAP_FILE']
except KeyError:
mapfile = home + "/osm-local.xml"
try:
tile_dir = os.environ['MAPNIK_TILE_DIR']
except KeyError:
tile_dir = home + "/osm/tiles/"

bisognerà ad esempio inserire:

if __name__ == "__main__":
home = "C:/mapnik_0_6_1/osm"
mapfile = home + "/osm-template.xml"
tile_dir = home + "/tiles/"

Dopo aver fatto tutto ciò sarà possible far partire lo script generate_tiles.py


I COMMENTI SONO BEN ACCETTI PER EVENTUALI CORREZIONI ED AGGIORNAMENTI IN MERITO A QUESTO ARGOMENTO.
PER EVENTUALI DIFFICOLTA' SARO' BEN LIETO DI AIUTARVI FIN DOVE MI SARA' POSSIBILE.

1 commenti:

  1. ciao ottimo tutorial!
    avresti qualche suggerimento per realizzare uno stile personale della mappa renderizzata?
    (come ad esempio è stato fatto qui http://wiki.openstreetmap.org/images/e/e9/Italian_wms_North_italy.png)

    grazie e complimenti ancora per il tutorial

    RispondiElimina