doc:appunti:hardware:oms_recipes
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
doc:appunti:hardware:oms_recipes [2018/04/21 12:45] – [Stile della mappa] niccolo | doc:appunti:hardware:oms_recipes [2018/04/24 18:32] (current) – removed niccolo | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Ricette Mappe OpenStreetMap ====== | ||
- | |||
- | In questa pagina alcune ricette utili per cucinare mappe OpenStreetMap da caricare su navigatore GPS. In particolare l' | ||
- | |||
- | ===== Spazio limitato: è necessario un compromesso ===== | ||
- | |||
- | Per motivi di capienza sarà quindi necessario restringere l' | ||
- | |||
- | ===== Cosa includere ===== | ||
- | |||
- | * **Grafo stradale**. Poiché l' | ||
- | * **Waypoint**. Si è inclusa una selezione di waypoint. Dalla categoria **amenity** di OSM: distributori di benzina, punti di ristoro (ristoranti, | ||
- | * **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 " | ||
- | |||
- | ===== Confini regioni italiane da Istat ===== | ||
- | |||
- | L' | ||
- | |||
- | I pacchetti Debian da installare sono: | ||
- | |||
- | < | ||
- | apt-get install postgis gdal-bin gpsbabel | ||
- | </ | ||
- | |||
- | Dalla pagina **[[https:// | ||
- | |||
- | Queste sono le trasformazioni applicate al dataset originale: | ||
- | |||
- | - Rimozione dei **" | ||
- | - **Semplificazione**, | ||
- | - Eliminazione dei **poligoni più piccoli** di una certa area. | ||
- | - Riproiezione dal sistema **UTM zone 32N** (EPSG: | ||
- | - Conversione del file GPX in **file OSM**. | ||
- | |||
- | Per la creazione di un database geografico consultare la pagina **[[..: | ||
- | |||
- | < | ||
- | shp2pgsql -s 32632 Reg_2016_WGS84.shp reg2016 > Reg_2016_WGS84.sql | ||
- | </ | ||
- | |||
- | Il primo passaggio è la **rimozione dei " | ||
- | |||
- | < | ||
- | SELECT regione, ST_MakePolygon(ST_ExteriorRing((ST_Dump(geom)).geom)) AS geom | ||
- | INTO TABLE reg2016_no_holes FROM reg2016; | ||
- | </ | ||
- | |||
- | I passaggi successivi sono realizzati da una sola istruzione SQL, che viene eseguita dal tool **ogr2ogr**, | ||
- | |||
- | <code bash> | ||
- | #!/bin/sh | ||
- | SQL=" | ||
- | FROM reg2016_no_holes WHERE ST_Area(geom) > 11000000" | ||
- | export GPX_USE_EXTENSIONS | ||
- | ogr2ogr \ | ||
- | -f " | ||
- | PG:" | ||
- | -sql " | ||
- | -lco " | ||
- | </ | ||
- | |||
- | Nell' | ||
- | |||
- | Il passaggio finale viene fatto con il tool **gpsbabel**, | ||
- | |||
- | <code bash> | ||
- | #!/bin/sh | ||
- | gpsbabel -i gpx -f regioni.gpx \ | ||
- | -o osm, | ||
- | -F regioni_bad_id.osm | ||
- | cat regioni_bad_id.osm | ||
- | rm regioni_bad_id.osm | ||
- | </ | ||
- | |||
- | FIXME Questa ricetta ha un problema teorico: gli ID trasformati in numeri positivi potrebbero andare in conflitto con gli ID degli oggetti scaricati dal database OpenStreetMap e quindi creare problemi al programma **osmconvert**. Esiste anche la funzione **renumber** del programma **osmium** (dal pacchetto **osmium-tool**), | ||
- | ===== Confine per l' | ||
- | |||
- | {{ .: | ||
- | Utilizzeremo il linguaggio **[[https:// | ||
- | |||
- | Per disegnare i confini abbiamo utilizzato [[https:// | ||
- | |||
- | - Scaricato una porzione della mappa che includa un **piccolo tratto del confine regionale**. | ||
- | - Dopo aver selezionato tale tratto di confine, dal tab //Tags / Memberships// | ||
- | - Menu //File//, **//New Layer//**. | ||
- | - Nel nuovo layer **si disegna il poligono approssimato** che racchiuda la regione. | ||
- | - Click destro sul layer disegnato, **//Export to GPX//**. | ||
- | |||
- | Dal file GPX creato è possibile **estrarre le coordinate** con un semplice script di shell (lo abbiamo chiamato **bounds-gpx2txt**): | ||
- | |||
- | <code bash> | ||
- | #!/bin/sh | ||
- | cat " | ||
- | | grep '< | ||
- | | sed ' | ||
- | | tr ' | ||
- | | awk ' | ||
- | </ | ||
- | |||
- | Il risultato desiderato è semplicemente **la sequenza delle coordinate lat lon** di tutti i vertici separate da spazi: | ||
- | |||
- | < | ||
- | 44.381756 9.629437 44.488539 9.699057 44.569342 9.951234 ... | ||
- | </ | ||
- | |||
- | ===== Grafo stradale da OSM ===== | ||
- | |||
- | In un file che chiameremo **query_way.xml** si prepara la **query Overpass** per estrarre le //way// dalla zona desiderata: | ||
- | |||
- | <code xml> | ||
- | < | ||
- | <query type=" | ||
- | <has-kv k=" | ||
- | < | ||
- | </ | ||
- | < | ||
- | <item /> | ||
- | <recurse type=" | ||
- | </ | ||
- | <print mode=" | ||
- | </ | ||
- | </ | ||
- | |||
- | **NOTA**: all' | ||
- | |||
- | Nell' | ||
- | |||
- | Per prelevare i grafo stradale è quindi sufficiente l'uso di **wget**: | ||
- | |||
- | <code bash> | ||
- | wget --post-file=" | ||
- | </ | ||
- | |||
- | Infine usiamo **osmfilter** per ripulire il file, togliendo eventuali tag associati ai singoli nodi e mantenendo solo alcuni tag delle strade (i tag // | ||
- | |||
- | <code bash> | ||
- | osmfilter " | ||
- | --drop-node-tags=" | ||
- | --drop-author --fake-version --out-osm -o=" | ||
- | </ | ||
- | |||
- | Per ottenere il grafo delle **strade off-road** si utilizza una ricetta del tutto analoga, salvo che le **highway** da estrarre sono solo quelle di tipo **track** e **path**, mentre i tag tag preservare sono **highway**, | ||
- | ===== Waypoint da OSM ===== | ||
- | |||
- | ===== Centri abitati da OSM ===== | ||
- | |||
- | ===== Stile della mappa ===== | ||
- | |||
- | ^ %%--region-name%% | Viene mostrato accanto al nome del centro abitato nella visualizzazione dell' | ||
doc/appunti/hardware/oms_recipes.1524307525.txt.gz · Last modified: by niccolo