User Tools

Site Tools


tecnica:gps_cartografia_gis:osm_recipes

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
tecnica:gps_cartografia_gis:osm_recipes [2018/05/05 23:09] – [Waypoint da OSM] niccolotecnica:gps_cartografia_gis:osm_recipes [2020/07/31 09:53] – [Riferimenti Web] niccolo
Line 9: Line 9:
 Per motivi di capienza sarà quindi necessario restringere l'estensione della mappa ad **una sola regione** (in questo esempio la Toscana), inoltre si dovrà optare per una **mappa di tipo on-road** (ad esempio per uso cicloturistico) oppure una **off-road** (per uso trekking o MTB). Nel primo caso si includerà solo la rete stradale ordinaria (da **//motorway//** a **//unclassified//** nella classificazione OSM), nel secondo caso quella off-road (**//footway//**, **//track//** e **//path//** nella classificazione OSM). Per motivi di capienza sarà quindi necessario restringere l'estensione della mappa ad **una sola regione** (in questo esempio la Toscana), inoltre si dovrà optare per una **mappa di tipo on-road** (ad esempio per uso cicloturistico) oppure una **off-road** (per uso trekking o MTB). Nel primo caso si includerà solo la rete stradale ordinaria (da **//motorway//** a **//unclassified//** nella classificazione OSM), nel secondo caso quella off-road (**//footway//**, **//track//** e **//path//** nella classificazione OSM).
  
 +**ATTENZIONE**: Dopo un po' di prove sul campo ho realizzato che per fare trekking è necessario avere **contemporaneamente** sia le **strade asfaltate** che i **sentieri**. A queste condizioni **una regione intera** come la Toscana **non ci sta**. Il mio suggerimento è quindi di estrarre i dati solo di **alcuni comuni** limitrofi.
 ===== Cosa includere ===== ===== Cosa includere =====
  
Line 15: Line 16:
   * **Centri abitati**. Avere i centri abitati come waypoint è utile per effettuare ricerche e spostarsi velocemente sulla mappa del GPS.   * **Centri abitati**. Avere i centri abitati come waypoint è utile per effettuare ricerche e spostarsi velocemente sulla mappa del GPS.
   * **Confini amministrativi**. Si sono inclusi i confini delle regioni italiane soprattutto per fini "estetici", poiché sono utili ad interpretare la mappa a livelli di zoom inferiori. I confini NON vengono utilizzati per l'indicizzazione degli indirizzi da utilizzare durante la ricerca degli stessi. L'aggiunta dei confini regionali ha ingrossato la mappa finale di circa **170 kb**.   * **Confini amministrativi**. Si sono inclusi i confini delle regioni italiane soprattutto per fini "estetici", poiché sono utili ad interpretare la mappa a livelli di zoom inferiori. I confini NON vengono utilizzati per l'indicizzazione degli indirizzi da utilizzare durante la ricerca degli stessi. L'aggiunta dei confini regionali ha ingrossato la mappa finale di circa **170 kb**.
 +
 +===== Galleria =====
 +
 +{{.:etrex_osm:img_01.jpg?160|}}
 +{{.:etrex_osm:img_02.jpg?160|}}
 +{{.:etrex_osm:img_03.jpg?160|}}
 +
 +{{.:etrex_osm:img_04.jpg?160|}}
 +{{.:etrex_osm:img_05.jpg?160|}}
 +{{.:etrex_osm:img_06.jpg?160|}}
  
 ===== Confini regioni italiane da Istat ===== ===== Confini regioni italiane da Istat =====
Line 197: Line 208:
 Per trasformare ogni //way// del file **op_amenity_w.osm** in un //node// si usa lo script **{{.:osm:way2node.txt|way2node}}**. Il risultato è il file **f_amenity_w.osm**. Per trasformare ogni //way// del file **op_amenity_w.osm** in un //node// si usa lo script **{{.:osm:way2node.txt|way2node}}**. Il risultato è il file **f_amenity_w.osm**.
  
 +Come si sono estratti gli opportuni oggetti **amenity**, si estraggono anche gli oggetti **tourism**. In particolare si sono estratti: //hotel//, //motel//, //guest_house//, //chalet//, //hostel//, //alpine_hut//, //wilderness_hut//, //caravan_site// e //camp_site//.
 ===== Centri abitati da OSM ===== ===== Centri abitati da OSM =====
  
 +L'estrazione dei centri abitati è del tutto simile a quella degli altri waypoint. La query Overpass deve selezionare i node con tag **place** e valore //city//, //town// oppure //village//. Anche in questo caso si aggiunge il tag nome nel caso che sia assente ed infine si rimuovono tutti i tag ad eccezione di **name**, **place** e **population**:
 +
 +<code bash>
 +osmfilter "tmp/op_place_n_fix.osm" \
 +    --keep-node-tags="all name= place= population=" \
 +    --drop-author --fake-version --out-osm -o="tmp/f_place_n.osm"
 +</code>
 ===== Assemblare tutti i pezzi ===== ===== Assemblare tutti i pezzi =====
  
Line 207: Line 226:
     "admin_boundaries.osm" \     "admin_boundaries.osm" \
     "tmp/f_track.osm" \     "tmp/f_track.osm" \
 +    "tmp/f_way.osm" \
     "tmp/f_place_n.osm" \     "tmp/f_place_n.osm" \
     "tmp/f_amenity_n.osm" "tmp/f_amenity_w.osm" \     "tmp/f_amenity_n.osm" "tmp/f_amenity_w.osm" \
     "tmp/f_tourism_n.osm" "tmp/f_tourism_w.osm" \     "tmp/f_tourism_n.osm" "tmp/f_tourism_w.osm" \
-    -o="etrex_map.osm"+    -o="gmapsupp.osm"
 </code> </code>
  
-Il risultato è un file sempre nel **formato XML di OpenStreetMap**. +Il risultato è un file **gmapsupp.osm** ancora nel **formato XML di OpenStreetMap**. 
-===== mkgmap-splitter mkgmap =====+===== mkgmap-splitter ===== 
 + 
 +Il file risultante **gmapsupp.osm** deve essere suddiviso in quadranti più piccoli (tile, mattonelle) per adeguarsi al formato Garmin, si utilizza il programma **mkgmap-splitter** installato dal pacchetto Debian omonimo. 
 + 
 +<code> 
 +mkgmap-splitter gmapsupp.osm 
 +</code> 
 + 
 +Il risultato è una serie di file la cui simensione è di circa **10 Mb** ciascuno: 
 + 
 +  * **63240001.osm.pbf** 
 +  * **63240002.osm.pbf** 
 +  * ... 
 + 
 + 
 +===== Personalizzare lo stile della mappa =====
  
-^ %%--region-name%% | Viene mostrato accanto al nome del centro abitato nella visualizzazione dell'elenco (altrimenti compare la stringa **ABC**). FIXME Forse esiste la possibilità di usare i confini amministrativi e l'indicizzazione degli indirizzi per associare il centro abitato al nome del comune che lo contiene?  |+Prima dell'esecuzione finale del programma **mkgmap** è opportuno definire lo stile della mappa; a causa delle limitate capacità grafiche del Garmin eTrex 10 lo stile predefinito non è ottimale. Tre sono i concetti propedeutici da comprendere:
  
-===== Stile della mappa =====+  * I **levels** sono versioni della stessa mappa a diversi livelli di dettaglio. Quando si varia lo zoom di visualizzazione, il device attiverà automaticamente il //level// più opportuno. 
 +  * Gli **styles** associano ogni elemento OSM ad un particolare simbolismo (rendering grafico) Garmin, indicando a quale //level// si applica. 
 +  * Il **linguaggio TYP** può essere usato per modificare i simbolismi predefiniti Garmin, ad esempio per modificare come viene visualizzato un certo tipo di track o path.
  
 Fondamentale lettura è il **[[https://www.mkgmap.org.uk/doc/pdf/style-manual.pdf|Conversion Style manual]]** di **mkgmap** (qui una {{.:osm:mkgmap-style-manual.pdf|copia locale}}). Si deve anzitutto familiarizzare con alcuni concetti: Fondamentale lettura è il **[[https://www.mkgmap.org.uk/doc/pdf/style-manual.pdf|Conversion Style manual]]** di **mkgmap** (qui una {{.:osm:mkgmap-style-manual.pdf|copia locale}}). Si deve anzitutto familiarizzare con alcuni concetti:
Line 308: Line 345:
 ==== Personalizzazione del simbolismo (file TYP) ==== ==== Personalizzazione del simbolismo (file TYP) ====
  
-Ogni GPS Garmin ha un **simbolismo predefinito** che definisce l'aspetto grafico per ogni oggetto mappa. Ad esempio una **highway=track** della mappa OSM viene convertita in un oggetto Garmin **line Type=0x00a**, che viene mostrata sul display dell'eTrex 10 con un certo spessore e colore.+Ogni GPS Garmin ha un **simbolismo predefinito** che definisce l'aspetto grafico per ogni oggetto mappa. Ad esempio una **highway=track** della mappa OSM viene convertita da **mkgmap** in un oggetto Garmin **line Type=0x00a**, che viene mostrata sul display dell'eTrex 10 con un certo spessore e colore. Il simbolismo è **codificato all'interno del firmware** del GPS, nell'eTrex provvede anche ad adattare la rappresentazione grafica rispetto alla scala; ad esempio una strada di tipo //secondary// verrà rappresentata con una linea più spessa quando si aumenta lo zoom.
  
-Nella mappa compilata con mkgmap è possibile definire delle **personalizzazioni** rispetto al simbolismo predefinito. Abbiamo sfruttato questa possibilità per **modificare l'aspetto** delle **linee** **Type=0x00a** e **Type=0x016** (track e path rispettivamente) in modo che fossero **più sottili** e non confondessero il display alla scala dei 2 km.+Nella mappa compilata con mkgmap è possibile tuttavia definire delle **personalizzazioni** rispetto al simbolismo predefinito. Abbiamo sfruttato questa possibilità per **modificare l'aspetto** delle **linee** **Type=0x00a** e **Type=0x016** (track e path rispettivamente) in modo che fossero **più sottili** e non confondessero il display alla scala dei 2 km.
  
 Per ottenere il risultato è sufficiente creare un file **my_etrex10.txt** con questo contenuto: Per ottenere il risultato è sufficiente creare un file **my_etrex10.txt** con questo contenuto:
Line 325: Line 362:
 UseOrientation=Y UseOrientation=Y
 Xpm="32 1 2  1" Xpm="32 1 2  1"
-"c #000000"+"c #000000"
  c none"  c none"
-"!!!!!!  !!!!!!  !!!!!!  !!!!!!  "+"------  ------  ------  ------  "
 ;12345678901234567890123456789012 ;12345678901234567890123456789012
 String1=0x04,Track String1=0x04,Track
Line 338: Line 375:
 UseOrientation=Y UseOrientation=Y
 Xpm="32 1 2  1" Xpm="32 1 2  1"
-"c #808080"+"c #808080"
  c none"  c none"
-"!!!!  !!!!  !!!!  !!!!  !!!!  !!"+"----  -----  ----  -----  ----  "
 ;12345678901234567890123456789012 ;12345678901234567890123456789012
 String1=0x04,Path String1=0x04,Path
 ExtendedLabels=N ExtendedLabels=N
 [end] [end]
 +</file>
 +
 +**ATTENZIONE**: Il file qui sopra produce un simbolismo che verrà **applicato per ogni level**. Cioè le linee **Type=0x00a** e **Type=0x016** saranno rappresentate sempre allo stesso modo ad ogni livello di zoom. Questo è molto differente dagli stili applicati internamente dall'eTrex, dove ad esempio il **Type=0x04** applicato alle **highway=secondary** produce linee via via più spesse quando si aumenta lo zoom. In alternativa si dovrebbero definire diverse righe nel file ''style/default/lines'' (vedi sopra), ciascuna associata ad una resolution diversa e con un codice Type diverso, qualcosa del tipo:
 +
 +<file>
 +highway=track [0x0a road_class=0 road_speed=1 resolution 24 continue]
 +highway=track [0x0a01 road_class=0 road_speed=1 resolution 23-20 continue]
 +highway=track [0x0a02 road_class=0 road_speed=1 resolution 19]
 </file> </file>
  
Line 351: Line 396:
 **NOTA BENE**: Con **mkgmap versione svn3741** non è più necessario compilare il file TYP, è possibile utilizzare direttamente il testo sorgente. **NOTA BENE**: Con **mkgmap versione svn3741** non è più necessario compilare il file TYP, è possibile utilizzare direttamente il testo sorgente.
  
-Per ulteriori dettagli vedere:+===== No Results foundbug POI non elencati per categoria =====
  
-  * **[[http://www.mkgmap.org.uk/doc/typ-compiler|The mkgmap TYP file compiler]]** +Sembra che ci sia un bug nel firmware dell'eTrex 10in alcune circostanze gli **waypoint inclusi nella mappa non vengono elencati nelle opportune categorie**. Ad esempio uno waypoint a cui sia assegnato il **tipo 0x2c0d** viene visualizzato sulla mappa con l'icona **Place of worship** e dovrebbe comparire nel menu **Where to?** => **Community**.
-  * **[[http://www.cferrero.net/maps/guide_to_TYPs.html|Guide to TYP files]]** +
-  * **[[http://gps.maroufi.net/etrex10map.shtml|Karten auf dem eTrex 10]]** +
-  * **[[https://sites.google.com/site/sherco40/]]** Il programma **TYPViewer** (per Windows, ma che gira anche sotto Wine) consente di ispezionare i file TYP compilati, traducendoli in testo sorgente e mostrando graficamente il simbolismo.+
  
-==== Compilazione della mappa con stile e simbolismo personalizzato ====+Dovrebbe essere sufficiente che la **mappa OSM** contenga un nodo di questo tipo: 
 + 
 +<file> 
 +<node id="170860041" lat="43.91410710" lon="11.22389060" version="1"> 
 +  <tag k="amenity" v="place_of_worship"/> 
 +  <tag k="name" v="Pieve di San Severo"/> 
 +</node> 
 +</file> 
 + 
 +e lo stile **styles/default/points** contenga una riga del tipo: 
 + 
 +<file> 
 +amenity=place_of_worship [0x2c0d resolution 24] 
 +</file> 
 + 
 +Si è verificato invece che in alcune condizioni ciò non accade, la categoria **Community** riporta **No Results found - Try Adjusting Search Parameters**. Dalle prove fatte è necessario rispettare le seguenti condizioni per **evitare il bug**: 
 + 
 +  - Il file mappa OSM deve **contenere dei nodi** - eventualmente fasulli - che verranno assegnati agli stili da 0x2c0a a 0x2c0c. Tali nodi devono essere in prossimità degli altri, cioè più o meno nel range della mappa; posizionandoli in prossimità delle coordinate lat=0 lon=0 non funziona. 
 +  - Il file dello stile deve definire degli stili per i nodi di cui sopra, **assegando le icone da 0x2c0a a 0x2c0c**. 
 + 
 +In pratica sembra che l'eTrex abbia bisogno che nella mappa esista **la serie completa di sottotipi** (in questo caso a partire da 0x2c0a fino a quello che interessa a noi, cioè il 0x2c0d), altrimenti la categoria non viene creata. Non è chiaro come mai la serie completa in questo caso può iniziare da 0x2c0a, quando intuitivamente si potrebbe pensare che la serie inizia con 0x2c00. 
 + 
 + 
 +===== mkgmap ===== 
 + 
 +L'ultimo passaggio è quindi la compilazione della mappa con stile e simbolismo personalizzato.
  
 Durante l'invocazione di **mkgmap** è sufficiente passare il riferimento alla **directory con lo stile modificato** e al file con le **modifiche al simbolismo** per ottenere la mappa desiderata (il file TYP viene compilato al volo): Durante l'invocazione di **mkgmap** è sufficiente passare il riferimento alla **directory con lo stile modificato** e al file con le **modifiche al simbolismo** per ottenere la mappa desiderata (il file TYP viene compilato al volo):
Line 373: Line 440:
     ./typ/my_etrex10.txt     ./typ/my_etrex10.txt
 </code> </code>
 +
 +L'opzione **%%--region-name%%** viene usata come stringa da visualizzare accanto al nome del centro abitato nella visualizzazione dell'elenco, altrimenti compare la stringa generica **ABC**. FIXME Forse esiste la possibilità di usare i confini amministrativi e l'indicizzazione degli indirizzi per associare il centro abitato al nome del comune che lo contiene?
 +
 +===== Riferimenti Web =====
 +
 +  * **[[http://www.mkgmap.org.uk/doc/typ-compiler|The mkgmap TYP file compiler]]**
 +  * **[[https://www.mkgmap.org.uk/doc/pdf/style-manual.pdf|mkgmap Conversion Style manual]]** - Qui una {{.:etrex_osm:mkgmap-style-manual.pdf|copia locale}}.
 +  * **[[https://wiki.openstreetmap.org/wiki/Mkgmap/help/style_rules|Mkgmap style rules]]** - Dichiarata //outdated//, ma utile.
 +  * **[[http://www.cferrero.net/maps/guide_to_TYPs.html|Guide to TYP files]]**
 +  * **[[http://gps.maroufi.net/etrex10map.shtml|Karten auf dem eTrex 10]]**
 +  * **[[https://sites.google.com/site/sherco40/]]** Il programma **TYPViewer** (per Windows, ma che gira anche sotto Wine) consente di ispezionare i file TYP compilati, traducendoli in testo sorgente e mostrando graficamente il simbolismo.
 +  * **[[https://extract.bbbike.org/|Extract OpenStreetMap]]** - Produce automaticamente mappe anche per Garmin.
tecnica/gps_cartografia_gis/osm_recipes.txt · Last modified: 2020/07/31 09:54 by niccolo