Appunti, scoperte e invenzioni

Tutto quello che mi viene in mente (se permettete l’esagerazione…)

  • Universal Declaration of Human Rights

    Article 19. Everyone has the right to freedom of opinion and expression; this right includes freedom to hold opinions without interference and to seek, receive and impart information and ideas through any media and regardless of frontiers.
  • My Last Twits

    • google wavin'!!! 1 month ago
    • chi è così buono da spedirmi un invito per la beta di Google Wave a mario.piccinelli@gmail.com? 1 month ago
    • perde tempo su internet.. la tesi aspetterà.. bah 1 month ago
    • Noemi Letizia premiata per il suo ruolo nel film Scaccomatto: è la preferita di un boss mafioso. Esattamente come nel film. (spinoza.it) :-) 2 months ago
    • I have sailed the world and seen his wonders, from the Dardinels to the mountains of Peru, but there's no place like.. Lovere! 3 months ago
  • Meta

  • Delicious Links

  •  

    Novembre: 2008
    L M M G V S D
    « Ott   Dic »
     12
    3456789
    10111213141516
    17181920212223
    24252627282930
  • Archivi

  • Disclaimer

    Questo blog non rappresenta una testata giornalistica [...]

    L’autore del blog dichiara di non essere responsabile per i commenti inseriti dai lettori.[...]

    Le immagini pubblicate sono quasi tutte tratte da internet e quindi valutate di pubblico dominio. [...]

    L'autore declina qualunque responsabilità per danni a cose o persone derivanti dall'applicazione di istruzioni apprese da questo blog.[...]

    Per ulteriori info legali vi consiglio di passare da qui.

Creare mappe personalizzate con i dati di OpenStreetMap

Pubblicato da piccimario su Novembre 28, 2008

Una delle cose più interessanti del progetto OpenStreetMap, a mio avviso, è il fatto che tale progetto mantiene un archivio non di semplici mappe bensì dei dati necessari a realizzarle; parliamo di descrizioni vettoriali di strade con relativi tag descrittivi, descrizioni di aree, ma anche infinite tipologie di punti di interesse (si va dai negozi fino alle strisce pedonali, passando per i parcheggi e le fontanelle d’acqua potabile).

Questa mole di dati non può entrare tutta in un’unica mappa, sarebbe inutile. Esiste però la possibilità di utilizzare questi dati per generare una mappa personalizzata, scegliendo ad esempio che tipo di POI (Point Of Interest) inserire; se voglio fare una passeggiata in bici, vorrò una mappa con le fontanelle dell’acqua potabile e i sentieri di montagna, e non avrò certo bisogno di conoscere la posizione di parcheggi o delle autostrade nella zona.

Oppure voglio solo renderizzare la mappa con gli ultimi dati disponibili, che magari ho inserito io: la mappa disponibile sul sito viene aggiornata solo una volta alla settimana, mentre i dati disponibili come vedremo in seguito sono sempre alla verione più recente.

Come posso fare a procurarmi i dati aggiornati da osm, selezionare la posizione che mi occorre, generare la mappa ed esportarla in un file grafico? Procediamo con ordine.

Recupero dei dati OSM

Il modo più semplice per recuperare i dati OSM è dalla mappa principale del progetto, su www.openstreetmap.org. Clicchiamo sulla tab “Export” in alto sulla pagina, scegliamo la zona desiderata sulla mappa e il livello di zoom richiesto. Sotto la voce “Format to Export” scegliamo “OpenStreetMap XML Data” (dimenticavo, l’opzione è disponibile solo per aree relativamente modeste (una cittadina al massimo, non una provincia) altrimenti i dati diventerebbero troppi). Volendo possiamo utilizzare l’opzione “Manually select a different area”, per selezionare un rettangolo particolare della mappa. A questo punto clicchiamo su “Export”, e rinominiamo il file scaricato in “data.osm” (vedremo poi il perchè).

osmper1

Compilazione della mappa

Il prossimo passo è sfruttare il file osm appena scaricato per creare la mappa, per ora ancora in formato vettoriale. Per questa fase avremo bisogno dell’utility “xsltproc”, disponibile di default in Linux e Mac Os (gli utenti Winzoz si arrangino :-) ). Questa utility altro non è che una sorta di compilatore per file xml: gli diamo in pasto un file xml (i dati scaricati), un file di comandi, un foglio di stile e lui in cambio creerà un file grafico vettoriale che rappresenta la mappa. Procediamo con ordine.

  • Il file di comandi è l’”OsmRenderer”, il sistema di rendering utilizzato per le mappe complete del progetto OSM. Possiamo scaricarne l’ultima versione qui dall’svn di openstreetmap, nella cartella xslt/osmarender.xsl.
  • Il file di stile è quello che, appunto, descrive cosa rappresentare sulla mappa e come rappresentarlo. Per iniziare scarichiamo il file utilizzato dal sistema di rendering di OSM per il livello di zoom 17 (quello più dettagliato). Lo possiamo trovare in stilesheets/osm-map-features-z17.xml. Non vale la pena perdere troppo tempo nel descriverne la sintassi, è tanto semplice e ben commentato che la cosa migliore è fare prove e confrontare i risultati finali, alla ricerca della soluzione migliore per le nostre esigenze. Basti sapere che è questo che dobbiamo modificare per decidere come sarà la nostra mappa personalizzata.
  • Per finire, dobbiamo procurarci i files corrispondenti ai simboli speciali che saranno inseriti sui POI sulla mappa: la troviamo sempre nell’svn, nella cartella symbols/, che dovrà essere copiata (sempre con questo nome) all’interno della cartella in cui già si trovano i files procurati in precedenza. E’ possibile saltare questo passaggio, verranno mostrati dei warning in fase di compilazione ma la mappa verrà creata comunque.

A questo punto abbiamo il tutto, non ci resta che mescolare bene gli ingredienti:

xsltproc osmarender.xsl osm-map-features-z17.xml > map.svg

A questo punto abbiamo creato un file in formato svg contenente la rappresentazione della nostra bella mappa.

Ultimi ritocchi

C’è un problema solo da sistemare: il formato SVG non è certo un formato amichevole. E’ un formato vettoriale, il che significa che può essere ridimensionato a piacere senza perdere qualità, ma non è gestito da tutti i programmi di grafica in giro. Tanto vale trasformarlo in un comodo PNG, no?

Per la semplice visualizzazione (giusto per vedere se ci piace) possiamo aprirlo con Firefox3. Safari lo apre ma ho notato che lo visualizza male (non so perchè). Idem GIMP, almeno sul mio mac.

Per esportarlo in png ci conviene usare l’utility “convert”, della suite “ImageMagick”. Se non l’abbiamo sul sistema, possiamo installarla così:

su mac: con MacPorts installato è sufficiente un “sudo port install imagemagick”, altrimenti possiamo scaricare i binari precompilati dal sito.

su Ubuntu: basta un semplice “sudo apt-get install imagemagick”

Una volta installata possiamo utilizzarla per trasformare la nostra immagine svg in un comodo png. Il comando seguente, ad esempio, ci permette di creare un png di altezza 500px e qualità medio-alta:

convert -density 300 -scale 500 map.svg map.png

Ecco gli ultimi aggiornamenti che ho apportato alla mappa del mio paesello, in questa bellissima mappa fresca fresca di rendering:

osmpermappa

Per un qualche motivo che non ho ben capito (e potrebbe benissimo essere dovuto all’accumularsi di esperimenti software dolorosi sul mio computer) il convert sul mac non mi funziona a dovere, quindi ho dovuto scavare alla ricerca di un’alternativa. L’utility migliore che sono stato capace di individuare è Squiggle. Con questo programma è possibile aprire l’svg, zoomarlo, spostarmi dove voglio e alla fine esportare comodamente l’inquadratura come file PNG.

osmpersquiggle

Unica nota: spesso durante l’apertura del file svg Squiggle dà qualche problema, legato alla non perfetta aderenza del file creato con lo standard svg; basta dargli l’OK a qualunque indicazione di errore e poi ridimensionare la finestra aperta: la mappa verrà visualizzata correttamente lo stesso.

6 Risposte a “Creare mappe personalizzate con i dati di OpenStreetMap”

  1. Stemby detto

    Bella guida!

    Che ne diresti di fartela linkare sul blog?

    http://blog.openstreetmap.it/

    (eventualmente chiedi ad Edo)

    Non sarebbe malaccio anche metterne il succo sul wiki. Hai voglia di perderci qualche minuto?

    L’unica cosa: io trovo che il migliore strumento per esportare da svg sia Inkscape: lo si può usare da gui o, più comodamente, da shell; si possono quindi fare anche pratici script e gestire tutto automaticamente.

    Ad esempio, qualcosa tipo questo:

    for i in $(ls *.svg); do inkscape -f $i -e ${i/.svg/.png}; done

    Il grosso vantaggio rispetto a ImageMagick (peraltro ottimo e molto pratico) è che si può esportare in pdf vettoriale, mentre convert genera un pdf raster. Io uso spesso LaTeX che, col compilatore pdfLaTeX, gestisce ottimamente i pdf vettoriali, con risultati qualitativi fantastici e inarrivabili in altro modo (almeno, io non ho trovato alternative).

    Immagino che Inkscape ci sia anche per MacOS, o no? (io uso solo il pinguino, non sono molto al corrente degli strumenti disponibili sugli altri sistemi operativi)

    Ciao!

  2. piccimario detto

    Ciao! Grazie per il commento, non me ne capitano spesso :-) .

    Per il link sul blog di openstreetmap.it ben volentieri, anzi direi volentierissimo; non conosco nessuno, però; potresti pensarci tu?
    Per quanto riguarda la wiki me ne posso occupare con piacere appena ho un secondo di tempo. Per il futuro ho in programma di stendere ancora un tutorial o due sul mapping, spero che possa servire a qualcuno.

    Per quanto riguarda ImageMagick l’ho scelto perchè l’avevo già installato sul mac: credo sia il migliore sistema al mondo per realizzare conversioni o editing batch di immagini (creazione thumbnail, inserimento di testi di copyright o altro, ridimensionamento e così via), specie via script (anche se sono un mac user rimango appassionato di bash ;-) ); in effetti credo proprio tu abbia ragione riguardo a InkScape: lo proverò, grazie del consiglio!

  3. EdoM detto

    Ho linkato questo post dal blog di OpenStreetMap italia.

  4. [...] http://piccimario.wordpress.com/2008/11/28/creare-mappe-personalizzate-con-i-dati-di-openstreetmap [...]

  5. [...] Commenti Recenti Creare una mappa per… su Aggiungere testo in cima o in …quartostato su Matematici al bar…Pedro su Matematici al bar…axeldamage su Matematici al bar…OpenStreetMap Italia… su Creare mappe personalizzate co… [...]

  6. simone detto

    siccome si parla di inserimento di openstreetmap in remoto, vi segnalo anche una guida che ci spiega come avere la mappa di Openstreetmap in locale senza la necessità di appoggiarsi ad internet.
    http://symrad.blogspot.com/2009/10/creare-una-mappa-in-locale-con.html

Lascia un commento

XHTML: Puoi usare questi tag: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>