Mapnik | un tiles cacher di dati OSM

Creare delle tiles a partire dal db OSM? Si può fare in locale. Come? Basta installare Mapnik, Postgresql con estensione spaziale postgis e scaricare un planet di OSM.

Ecco come ho fatto i miei test. Molto probabilmente non è la strada più diretta e corretta, ma a volte “smazzarsi” un po’ di codice e un po’ di errori aiuta a comprendere un po’ di più le cose. In questo/i post faccio riferimento a operazioni svolte con Debian (Lenny).

Partiamo dall’inizio:-

– installare Postgresql con estensione spaziale postgis (per questo rimando alle pagine relative);

– installare mapnik con

# apt-get install mapnik (oppure tramite “synaptic”);

– reperiamo i dati del planet che ci interessa: io ho scaricato il planet italiano da qui. Si ottine il file italy.osm.bz2.

– creare il database che riceverà i dati. Diventare utente postgres e creare il db con:

# createdb -E UTF8 -O sit osm

dove “osm” è il nome del db e “sit” è il nome dell’utente

– creare il linguaggio per il db:

# createlang plpgsql osm

– aggiungere le tabelle per fare in modo che sia un geodb:

# psql -d osm -f /usr/share/postgresql-8.3-postgis/lwpostgis.sql

– Fare in modo che le tabelle spaziali siano di proprietà dell’utente sit:

# echo “ALTER TABLE geometry_columns OWNER TO sit; ALTER TABLE spatial_ref_sys OWNER TO sit;” | psql -d osm

– popliamo il db creato tramite “osm2pgsql”

# osm2pgsql -m -d osm /home/sit/osm/data/italy.osm.bz2

– posizionarsi nella home directory e lanciare il comando:

$ svn checkout http://svn.openstreetmap.org/applications/rendering/mapnik

In questo modo reperiamo una serie di file e directory già strutturate per effettuare le operazioni di rendering. Viene creata una directory “mapnik”.

– Posizionarsi in “mapnik”

$ cd mapnik

– scaricare gli SHP di linee di costa e boundary:

$ wget http://tile.openstreetmap.org/world_boundaries-spherical.tgz

$ tar zxvf world_boundaries-spherical.tgz

$ wget http://hypercube.telascience.org/~kleptog/processed_p.zip

$ unzip processed_p.zip

$ mv coastlines/* world_boundaries/

$ rmdir coastlines

– spostarsi nella directory world_boundaries:

$ cd world_boundaries

$ wget http://tile.openstreetmap.org/shoreline_300.tar.bz2

$ tar xvjf shoreline_300.tar.bz2

– fare una copia del file set-mapnik-env e chiamarla, per esempio, z0-set-mapnik-env.

$ cp set-mapnik-env z0-set-mapnik-env

– editare questo file indicando il nome corretto del database postgresql da usare ed il nome corretto dell’utente che ha accesso al db stesso. Nell’header del file c’è una chiara e semplice spiegazione dei settaggi.

– lanciare il comando:

$ source ./z0-set-mapnik-env

– poi:

$ ./customize-mapnik-map >$MAPNIK_MAP_FILE

– creare una copia del file generate_tiles.py (chiamarla i.e. “z0_generate_tiles.py”) e modificarla adattando la bbox alla zona di interesse. Nel mio caso, dovendo operare in un’area ristretta della Provinica di Vicenza ho editato nel modo seguente (riporto un estratto della parte finale del file, l’unica modificata). Basta commentare le parti da omettere con un “#” seguito da uno spazio ” “.

—————————————————————————————————

# Change the following for different bounding boxes and zoom levels

#

# Start with an overview

# World

# bbox = (-180.0,-90.0, 180.0,90.0)

# bbox = (11.0,45.0, 12.0,46.0)

# render_tiles(bbox, mapfile, tile_dir, 0, 0, “World”)

# minZoom = 10

# maxZoom = 16

# bbox = (-2, 50.0,1.0,52.0)

# render_tiles(bbox, mapfile, tile_dir, minZoom, maxZoom)

# Montecchio Maggiore

bbox = (11.37,45.47, 11.45,45.56)

render_tiles(bbox, mapfile, tile_dir, 1, 12 , “Montecchio”)

# Muenchen

# bbox = (11.4,48.07, 11.7,48.22)

# render_tiles(bbox, mapfile, tile_dir, 1, 12 , “Muenchen”)

—————————————————————————————

– infine lanciare il comando che genera la tiles

$ ./z0_generate_tiles.py

Nella directory “tiles” vengono generate le tiles (appunto :-)).

Le immagini così generate (PNG) possono essere usate in locale in caso di mancanza di connessione alla rete o solo per caricare dati locali invece di doverli scaricare dai server OSM. A titolo di esempio riportiamo il caso di un applicativo basato su Openlayers. In questo caso basta indicare un nuovo layer (nella pagina HTML che visualizzerò i dati) con la seguente sintassi:

———————————————————————————————————————————————————————

var newLayer = new OpenLayers.Layer.OSM(“Mapnik@home”, “http://localhost/openlayer/tiles/”, {numZoomLevels: 19});

map.addLayer(newLayer);

———————————————————————————————————————————————————————

dove http://localhost/openlayer/tiles/” è il percorso locale per raggiungere le immagini PNG (questa direcotry deve essere accessibile all’utente www-data).

Sotto è riportato un esempio di render di dati OSM realizzato con mapnik; il tutto visualizzato con tramite Openlayers.

Esempio di render effettuato con Mapnik e visualizzato mediante Openlayers

Esempio di render effettuato con Mapnik e visualizzato mediante Openlayers

Openlayers | il webgis nel sito della nonna

Il titolo di questo post è ovviamente scherzoso: non voglio togliere nulla alle nonne!
Ma uno strumento come openlayers merita davvero data la sua semplicità: consente di “annegare” all’interno di pagine HTML del codice javascript per visualizzare un webgis perfettamente funzionante. Se poi questo webgis consente di utilizzare i dati di Openstreetmap abbiamo fatto Bingo! Ed è proprio così.

Sullla pagina principale del progetto sono riportate le righe di codice da copiare e incollare su una propria pagina e vederne il funzionamento: provare per credere. Certo, come tutti gli strumenti offerti dal mondo open source, le cose che si possono fare sono tantissime, più o meno complesse/complicate. Sto cercando di mettere in piedi una serie di “applicativi” o meglio “soluzioni” che sfruttano openlayers per caricare dati OSM a cui sovrapporre dati “custom”. Esempio: un amministrazione comunale può essere invogliata a liberare i suoi dati cartografici (e quindi, ovviamente, concederne l’uso per OSM) e su questa base georiferire una serie di informazioni. Penso alla localizzazione di servizi, punti di interesse, cantieri in essere e/o previsti, localizzazione di qualsiasi cosa ritenuta importante ai fini della gestione della macchina comunale.

Openlayers è una raccolta di librerie in javascript che permettono di visualizzare cartografia in una qualsiasi pagina HTML senza avere bisogno di installare alcunchè sul server. Tutto funziona via javascript. Consente di caricare dati da googlemaps, yahoo!,…..e anche OSM!

Questo è il primo di una serie di post che vorrei pubblicare. Se non altro per stare in linea con lo scopo di questo blog (una sorta di quadernone degli appunti) e costruire una documentazione per quanto possibile esaustiva sull’utilizzo di questo strumento a mio avviso eccezionale.
Ad altro post un esempio di codice per la localizzazione di elementi puntuali (in formato GML) con visualizzazione a popup (cloud) degli attributi facendo click su uno di essi.

Openstreetmap | Schio is “up”!

Schio is “up”! Su openstreetmap.org è stato caricato tutto lo stradario di Schio.

Questa la bounding box (per scaricarlo anche con JOSM):

http://www.openstreetmap.org/?lat=45.7181&lon=11.3678&zoom=13&layers=B000FTF

Mancano ancora le aree poligonali di individuazione delle contrade, delle piazze (alcune già inserite) e degli edifici.

Appuntamento il 18 marzo in Piazza Telematica a Schio (ore 20.30) per coordinarsi sull’opera di aggiornamento e miglioramento della mappa.

PS: qualche giorno fa ho chiesto al team di supporto di wordpress.com la possibilità di inserire sui nostri blog anche i pezzetti di codice HTML che consentirebbero di “annegare” una mappa di OSM (via openlayer) sui nostri articoli. Questa la tempestiva risposta di Hanni:

Hi Flavio,
I’m afraid we don’t currently support openstreetmap. I’ve added it tour list of suggestions though.
Apologies for the inconvenience,

Hanni
WordPress.com Support

Attendo fiducioso!

Primo Meeting Nazionale del Progetto OpenStreetMap Italia

Notizia girata in lista talk-it martedì 3 marzo 2009

OSM-It 2009
5 – 6 Giugno 2009

La Fondazione Bruno Kessler, Centro per l’Information Technology, Progetto FreeIT,  d’intesa con la Community Italiana della OSM-Foundation, annunciano il Primo Meeting Nazionale del Progetto OpenStreetMap Italia, che si svolgerà a Trento il 5 e 6 giugno prossimi, nella sede della Fondazione Bruno Kessler, in Via Sommarive, 18 – Trento.

L’evento rappresenta la prima occasione d’incontro per la comunità italiana che contribuisce ad  OpenStreetMap (OSM). OSM è un’iniziativa internazionale volta a creare e sostenere un processo organico di raccolta e messa a disposizione in rete di conoscenza e dati georiferiti di interesse pubblico. L’appuntamento di Trento propone una riflessione sui modelli di compartecipazione attiva della cittadinanza, nelle sue espressioni individuali e collettive, alla produzione, distribuzione e fruizione di opere di intelletto in forma digitale.
A tale scopo sono previste sessioni aperte di discussione e laboratorio.
Tutti siete invitati a contribuire sottoponendo vostri contributi eportando vostre esperienze ed idee.

Per maggiori informazioni visitate la pagina web delle’evento: osmit.fbk.eu

Fonte: lista talk-it

Mtkababel

Mtkbabel è un programma in Perl per gestire (configurare/scaricare) dispositivi GPS come l’i-blue-747 (GPS data-logger) della Transystem.

Questo tool consente di salvare dati dal GPS al PC in formato GPX e BIN, modificare i criteri di logging (tempo/distanza/velocità), avviare o bloccare il logging, cancellare la memoria del dispositivo, e altre piccole funzioni.

Posizionare il pulsante del GPS su “log” e collegarlo al PC mediante cavo USB.

Per settare il tempo di campionamento ad 1 secondo:

$ mtkbabel -r 1 s

Per scaricare i dati:

$ mtkbabel -l off -f data -t

In questo caso impostiamo lo spegnimento della funzione di log (off), e creiamo un file “data” (in realtà vengono creati due file: “data.bin” e “data_trk.gpx”) contenente le tracce (trk).

Per cancellare la memoria:

$ mtkbabel -E

Schio su OpenStreetMap

Sta per essere terminato (manca la zona Nord) l’upload dei dati relativi allo stradario del Comune di Schio. Il Comune ha liberato i dati nel mese di ottobre 2008 rendendoli disponibili a chiunque e per qualsiasi scopo. In particolare l’associazione gfoss.it si è presa l’incarico di riversare tali dati all’interno del progetto OpenStreetMap.

Siamo ormai giunti al termine di questa operazione. All’inizio dell’upload erano già presenti molti dati (e ben fatti!). Il risultato aggiornato al 13 febbraio 2009 lo vedete qui sotto:

schio_13_02_20091

Adesso, in pieno spirito wiki, è necessaria la collaborazione degli scledensi per correggere le imperfezioni, migliorare ed affinare le informazioni. Collaborate tutti!

navit

navit, sistema di navigazione (routing) libero che utilizza i dati di OSM.

Installazione su Debian Lenny:

Abilitare i repository di debian.gfoss.it aggiungendo al file “/etc/apt/source.list” la seguente stringa:

deb http://debian.gfoss.it/ lenny main

Aggiornare la lista dei repo con:

# apt-get update

Poi:

# apt-get dist-upgrade

Quindi installare il pacchetto con:

# apt-get install navit

Recuperare le mappe:

Le mappe si recuperano da qui:

http://debian.gfoss.it/maps/

Scaricare il file “italy.bin” che contiene il planet italiano. Il formato .bin è già pronto per essere letto da Navit.

Questo file va salvato in una directory (es. “/home/nome_utente/navit_map/”).

Editare il file “/usr/share/navit/navit.xml” e commentare le parti comprese fra i tag <mapset></mapset> inserendo poi le stringhe seguenti:

<mapset enabled=”yes” > <map type=”binfile” enabled=”yes” data=”/home/nome_utente/navit_map/italy.bin”/> </mapset>

lanciare navit con:

$ navit

——————————————————————-

In alternativa al file “italy.bin” scaricare il file “italy.bz2” che contiene le mappe in formato “.osm”. Queste devono essere prima convertite in “.bin” mediante il comando:

cat italy.osm | osm2navit /home/tua_home/directory_con_le_mappe/italy.bin

Il modulo “osm2navit” (compreso nel pacchetto che ha installato navit stesso) converte i dati in formato “usabile” dal navigatore.

Compilazione e installazione:

Se si vuole compilare sono necessari i seguenti pacchetti “dev”:
– libspeechd-dev;
– libgpd-dev;
– libsdl1.2-dev;
– libglut3-dev;
– libcegui-mk2-dev;
– libglc-dev;
– libdevil-dev;
– libfribidi-dev;
– libxmu-dev;
– libgtk2.0-dev

quindi lanciare i comandi standard per la compilazione:

$ ./configure (dopo essersi posizionati nella directory che contiene i sorgenti);

$ make

# make install (da root)

Sintetizzatore vocale
Ho provato ad installare “espeak” via apt-get in Debian.
Indicare il sintetizzatore vocale da usare e la lingua editando il file “/usr/share/navit/navit.xml”
inserendo la stringa seguente:

<speech type=”cmdline” data=”espeak -s 150 -v italian ‘%s’ &amp;” />