DE:Mkgmap/help/How to create a map
DE:Mkgmap/help/How_to_create_a_map
Einführung
Wenn Sie OSM-Daten auf ein Garmin-GPS-Gerät laden wollen, können Sie entweder vorkompilierte Karten herunterladen, oder Sie können Sie selbst kompilieren. Diese Seite beschreibt die letztgenannte Option. Die produzierten Karten bieten Untestützung beim Routing (für Autos) und die Suche nach Adressen.
Vorbedingungen
Sie müssen folgende Software/Tools herunterladen:
Installiere Java Runtime Environment 1.8. Beide mkgmap und splitter sind abhängig davon.
Anleitung
Download OSM Daten (.osm, .osm.pbf or .osm.gz) für eine bestimmte Region. Spiegelserver mit Extrakten sind hier aufgelistet. Geofabrik ist ein guter Ausgangspunkt.
Verwenden Sie Splitter, um die RAW-Kartendaten in kleinere Stücke (tiles) aufzuteilen. Dies ist notwendig, weil die meisten der heruntergeladenen Region-Extrakte zu groß sind, um von mkgmap verarbeitet zu werden. Als Beispiel:
$ java -Xmx2000m -jar splitter.jar dach-latest.osm.pbf
java -jar splitter.jar
führt den Java-Code aus der splitter.jar
Datei (Bitte vergewissern Sie sich, dass sich diese Datei im aktuellen Ordner befindet oder von Ihrem System gefunden werden kann), und dach-latest.osm.pbf
ist die Datei, die die OSM-Daten enthält, die Sie in die Dateien kleinerer Regionen aufteilen wollen, um diese anschließend mit dem mkgmap-Programm zu verarbeiten. (andere akzeptable Dateiformate: .osm
, .o5m
)Die daraus resultierenden tiles heißen 6324xxxx.osm.pbf, wobei xxxx die fortlaufende Nummerierung 0001, 0002, 0003... ist.
Diese Kacheln können in eine Karte als-is kompiliert werden, aber die resultierende Karte würde keine Adressierung von Daten (z.b. Stadt oder Postleitzahl). Die Adressierung der Daten stammt aus vorgefertigten Grenzkacheln, und Sie können diese entweder herunterladen von mkgmap.org oder erstellen Sie Sie selbst, wie es in Mkgmap/help/options#Using_preprocessed_bounds_for_the_address_index beschrieben ist. Platzieren Sie die resultierenden Dateien in ein Unterverzeichnis mit dem Namen bounds.
Anschließend können Sie mit mkgmap die Kacheln und Begrenzungs Informationen für ein Garmin GPS verständlich kompilieren.
$ java -jar mkgmap.jar \ --route \ --add-pois-to-areas \ --bounds=bounds \ --index \ --gmapsupp \ 6324*.osm.pbf
mkgmap.jar
Datei aus, übergeben die folgenden Optionen --route
, --add-pois-to-area
,--bounds=bounds
, --index
, und --gmapsupp
auf jeder Datei im Format .osm.pbf
im aktuellen Verzeichnis, dessen Name mit 6324...
beginnt. \
wird verwendet, um den Befehl über mehrere Zeilen zu spitten, da er sonst der Shell in einer einzigen Zeile übergeben werden müsste.Dadurch entstehen mehrere Dateien, darunter die begehrte gmapsupp.img Datei. Kopieren Sie diese Datei auf die SD-Karte, die vom GPS verwendet wird. Die Details sind hier aufgelistet, aber hier ist eine schnelle Auffrischung:
- The SD card should be formatted as FAT32.
- There should be a folder called "Garmin" at the root of the SD card.
- The gmapsupp.img goes into the "Garmin" folder.
Kopieren Sie gmapsupp.img nicht in den internen Speicher des GPS! Sie könnten Ihr GPS zerstören! |
-Xmx
verwenden.
(z.B. java -Xmx2000M -jar mkgmap.jar ...
)Die Karte anpassen
Sie können mehrere Optionen und die Style-Dateien von mkgmap verwenden, um Ihre Karte auf Ihre Bedürfnisse zu anpassen. Lesen Sie hier die folgenden Details:
- mkgmap options
- mkgmap style files
- Rules of the mkgmap style files
- Used tags for routing and address search
- TYP files
- Character support (like asian characters)
Detaillierte individuelle Kartenerstellung und Integration in BaseCamp
Dies ist ein detaillierteres Tutorial für die Erstellung des französischen Straßennetzes, das für Autos zugänglich ist (um ein nüvi 250 GPS-Gerät zu aktualisieren) und die Erstellung eines Installers, um die Verwendung der Karte mit dem Garmin Basecamp Programm in Windows zu ermöglichen.
Voraussetzungen
Wir testeten die folgendes auf Ubuntu 14,04 und den Installer auf Windows 10.
Software / Tools:
- Java Runtime Environment from http://www.java.com
- mkgmap (r3676)
- splitter (r437)
- osmconvert (0.7T) (kann über das Debian/Ubuntu-Paket osmctools installiert werden, durch)
$ sudo apt-get install osmctools
makensis
(kann über das Debian/Ubuntu-Paket osmctools installiert werden, durch)$ sudo apt-get install nsis
wir arbeiten in einem Ordner "map" von wo aus wir "splitter.jar" und "mkgmap.jar" ausführen. Dies können wir duch Download von "mkgmap-r3676.zip" und "splitter-r437.zip" Dateien von http://www.mkgmap.org.uk/download/ in unser aktuelles Verzeichnis "map", entpacke die Archive dort und erstelle einen symbolischen Link zu den .jar Dateien in unserem aktuellen VerzeichnisAusführliche Erläuterung:sudo
für Superuserrechte (admin) und startetapt
umosmctools
odernsis
Package vom repository zu installieren.$ ln -s ./mkgmap-r3676/mkgmap.jar mkgmap.jar
.
OpenStreetMap Daten:
Wir holen die aktuellen OSM-Daten vom Geofabrik Server (France data) : france-latest.osm.pbf
. Das .pbf
Format welches hier benutzt wird ist ein stark komprimiertes Binärformat weit mehr komprimiert als das Original xml für uns lesbare .osm
Format. Für unser Projekt möchten wir ein Mittelding verwenden, indem wir .o5m
benutzen, welches schneller zu schreiben ist als .pbf
durch das osmconvert
Tool: osmconvert france-latest.osm.pbf france-latest.o5m
.
Vorverarbeitete OpenStreetMap-Daten:
We will ask Mkgmaps to encode post adresses of places in order to find them on our gps. Also we will ask it to define blue patches for seas. Those elements are not defined directly as openstreetmap objects, but by indicating their boundaries. In order to define which elements are inside the bondaries or not, those former have to be processed first. This process generates files useful to generate adresses and sea area. Up-to-date Sea and administrative preprocessed boundaries can be downloaded from the mkgmap web site (files Sea.zip
and bounds.zip
).
Reference places data:
The list of cities populated with more than 1500 persons is kept by the geonames project. Download cities15000.zip(leider dead Link)
in order to automatically label splitted map tiles from splitter
Walkthrough
First we will use splitter to split our large france-latest.o5m
file in smaller processable files in the same format:
Splitter does not only slice but also modify the file information content : the generated files are not OSM compliant anymore (cannot be read on JOSM...). Note that skipping this first step even when converting a small osm source file modify the final map and affects its usability |
~.../map$java -jar splitter.jar france-latest.o5m --output=o5m --output-dir=francesplittertempfile --max-areas=4096 --max-nodes=3000000 --wanted-admin-level=8 --geonames-file=cities15000.txt > francesplitter.log
java -jar splitter.jar
runs the java code from the splitter.jar
file on france-latest.o5m
. Options: --output=o5m
ask for .o5m
output files, --output-dir=francesplittertempfile
put the output files in ./francesplittertempfile
folder, --precomp-sea=sea.zip
gives splitter the sea border file, --geonames-file=cities15000.zip
ask him to use the name of the largest city in cities15000.zip
also found in the newly generated subarea file to autogenerate its description field in template.args
(latter used by mkgmap) that will identify the tile in the gps device/basecamp, --max-areas=4096
and --max-nodes=3000000
respectively gives the maximum size and number of nodes allowed in the output files. --wanted-admin-level=8
ask splitter to maintain object relation complete up to the level of a city. > francesplitterlog
redirect the shell output to the text file splitterlogPlease note that I adapted the maximum size and number of nodes allowed in the output files in order to limit the number of tiles in the final Garmin .img
map, on the other hand it augment the risk of running out of memory in the next steps... I asked to keep element linked together up to the level of the cities because it seemed that obtained better address search results this way.
This step produces a new folder ./francesplittertempfile
and a log file francesplitterlog
in our current directory. The new folder contains among others a mkgmap
option file template.arg
with name and description field of all the 6324xxxx.o5m
files of the subregions generated by the operation.
Second, we will generate our custom mkgmap style rule files that contains all the rules about how to process the osm objects/include them in the .img
files. We will start modifying the default style file that can be found in ~/map$./mkgmap-r3676/examples/styles/
and make a copy the default
folder in our map
folder to edit the rules with name road_only
.
We let the options
file as it is. New style description can be updated in the info
file. In relations
, lines
, and points
we comment all the line corresponding to elements that we do not want to show in the map (OSM object that are not covered by a rule are disregarded by default). Hence in the points file, we comment all the lines but those that correspond to car necessities, routing and addressing:
- place=...
- amenity=fuel ...
- amenity=parking ...
- highway=...
- <finalize> name=* { name '${name}' } include 'inc/address';
an include line is used for readability and refer to another file that is incorporated as it is. Thoses files such as road_only/inc/address
must be checked also...
Third, we will use mkgmap program to generate the garmin .img maps note that options order matters a lot:
~.../map$java -jar mkgmap.jar --max-jobs --gmapsupp --tdbfile --nsis --output-dir=OSMFRANCE_light --mapname=OSM_FRANCE_light --country-name="FRANCE" --family-id=6324 --family-name="OSM_light france 2016" --series-name="OSM france map" --area-name="France" --country-abbr="FRA" --style-file=./road_only --precomp-sea=sea.zip --generate-sea --route --drive-on=detect,right --process-destination --process-exits --index --bounds=bounds.zip --location-autofill=is_in,nearest --x-split-name-index --housenumbers --remove-ovm-work-files --verbose -c ./francesplittertempfile/template.args
--max-jobs
allows to process several files at once if you have many processor (time gain) --gmapsupp
generate a file gmapsupp.img
ready to copy on gps sdcard folder /garmin
, --tdbfile
an adress index code for the basecamp installer, --nsis
the nsis script to generate the windows installer, --output-dir=OSMFRANCE_light
name of the sub directory to output generated files, --mapname=OSM_FRANCE_light --country-name="FRANCE" --family-id=6324
mind that basecamp will display only one of two maps build with the same familly ID, --family-name="OSM_light france 2016"
the name that Basecamp will use to designate the map --series-name="OSM france map" --area-name="France" --country-abbr="FRA"
the abbreviation seems to be a used entry for address index generation from the preprocessed bounds file, --style-file=./road_only
the directory where we set the rules to process and include OSM data in the map, --precomp-sea=sea.zip --generate-sea
to generate blue area for sea using the downloaded preprocessed file, --route--drive-on=detect,right --process-destination --process-exits
enable routing with detection of the used road side and motorway exit directions indication, --index --bounds=bounds.zip --location-autofill=is_in,nearest --x-split-name-index --housenumbers
enable address lookup generating an index with street numbers and trying to guess unlabeled building addresses, --remove-ovm-work-files
remove temporary work files after running, -c ./francesplittertempfile/template.args
give the emplacement of the splitter generated options fileFourth we will build the windows installer for Basecamp map usage running the script osmmap.nsi
automatically generated by mkgmap to makensis
:
~.../map$ makensis ./OSMFRANCE_light/osmmap.nsi
Note that the .img files are compressed in the installer. By default, mkgmap generates a building script asking for a lzma compression that has excellent compression ration and extraction time properties but can takes a very long time to complete. You might be interested to build a bigger file in less time using the simpler zlib compression algorithm by changing the corresponding option value line in the .nsi script file befor you build the installer (using sed -i 's_SetCompressor /SOLID lzma_SetCompressor /SOLID zlib_g' ./OSMFRANCE_light/osmmap.nsi
)
sed -i
run sed for an infile modification of ./OSMFRANCE_light/osmmap.nsi
, as 's_chaine1_chaine2_g'
substitute all occurrences of chaine1 by chaine2(Once the installer is build, all 6324xxxx.img files can be deleted using for i in "./$DIR/6324*.img"; do rm $i; done
)