Differenze tra le versioni di "TMap"
Da MontelLUG WIKI.
(10 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
= TMap = | = 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 | + | 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 == | == Requisiti == | ||
− | TMap per funzionare richiede la presenza di Osmosis. | + | 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. |
− | 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 | + | Sulla mia LinuxMint ho aggiunto al file '/home/utente/.profile' la riga<br> |
− | PATH="$PATH:/opt/osmosis/bin" | + | PATH="$PATH:/opt/osmosis/bin"<br> |
+ | <br> | ||
+ | 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 == | == Download delle mappe == | ||
Riga 45: | Riga 48: | ||
== Iniziamo a vedere i primi risultati == | == 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 | + | 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 | + | ''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?<br> | Ma se volessimo vedere le singole province?<br> | ||
− | ''tmap.exe --draw-poly veneto.poly veneto.png --scale 2000 | + | ''tmap.exe --draw-poly veneto.poly veneto.png --scale 2000 --drawStyle outline --drawOutlineColor 000000 --drawOutlineWidth 5''<br> |
− | ''tmap.exe --draw-poly treviso.poly veneto.png | + | ''tmap.exe --draw-poly treviso.poly veneto.png --drawStyle mixed --drawFillColor FFFF00 --drawOutlineColor 000000 --drawOutlineWidth 2''<br> |
− | ''tmap.exe --draw-poly belluno.poly veneto.png | + | ''tmap.exe --draw-poly belluno.poly veneto.png --drawStyle mixed --drawFillColor 00FFFF --drawOutlineColor 000000 --drawOutlineWidth 2''<br> |
''...'' | ''...'' | ||
Riga 59: | Riga 62: | ||
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: | 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 | + | ''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: | E se volessimo anche il nome di questi negozi? Aggiungiamo al comando precendente queste opzioni: | ||
Riga 76: | Riga 79: | ||
Per disegnare le strade o gli edifici utilizziamo il comando '''--draw-ways'''. L'esempio seguente inserisce le strade più importanti: | 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 | + | ''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 : | Per disegnare gli edifici o un'area un generale aggiungiamo l'opzione --area : | ||
− | ''tmap.exe --draw-ways mappa.pbf building=* montebelluna.png --scale 20000 | + | ''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 == | == Altri elementi non presenti in mappa == | ||
Riga 91: | Riga 93: | ||
''tmap.exe --free-rect veneto.png x y radius <options>''<br> | ''tmap.exe --free-rect veneto.png x y radius <options>''<br> | ||
− | Nella funzione --free-text i parametri width e height servono per posizionare il testo quando l'allineamento è diverso da topLeft. | + | Nella funzione --free-text i parametri width e height servono per posizionare il testo quando l'allineamento è diverso da topLeft.<br><br> |
+ | 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''<br> | ||
+ | ''tmap.exe --create-image veneto.png lon_min lon_max lat_min lat_max <options>''<br> | ||
== Opzioni == | == Opzioni == | ||
Riga 103: | Riga 109: | ||
|- | |- | ||
| --no-xml | | --no-xml | ||
− | |impedisce la memorizzazione di alcune informazioni relativa alla mappa su un file 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 |
|- | |- | ||
| valign="top" |--drawStyle <string><br>(--ds) | | valign="top" |--drawStyle <string><br>(--ds) | ||
Riga 116: | Riga 122: | ||
* RRGGBB | * RRGGBB | ||
* AARRGGBB | * AARRGGBB | ||
+ | * nome colore in inglese | ||
|- | |- | ||
| valign="top" |--drawFillColor2 <RRGGBB><br>(--dfc2) | | valign="top" |--drawFillColor2 <RRGGBB><br>(--dfc2) | ||
Riga 122: | Riga 129: | ||
* RRGGBB | * RRGGBB | ||
* AARRGGBB | * AARRGGBB | ||
+ | * nome colore in inglese | ||
|- | |- | ||
| valign="top" |--drawOutlineColor <RRGGBB><br>(--doc) | | valign="top" |--drawOutlineColor <RRGGBB><br>(--doc) | ||
Riga 128: | Riga 136: | ||
* RRGGBB | * RRGGBB | ||
* AARRGGBB | * AARRGGBB | ||
+ | * nome colore in inglese | ||
|- | |- | ||
| valign="top" |--drawOutlineColor2 <RRGGBB><br>(--doc2) | | valign="top" |--drawOutlineColor2 <RRGGBB><br>(--doc2) | ||
Riga 134: | Riga 143: | ||
* RRGGBB | * RRGGBB | ||
* AARRGGBB | * AARRGGBB | ||
+ | * nome colore in inglese | ||
|- | |- | ||
| valign="top" |--drawWidth <int><br>(--dw) | | valign="top" |--drawWidth <int><br>(--dw) | ||
Riga 176: | Riga 186: | ||
* RRGGBB | * RRGGBB | ||
* AARRGGBB | * AARRGGBB | ||
+ | * nome colore in inglese | ||
|- | |- | ||
| valign="top" |--language <string><br> | | valign="top" |--language <string><br> | ||
Riga 182: | Riga 193: | ||
| valign="top" |--area<br> | | valign="top" |--area<br> | ||
|indica che le way sono aree (edifici, piazze, ...) | |indica che le way sono aree (edifici, piazze, ...) | ||
+ | |- | ||
+ | | valign="top" |--simplify <none|way> <float><br> | ||
+ | |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. | ||
+ | |- | ||
+ | | valign="top" |--newjob<br>--nj<br> | ||
+ | |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. | ||
+ | |- | ||
+ | | valign="top" |--newJobReplica<br>--njr<br> | ||
+ | |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. | ||
|} | |} | ||
Riga 188: | Riga 208: | ||
== Download == | == Download == | ||
− | Potete scaricare i [http://www.stefanofraccaro.org/ | + | Potete scaricare i [http://www.stefanofraccaro.org/dl.php?f=20src sorgenti] oppure l'[http://www.stefanofraccaro.org/dl.php?f=20 eseguibile]<br> |
+ | 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 == | == Contatti == | ||
Per qualsiasi richiesta e commento potete scrivere a stefano.fraccaro chiocciola gmail punto com | Per qualsiasi richiesta e commento potete scrivere a stefano.fraccaro chiocciola gmail punto com |
Versione attuale delle 06:04, 25 feb 2014
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:
|
--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:
|
--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:
|
--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:
|
--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:
|
--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:
|
--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:
|
--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:
|
--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