DE:Mkgmap/help/How to create a map

From OpenStreetMap Wiki
Jump to navigation Jump to search

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.

information sign

Java ist in der Regel verfügbar, und es kann bereits auf Ihrem Rechner installiert sein.

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

information sign

Ausführliche Erläuterung: 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

information sign

Ausführliche Erläuterung: dieses Mal führen wir den Java-code der 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.

information sign

Wenn Sie einen "OutOfMemoryError: java heap space" Fehler erhalten, müssen Sie den verfügbaren Speicher erhöhen, indem Sie den Parameter -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:


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

    information sign

    Ausführliche Erläuterung: sudo für Superuserrechte (admin) und startet apt um osmctools oder nsis Package vom repository zu installieren.
    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 Verzeichnis $ 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:

~.../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

information sign

Command detailed explanation: 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 splitterlog

Please 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

information sign

Command options detailed explanation: --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 file

Fourth 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)

information sign

Command detailed explanation: 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)