TMap

Da MontelLUG.

TMap

TMap nasce come strumento per creare delle mappe statiche utilizzando come sorgente i dati resi disponibili dal progetto OpenStreetMap. L'idea è nata dalla richiesta di un visitatore presente al Linux Day 2013 : come possiamo creare delle mappe personalizzate? TMap consente di visualizzare solo quello di cui si ha bisogno e ci assiste in tutte le fasi della creazione.

Requisiti

TMap per funzionare richiede la presenza di Mono (o .Net Framework) e di Osmosis. Quest'ultimo programma è scaricabile all'indirizzo http://wiki.openstreetmap.org/wiki/Osmosis . Il percorso di installazione di Osmosis deve essere inserito nella variabile di ambiente PATH.

Sulla mia LinuxMint ho aggiunto al file '/home/utente/.profile' la riga
PATH="$PATH:/opt/osmosis/bin"

TMap può essere eseguito su tutti i principali sistemi operativi: Linux, Windows, MacOS X.

Formato delle mappe

Le mappe possono essere create in un qualsiasi formato supportato dal framework. Tutti gli esempi proposti tuttavia fanno riferimento al formato png perché è uno dei pochi formati a supportare la trasparenza.

Download delle mappe

Innanzitutto bisogna scaricare le mappe del territorio che si vuole rappresentare. TMap scarica le mappe dal sito download.geofabrik.de per quelle internazionali oppure da geodati.fmach.it per i soli estratti regionali italiani.

tmap.exe --download asia
tmap.exe --download europe
tmap.exe --download europe/italy
tmap.exe --download valle-aosta
tmap.exe --download veneto

Conversione di una mappa

Le mappe sono scaricate normalmente in formato Protocol Buffer (PBF) perché i file sono più piccoli e più veloci da elaborare. Con Osmosis è possibile convertire le mappe anche in formato XML e viceversa.

osmosis --read-xml file=mappa.osm --write-pbf file=mappa.pbf
osmosis --read-pbf file=mappa.pbf --write-xml file=mappa.xml

Creare un estratto

Se si intende lavorare molto con uno specifico tipo di dati (ad esempio, i confini amministrativi), conviene creare un estratto dei dati. Il dato tra parentesi quadre indica semplicemente che il comando --tf (tag filter) può essere ripetuto più volte con parametri differenti per affinare la ricerca.

osmosis --read-pbf file=mappa.pbf --tf accept-relations boundary=administrative [ --tf accept-relations admin_level=4 ] --uw --un --write-pbf file=estratto.pbf

Estrarre un confine amministrativo

Possiamo estrarre un confine amministrativo, ad esempio quello della nostra città, con il comando --extract-poly. I significato di admin_level è ben documentato in http://wiki.openstreetmap.org/wiki/Key:admin_level

tmap.exe --extract-poly mappa.pbf boundary=administrative,admin_level=4,name=Veneto veneto.poly
tmap.exe --extract-poly mappa.pbf boundary=administrative,admin_level=6,name=Treviso treviso.poly
tmap.exe --extract-poly mappa.pbf boundary=administrative,admin_level=8,name=Montebelluna montebelluna.poly
tmap.exe --extract-poly mappa.pbf boundary=administrative,admin_level=8,name=Castelfranco\ Veneto castelfranco.poly

In alternativa è possibile utilizzare una sintassi abbreviata:

tmap.exe --extract-poly mappa.pbf regione,name=Veneto veneto.poly
tmap.exe --extract-poly mappa.pbf provincia,name=Treviso treviso.poly
tmap.exe --extract-poly mappa.pbf città,name=Montebelluna montebelluna.poly

Iniziamo a vedere i primi risultati

Per disegnare il nostro confine su una immagine usiamo il comando --draw-poly. L'esempio seguente disegna l'area del Veneto di colore rosso e con un contorno nero di spessore 5 pixel.

tmap.exe --draw-poly veneto.poly veneto.png --scale 2000 --drawStyle mixed --drawFillColor FF0000 --drawOutlineColor 000000 --drawOutlineWidth 5


Ma se volessimo vedere le singole province?
tmap.exe --draw-poly veneto.poly veneto.png --scale 2000 --drawStyle outline --drawOutlineColor 000000 --drawOutlineWidth 5
tmap.exe --draw-poly treviso.poly veneto.png --drawStyle mixed --drawFillColor FFFF00 --drawOutlineColor 000000 --drawOutlineWidth 2
tmap.exe --draw-poly belluno.poly veneto.png --drawStyle mixed --drawFillColor 00FFFF --drawOutlineColor 000000 --drawOutlineWidth 2
...

Disegnare dei punti di interesse

Per disegnare dei punti di interesse (o nodi in generale) utilizziamo il comando --draw-nodes. L'esempio seguente inserisce la posizione degli ottici presenti nel territorio:

tmap.exe --draw-nodes mappa.pbf shop=optician veneto.png --scale 2000 --ds outline --dfc FF0000 --doc 000000 --dw 10 --dow 2 --dsym circle

E se volessimo anche il nome di questi negozi? Aggiungiamo al comando precendente queste opzioni:

--draw-name --fn Arial --fs 12 --fp topMiddle

E se volessimo dare una preferenza per il nome in una variante linguistica specifica? Aggiungiamo al comando queste opzioni:

--language en

E se volessimo velocizzare il comando usando più core? Aggiungiamo al comando queste opzioni (N = numero di core da utilizzare):

--core N

Disegnare strade ed edifici

Per disegnare le strade o gli edifici utilizziamo il comando --draw-ways. L'esempio seguente inserisce le strade più importanti:

tmap.exe --draw-ways mappa.pbf highway=primary veneto.png --scale 2000 --ds fill --dfc 000000 --dw 10

Per disegnare gli edifici o un'area un generale aggiungiamo l'opzione --area :

tmap.exe --draw-ways mappa.pbf building=* montebelluna.png --scale 20000 --ds mixed --dfc FF0000 --doc 000000 --ds 1 --area

Altri elementi non presenti in mappa

E' possibile introdurre altri elementi non presenti in mappa grazie alle funzioni --free-text, --free-rect e --free-ellipse, ad esempio per costruire una legenda della mappa o per indicazioni sul copyright.

tmap.exe --free-text veneto.png x y width height text <options>
tmap.exe --free-rect veneto.png x y width height <options>
tmap.exe --free-ellipse veneto.png x y width height <options>
tmap.exe --free-rect veneto.png x y radius <options>

Nella funzione --free-text i parametri width e height servono per posizionare il testo quando l'allineamento è diverso da topLeft.

E' possibile creare una immagine di partenza anche senza partire da dati OpenStreetMap grazie alla funzione --create-image. Questa funzione è utile se dobbiamo creare una legenda della mappa o se vogliamo dello spazio aggiuntivo intorno alla nostra mappa.

tmap.exe --create-image veneto.png width height
tmap.exe --create-image veneto.png lon_min lon_max lat_min lat_max <options>

Opzioni

--scale <int> la dimensione finale dell'immagine sarà width=<larghezza_chilometri>*scale, height=<altezza_chilometri>*scale
--debug abilita la visualizzazione delle informazioni di debug
--no-xml impedisce la memorizzazione di alcune informazioni relativa alla mappa su un file xml. Questo file consente di poter aggiungere ulteriori dettagli in un secondo momento
--drawStyle <string>
(--ds)
consente di specificare la modalità di visualizzazione di un oggetto. I valori possibili sono:
  • fill (riempimento)
  • outline (solo contorno)
  • mixed (riempimento + contorno)
--drawFillColor <RRGGBB>
(--dfc)
consente di specificare il colore da utilizzare per il riempimento in formato ARGB. Il canale alpha (trasparenza) è supportato solo da alcuni formati immagine. I valori possibili sono:
  • RGB
  • RRGGBB
  • AARRGGBB
  • nome colore in inglese
--drawFillColor2 <RRGGBB>
(--dfc2)
consente di specificare il colore da utilizzare per il riempimento in formato ARGB delle inner ways (--draw-poly). Il canale alpha (trasparenza) è supportato solo da alcuni formati immagine. I valori possibili sono:
  • RGB
  • RRGGBB
  • AARRGGBB
  • nome colore in inglese
--drawOutlineColor <RRGGBB>
(--doc)
consente di specificare il colore da utilizzare per il contorno in formato ARGB. Il canale alpha (trasparenza) è supportato solo da alcuni formati immagine. I valori possibili sono:
  • RGB
  • RRGGBB
  • AARRGGBB
  • nome colore in inglese
--drawOutlineColor2 <RRGGBB>
(--doc2)
consente di specificare il colore da utilizzare per il contorno in formato ARGB delle inner ways (--draw-poly). Il canale alpha (trasparenza) è supportato solo da alcuni formati immagine. I valori possibili sono:
  • RGB
  • RRGGBB
  • AARRGGBB
  • nome colore in inglese
--drawWidth <int>
(--dw)
consente di specificare lo spessore della linea di riempimento (--draw-ways)
--drawOutlineWidth <int>
(--dow)
consente di specificare lo spessore della linea di contorno
--drawSymbol <string>
Consente di specificare come deve essere visualizzato il nodo. I valori possibili sono:
  • square
  • circle
  • marker <nome_file.png>
--pos <int o string>
indica in quale posizione deve essere messo il testo descrittivo di un nodo o il relativo marker. I valori possibili sono:
  • 1 o topLeft
  • 2 o topMiddle
  • 3 o topRight
  • 4 o centerLeft
  • 5 o centerMiddle
  • 6 o centerRight
  • 7 o bottomLeft
  • 8 o bottomMiddle
  • 9 o bottomRight
--drawName
indica che devono essere visualizzati i nomi dei nodi (tag name)
--fontName <string>
--fn
consente di specificare il tipo di carattere da utilizzare per scrivere i testi (es. Arial)
--fontSize <int>
--fs
consente di specificare la dimensione del carattere da utilizzare per scrivere i testi
--fontRotation<int>
--fr
consente di specificare l'angolo di rotazione da utilizzare per scrivere i testi
--fontColor <RRGGBB>
(--fc)
consente di specificare il colore da utilizzare per scrivere i testi. Il canale alpha (trasparenza) è supportato solo da alcuni formati immagine. I valori possibili sono:
  • RGB
  • RRGGBB
  • AARRGGBB
  • nome colore in inglese
--language <string>
consente di specificare, se presente, una preferenza linguistica per i nomi visualizzati (es, it)
--area
indica che le way sono aree (edifici, piazze, ...)
--simplify <none|way> <float>
Indica che la polilinea deve essere semplificata. Il numero con virgola (float) rappresenta la tolleranza. Per la funzione --draw-poly la tolleranza è espressa in pixel, negli altri casi è espressa in km.
--newjob
--nj
Indica un nuovo lavoro di visualizzazione. E' possibile ad esempio visualizzare due cerchi concentrici per lo stesso nodo senza dover rifare la ricerca dei dati. Tutti le opzioni che seguono --nj saranno inserite in un nuovo contesto con valori predefiniti. Questa opzione può essere ripetuta più volte.
--newJobReplica
--njr
Indica un nuovo lavoro di visualizzazione. E' possibile ad esempio visualizzare due cerchi concentrici per lo stesso nodo senza dover rifare la ricerca dei dati. Tutti le opzioni che seguono --njr saranno inserite in un nuovo contesto con valori uguali all'ultimo job utilizzato. Questa opzione può essere ripetuta più volte.

Licenza

Il programma è un software libero rilasciato in licenza GPL.

Download

Potete scaricare i sorgenti oppure l'eseguibile
Per aprire i sorgenti è possibile utilizzare SharpDevelop in ambiente Windows oppure MonoDevelop in Linux o MacOS X. Da notare che in ambiente Linux oltre a Monodevelop deve essere installato anche il pacchetto xterm

Contatti

Per qualsiasi richiesta e commento potete scrivere a stefano.fraccaro chiocciola gmail punto com