Merge branch 'master' of ssh://gitea.typename.fr:2222/INSA/be-graphes-map-generator

This commit is contained in:
Mikaël Capelle 2018-03-01 22:18:37 +01:00
commit 377641b7f2
1 changed files with 62 additions and 91 deletions

153
README.md
View File

@ -35,103 +35,74 @@ The two main folders are `inputs` and `outputs`:
- `outputs` is the default folder for generated output.
### Obtaining PBF files
You can download PBF files for multiple regions on Geofabrik: [https://download.geofabrik.de/index.html](https://download.geofabrik.de/index.html)
You should put the PBF file in subfolders, e.g. if you want to use `bretagne.pbf`, you should save it to:
```bash
inputs/bretagne/bretagne.pbf
```
Doing so will avoid having a messy `inputs` folder due to region-specific files generated by `coastline-fix.sh`.
### Generating maps
Only manual generation using `osmosis` is supported currently.
#### Step 1 - Obtaining a PBF file.
#### Mapsforge file:
You should create a PBF files containining the region you want:
- Download a complete region from Geofabrik: [http://download.geofabrik.de/](http://download.geofabrik.de/)
- Chop a region previously downloaded:
*Using a bounding box:*
```bash
# You do not need to specify a bounding-box if you did not use the coastline fix or
# do not want it. You can use type=ram to speed-up the process for small maps.
bin/osmosis --rb inputs/bretagne/bretagne_merge.pbf \
--mapfile-writer file=outputs/morbihan.mapfg bbox=47.234,-3.598,47.997,-1.648 type=hd threads=2
bin/osmosis --rb inputs/bretagne/bretagne-latest.osm.pbf \ # Specify your input PBF
--bounding-box bottom=47.160000 left=-3.855000 top=48.330000 right=-1.915000 completeWays=yes \ # Specify the bounding bo
--write-pbf inputs/bretagne/morbihan.pbf # Specify the output file
```
*Using a polygon:*
```bash
osmosis --rb inputs/bretagne/bretagne-latest.osm.pbf \ # Specify your input PBF
--bounding-polygon file=inputs/bbox/morbihan.poly completeWays=yes \ # Specify your bounding polygon
--write-pbf file=inputs/bretagne/morbihan.pbf # Specify your output file
```
The `inputs/bbox` directory contains bounding-box (`.bbox`) and bounding polygon (`.poly`) for some regions. You can find polygon for a lots of region here: [http://polygons.openstreetmap.fr/index.py](http://polygons.openstreetmap.fr/index.py) (to find the id of the relation, search it on openstreetmap, e.g. [https://www.openstreetmap.org/relation/7447](https://www.openstreetmap.org/relation/7447)).
#### Step 1 Bis - Fixing coastlines and sea.
Skip this step if your region does not contain sea or big inner lakes, or if you do not want to generate mapsforge file.
We need to add sea information to the PBF file to generate a correct mapsforge map. To do so, a script `coastline-fix.sh` is provided. Run it simply:
```bash
./coastline-fix.sh bretagne/morbihan.pbf
```
To apply the fix, you need a polygon file (`morbihan.poly` — not another name), either in the same directory as the PBF or in the `inputs/bbox` directory (recommended).
This script will generate multiple intermediate files, but only two are importants:
- `inputs/bbox/morbihan.bbox`, actual bounding-box of the PBF file — This will overwrite the old bounding-box if there was one.
- `inputs/bretagne/morbihan_merge.pbf`, merged file that you should use as input for mapsforge.
#### Step 2 - Binary graph files
```bash
# You can use either "insa2016" or "insa2018" writers, and you should change the map id to your need.
bin/osmosis --rb inputs/bretagne/morbihan.pbf \
--used-node \
--tf reject-relations \
--tf accept-ways highway=(cat inputs/highway-filter.cmd) natural=coastline \
--osm2graph file=outputs/morbihan.mapgr writer=insa2018 map-id=0x235
```
#### Step 3 - Mapsforge files
```bash
# You must specify a bounding-box if you used the coastline fix.
# You can use type=ram to speed-up the process for small maps.
bin/osmosis --rb inputs/bretagne/morbihan_merge.pbf \
--mapfile-writer file=outputs/morbihan.mapfg bbox=$(cat inputs/bbox/morbihan.bbox) type=hd threads=2
```
#### Binary graph files
#### Extra informations:
```bash
# You do not need to specify a bounding box if you do not need it. You can use either "insa2016" or
# "insa2018" writers, and you should change the map id to your need.
bin/osmosis --rb inputs/bretagne/bretagne-latest.osm.pbf \
--used-node --bounding-box top=48.1749 left=-1.7709 right=-1.5014 bottom=48.0644 completeWays=yes \
--tf reject-relations --tf accept-ways highway=(cat inputs/highway-filter.cmd) natural=coastline --lp \
--osm2graph file=outputs/rennes.mapgr writer=insa2018 map-id=0x235
```
#### Combining generations
You can combine both generation using the `--tee` option of `osmosis`:
```bash
# The order is important! You do not want to use osmosis filters/bounding-box before mapfile-writer.
bin/osmosis --rb inputs/bretagne/bretagne_merge.pbf --tee \
--mapfile-writer file=outputs/morbihan.mapfg bbox=$(cat inputs/bbox/morbihan.bbox) type=hd threads=2 \
--bounding-box $(cat inputs/bbox/morbihan.bbox | tr "," " " | xargs printf "bottom=%f left=%f top=%f right=%f") completeWays=yes
--used-node --tf reject-relations --tf accept-ways highway=(cat inputs/highway-filter.cmd) natural=coastline
--osm2graph file=ouputs/morbihan.mapgr writer=insa2018 map-id=0x400
```
**Note**: You can add logging by specifying `--lp` between `osmosis` tasks.
### Bounding box
Bounding box files should contain a single line with comma-separated (**without spaces**) values:
```bash
minLat,minLon,maxLat,maxLon
```
To use it with `osmosis`:
- for `mapfile-writer`, simply `cat` the file to set the `bbox` argument:
```bash
bbox=$(cat inputs/bbox/morbihan.bbox)
```
- for `osm2graph`, it is a bit more complicated:
```bash
--bounding-box $(cat inputs/bbox/morbihan.bbox | tr "," " " | xargs printf "bottom=%f left=%f top=%f right=%f") completeWays=yes
```
### Fixing coastline
When generating mapsforge file that contains sea, you will need to fix the PBF file prior to running osmosis.
The fix is an adaptation from [https://github.com/mapsforge/mapsforge-creator](https://github.com/mapsforge/mapsforge-creator)
— It basically does the same but does not download PBF or do the final osmosis run for you.
You will first need a PBF file and its associated polygon file, you can get these from [https://download.geofabrik.de/index.html](https://download.geofabrik.de/index.html). You need to put those file in a region folder, e.g. if you want to fix `bretagne`, you should have:
```bash
# Do not rename these files!
inputs/bretagne/bretagne-latest.osm.pbf
inputs/bretagne/bretagne.poly
```
You should also have run the `init.sh` script without the `--no-shapefile` option (you should see a folder named `land-polygons-split-4326` in the `inputs` folder).
Once you have the requested files, you can simply run (from the `inputs` folder):
```bash
# If you are not already in the inputs folder
cd inputs
# Change bretagne to whatever region...
bash coastline-fix.sh bretagne
```
- Using a polygon to crop your region is preferred if you plan on applying the coastline fix.
- I do not recommend using the merged file as input for `osm2graph` because coastlines are often very long OpenStreetMap ways, and the plugin will not cut them (typically, you could reach Spain when using the merged Morbihan file).
- I do not recommend using `osmosis` bounding-box option with `osm2graph` and/or `mapfile-writer` unless your bounding-box is small and does not contain sea or coastline. It is always preferred to generate an intermediate PBF file containing only your region (using `--write-pbf`).