DE:All in one Garmin Map/Map generation

From OpenStreetMap Wiki
Jump to: navigation, search

Styles

Die aktuellen Styles der All in One Karte werden mit einem git repository verwaltet. Ihr könnt das Ding einfach klonen mit:

git clone git://github.com/aiomaster/aiostyles.git

Wer gerne aktiv mitarbeiten möchte und neue features, stylerules, icons hinzufügen möchte oder irgendwas anderes verbessern, der kann das gerne machen und mir zuschicken. Bei Interesse kann ich auch Schreibzugriff auf das offizielle Repository geben. Brauche dafür nur nen öffentlichen ssh schlüssel von euch. Würde mich freuen ein paar Mitstreiter zu finden, damit ich die Stylefiles nicht mehr alleine bearbeiten muss und neue features eingebaut werden können - auch, wenn ich gerade keine Zeit dafür hab.

Ihr findet übrigens neben den Styles auch mein Makefile, welches ich zur Erzeugung der ganzen Karten auf dem Server verwende.

Wenn ihr die letzten Änderungen der All in One Map sehen wollt, könnt ihr auch mal hier schaun:

http://github.com/aiomaster/aiostyles/commits/master.atom

Vorgehensweise

An dieser Stelle soll die Vorgehensweise, um sich eine routingfähige gut aussehende Garminkarte von einem Gebiet seiner Wahl zu erstellen dokumentiert werden. Als Beispiel soll hier komplett Deutschland dienen. Diese Vorgehensweise ist nicht immer ganz aktuell. Sie wird aber nach bestem Wissen und Gewissen ständig aktualisiert.

  • Zunächst lädt man sich OSM-Daten seiner Lieblingsregion herunter. Die Daten der Geofabrik eignen sich dazu bestens:
wget http://download.geofabrik.de/openstreetmap/europe/germany-latest.osm.pbf
  • Für den FIXME-Layer möchten wir gerne die aktuellen Openstreetbugs mit integrieren. Gary68 erstellt freundlicherweise Auszüge davon als GPX-Daten:
wget http://www.gary68.de/osm/qa/gpx/allbugs.gpx (enthält auch alle meine "Fehler", sonst bei schokokeks.org laden)

Wir bauen die GPX-Datei gleich mal mit gpsbabel in eine osm-Datei um, damit wir sie in mkgmap stecken können:

gpsbabel -i gpx -o osm allbugs.gpx bugs_germany.osm

Ich benutze an dieser Stelle noch ein bisschen sed-Gehacke, um das auf die richtige Form zu bringen:

sed 's/closed>/name>/g;s/<extensions>//g;s/<\/extensions>//g' allbugs.gpx \
  | gpsbabel -i gpx -o osm -f - -F bugs_germany.osm
  • Damit wir unser Werk vervollständigen können, brauchen wir natürlich noch eine aktuelle Version von mkgmap. Wir könnten uns eine aus dem svn ziehen und kompilieren:
svn co http://svn.parabola.me.uk/mkgmap/trunk
cd trunk/
ant
chmod 777 dist/mkgmap.jar

oder einfach die latest nehmen:

wget http://www.mkgmap.org.uk/snapshots/mkgmap-latest.tar.gz
  • Da Deutschland nicht mehr in eine einzige Kachel passt, müssen wir den Datensatz vorher komplett zerschnippeln. Wir benutzen dazu den tilesplitter. Am besten machen wir uns noch ein eigenes Verzeichnes, in das wir dann die ganzen Kacheln werfen:

Wir holen also den aktuellen Splitter.

wget http://www.mkgmap.org.uk/download/splitter-latest.tar.gz

entpacken ihn:

tar xvf splitter-latest.tar.gz 

und machen ein neues directory:

mkdir tiles

Dahin kopieren wir das splitter.jar, das sich etwas tiefer im gerade ausgepackten Baum verbirgt. Dann:

cd tiles/

java -Xmx5000M -jar splitter.jar --mapid=63240345 --max-nodes=1000000 ../germany.osm.pbf

Es ist wichtig, dass wir nicht zu viele max-nodes einstellen. Da mein stylefile sehr viele Punkte aus OSM auswertet und darstellt, müssen wir hier weit unter 1500000 Punkte einstellen. Mittlerweile schafft der neue Tilesplitter http://svn.mkgmap.org.uk/splitter/trunk ganz Europa mit relativ wenig Speicherbedarf vernünftig zu splitten. Man sollte bei den --max-nodes=1000000 einstellen, wenn man vorhat meine Styles zu benutzen. Anderenfalls gibt es hinterher zu viele Nodes in manchen Kacheln.

  • Dann ist es an der Zeit mkgmap anzuschmeißen. Da wir mehrere Layer haben möchten machen wir das eben mehrere Male. Die Hintergrundidee dabei ist folgende: Wir erzeugen uns für jeden Layer mit mkgmap eine eigene gmapsupp.img in die ein Typfile integriert ist. Wir müssen auch auf die korrekten zugehörigen Product-ids, family-ids und family-names achten! Die so entstandenen gmapsupp.img dateien verbinden wir anschließend mit dem gmaptool zu einer einzigen. Wir können für diesen Schritt leider nicht mkgmap benutzen, da sonst die Ids der Kartenteile nicht mehr stimmen!

Im Detail sieht das dann so aus:

Wir legen 5 verzeichnisse an mit namen: gbasemap, gaddr, gfixme, gosb, gboundary oder so ähnlich. Dann gehts los:

cd gbasemap
java -Xmx4000M -jar mkgmap.jar --max-jobs --style-file=../../aiostyles/basemap_style/ \
  --description='Openstreetmap' --country-name=europe --country-abbr=EU --family-id=4 \
  --product-id=45 --series-name='OSM-AllInOne-EU-bmap' --family-name=OSM --area-name=EU \
  --latin1 --mapname=63240345 --draw-priority=10 --add-pois-to-areas --make-all-cycleways \
  --link-pois-to-ways --remove-short-arcs --net --route --gmapsupp ../tiles/*.osm.pbf \
  ../../aiostyles/basemap.TYP
cd ../gaddr
java -Xmx4000M -jar mkgmap.jar --max-jobs --style-file=../../aiostyles/addr_style/ \
  --description='Adressen' --country-name=europe --country-abbr=EU --family-id=5 \
  --product-id=40 --series-name='OSM-AllInOne-EU-Addr' --family-name=ADRESSEN \
  --area-name=EU --latin1 --mapname=63241345 --draw-priority=20 --no-poi-address \
  --no-sorted-roads --add-pois-to-areas --transparent --gmapsupp ../tiles/*.osm.pbf \
  ../../aiostyles/addr.TYP
cd ../gfixme
java -Xmx4000M -jar mkgmap.jar --max-jobs --style-file=../../aiostyles/fixme_style/ \
   --description='Fixme_Layer' --country-name=europe --country-abbr=EU --family-id=3 \
   --product-id=33 --series-name='OSM-AllInOne-EU-Fixme' --family-name=FIXME \
   --area-name=EU --latin1 --mapname=63242345 --draw-priority=22 --no-poi-address \
   --no-sorted-roads --transparent --gmapsupp ../tiles/*.osm.pbf ../../aiostyles/fixme.TYP
cd ../gboundary
java -Xmx4000M -jar mkgmap.jar --max-jobs --style-file=../../aiostyles/boundary_style/ \
   --description='Boundary_Layer' --country-name=europe --country-abbr=DE --family-id=6 \
   --product-id=30 --series-name='OSM-AllInOne-EU-boundary' --family-name=boundary \
   --area-name=EU --latin1  --mapname=63240625 --draw-priority=21 --no-poi-address \
   --no-sorted-roads --transparent --gmapsupp ../tiles/*.osm.pbf \
   ../../aiostyles/boundary.TYP
cd ../gosb
java -Xmx4000M -jar mkgmap.jar --max-jobs --style-file=../../aiostyles/osb_style/ \
   --description='Openstreetbugs' --country-name=europe --country-abbr=EU --family-id=3 \
   --product-id=33 --series-name='OSM-AllInOne-EU-OSB' --family-name=OSB --area-name=EU \
   --latin1 --mapname=63243345 --draw-priority=23 --no-poi-address --no-sorted-roads \
   --transparent --gmapsupp bugs_germany.osm ../../aiostyles/osb.TYP


  • Jetzt kommt die Sache mit dem Zusammenkleben der gmapsupps mit gmaptool (leider ist gmaptool ein proprietäres Programm, aber es gibt binaries für Windows, Linux und Mac):
gmt -jo gmapsupp.img gbasemap/gmapsupp.img gaddr/gmapsupp.img gfixme/gmapsupp.img gosb/gmapsupp.img gboundary/gmapsupp.img
  • Die fertige gmapsupp.img schieben wir auf unser Gerät im Massenspeichermodus.

Siehe auch: OSM_Map_On_Garmin und OSM_Map_On_MapSource

Wichtige Anmerkungen

Mein aktueller Kenntnisstand (erworben durch ausprobieren) bezüglich Beschränkungen von Garmin und den genutzten Optionen von mkgmap etc. soll hier auch noch kurz dokumentiert werden.

  • mkgmap kann die Typfiles in die gmapsupp integrieren. Dabei ist es äußerst wichtig folgende Dinge zu beachten!!!
    • Die Endung muss .TYP heißen. Die Großschreibung ist wichtig!
    • (Info, Stand 2011-02-12 - folgendes scheint behoben zu sein, relative Dateipfade funktionieren jetzt wohl; (alte Info: relative Pfade funktionieren auch nicht z.B. ../typfile.TYP Es muss tatsächlich immer der volle Systempfad angegeben werden, es sei denn das Typfile liegt im selber Verzeichnis, von dem aus der Aufruf stattfindet. Dann reicht typfile.TYP mit anzugeben!)
    • Die IDs im Typfile müssen mit denen der Karten übereinstimmen. Die option family-id darf nicht weggelassen werden und muss die ID angeben, die im Typfile eingestellt wurde und zu der die Kacheln passen sollen!
  • Das Garmin unterstützt tatsächlich mehrere Typfiles in einer einzigen gmapsupp. Die family und product id in dem Typfile müssen mit den zugehörigen IDs der Kacheln, auf die sich das Typfile beziehen soll übereinstimmen! mkgmap verpeilt da gelegentlich was mit seiner gmapsupp option. Ich empfehle also das gmaptool, um die IDs korrekt zu erhalten, wenn man mehrere gmapsupps zusammenfügt und die Karte voll funktionstüchtig zu machen.
  • Da die Anzahl der zur Verfügung stehenden Linien und Polygon typen wirklich äußerst klein ist, wäre es sicherlich wünschenswert, wenn man die sogenannten extended types von Garmin nutzen könnte. Das sind Typen, die nur dargestellt werden, wenn ein Typfile Regeln dafür integriert hat. Die normalen Garmintypen hingegen können auch ohne Typfile dargestellt werden, allerdings in sehr unbefriedigender Form. Jedenfalls ist es leider momentan noch nicht möglich diese extended types mit mkgmap zu nutzen, da nicht bekannt ist, wie sie im Detail funktionieren, also muss man erstmal mit den Standardtypen Vorlieb nehmen! Zum Glück sind genügend Typen für Punktthemen vorgesehen, so dass zumindest alle Punkte aus OSM dargestellt werden können.
  • Die Reihenfolge der Layer kann mit mkgmap über die --draw-priority festgelegt werden. Wird diese nicht explizit gesetzt, so gilt offenbar die Regel: je größer die Zahl im Mapname, desto weiter unten wird der Layer gezeichnet. 63240042 würde also unter 63240023 liegen.
  • Die --route Option macht die Karte routingfähig (wird größer und rechnet länger) und die --net option kann theoretisch lock to road unterstützen.
  • Die --add-pois-to-areas option sorgt dafür, dass Polygonflächen in POIs konvertiert werden, welche dann im FIND-menü auffindbar sind.
  • Nicht alle Linientypen sind routingfähig! Von den Standardlinientypen sind nur die folgenden routingfähig:
Routable types: 0x01 - 0x13, 0x16, 0x1a, 0x1b
Das bedeutet das reicht gar nicht aus, um alle Wegtypen in OSM unterscheiden und auf ihnen routen zu können! Ursprünglich wollte ich zum Beispiel die sac_scales mit einbeziehen, aber die Wege wären dann nicht mehr routingfähig. Lässt sich nix machen...
  • Im letzten Schritt wurde zusätzlich eine Höhenkarte integriert. Diese kann man sich mit srtm2osm selber erstellen: [1]. Das braucht man zum Glück nur einmal zu tun und kann sie dann immer wieder einfach nur einbinden. srtm2osm erzeugt letztenendes eine osm-datei (srtm.osm) mit den Höhenlinien, die dann mit mkgmap weiterverarbeitet werden kann. Im masterstyle existieren auch Regeln, die auf Höhenlinien zutreffen, also würde die Erstellung mit mkgmap so aussehen:
java -Xmx512M -jar /tmp/trunk/dist/mkgmap.jar --style-file=masterstyle --description='Hoehenlinien'
--latin1 --mapname=63240023 --draw-priority=100 --transparent SRTM/sachsen/srtm.osm
  • Anstelle von srtm2osm kann auch phyghtmap eingesetzt werden. Damit ist auch das Erzeugen größerer Höhenlinienkarten einfach möglich, da die OSM-Daten bereits in tiles erzeugt werden.
  • Wem das mit den Höhenlinien selber machen zu umständlich erscheint, der kann auch versuchen fertige Kacheln mit Höhenlinien aus dem Netz zu laden: TOPO_D_SRTM. Die einzelnen Kacheln kann man mit gmaptool beispielsweise auch zu einer gmapsupp zusammenfassen. Man sollte am besten auch gleich nen Namen und product und family ids vergeben:
gmt -f 5,25 -m HOEHE -jo gmapsupp.img Topo\ D\ SRTM/*.img
  • Um das Typfile zu editieren empfehle ich den online Typfileeditor: Typfileeditor
  • Bei der Wahl der Garmintypen bin ich relativ beliebig vorgegangen. Natürlich habe ich versucht möglichst viele POIs usw. auf die Garminstandardtypen zu mappen. Das hat auch den Vorteil, dass sie im FIND-Menü korrekt angezeigt werden. Für alle anderen Typen hab ich willkürlich höhere noch freie Garmintypen verwendet und diese mithilfe des Typfiles mit einer Grafik etc. versehen.
  • Adresssuche (Zitat Bernd Wurst auf Talk-de):
    • Die Punkte "Adresse" und "Kreuzung" erscheinen im "Finde"-Menü
    • Zur Eingabe der Stadt kann man entweder direkt aus der Liste der was-weiß-ich-wie-vielen umliegenden Orten wählen oder muss den kompletten Namen der Stadt eingeben. Den Anfang einzugeben reicht bisher nicht.
    • Man muss im Hausnummern-Eingabefeld etwas eingeben, kann auch leer sein, aber man muss einmal in den Eingabedialog gehen.
    • Es werden bei der Straße immer alle Straßen aller Orte zur Auswahl angeboten. Wählt man aber eine Straße im Umkreis der gewählten Stadt, wird die Position der Straße korrekt gefunden und als Navigations-Ziel angeboten.

Bis es soweit ist, daß die Adress-Suche auch in dieser Karte funktioniert, habe ich folgende Zwischenlösung gefunden: Ich kopiere parallel die City Navigator Karte auf die SD-Karte und schalte sie im Menü jedoch aus. Im "Finde" Menü wird jetzt zusätzlich der Unterpunkt: "Region eingeben" aufgeführt. Die Adreess-Suche erfolgt jetzt problemlos. Natürlich könnte ich auch ausschließlich die CN anwenden, doch die Genauigkeit der OSM Karte ist unerreicht(zumindest in meinem Einzugsbeiet).Das Fahrrad- und Fußgänger Routing ist mit der CN Karte nicht zufriedenstellend. Deshalb benutze ich die OSM Karte ausschließlich, auch für das Auto-Routing.

  • Der maxspeed wird momentan in der Art ausgewertet, dass er den road_speed der Straße in eine Kategorie von 0 bis 7 einordnet. Welchen Geschwindigkeiten das entspricht steht hier: Mkgmap/help/style_rules#Element_type_definition
  • ich benutze ein Garmin gpsmap 60CSx gerät. Über Probleme auf anderen Geräten kann ich demzufolge nicht viel sagen...

AIO-Style Karten per Skript selber bauen

Ich habe mal die oben angeführten Schritte in ein primitives Shell-Skript gebastelt, damit der ganze Prozess beinahe automatisch geschehen kann.

An Voraussetzungen braucht das Skript in der Form:

  • Installiertes git
  • Installiertes gpsbabel
  • 64bit Linux. Mit etwas reduzierten Speicherwerten im Skript (die -Xmx Option beim java Aufrufen) sollte es auch auf 32bit Systemen laufen. Könnte aber dann bei grossen Kartenbereichen wegen Speichermangel abbrechen.

Die restlichen benötigten Programme (mkgmap, splitter, gmt) lädt sich das Skript selber runter und entpackt diese auch.

# Zuerst mal die AIO-Stylefile holen
git clone git://github.com/aiomaster/aiostyles.git 

# die benötigten Programme (mkgmap, splitter, gmt) downloaden
wget http://www.mkgmap.org.uk/snapshots/mkgmap-latest.tar.gz
tar -xvzf mkgmap-latest.tar.gz
ln -s mkgmap-r1670/mkgmap.jar mkgmap.jar

wget http://www.mkgmap.org.uk/download/splitter-r289.tar.gz
tar -xvzf splitter-r289.tar.gz
ln -s splitter-r289/splitter.jar splitter.jar

wget http://www.gmaptool.eu/en/system/files/lgmt08067.zip
unzip lgmt08067.zip

# Die Kartendaten aus den geofabrik extrakten downloaden
wget http://download.geofabrik.de/osm/europe/germany.osm.bz2
bunzip2 germany.osm.bz2
ln -s alps.osm map.osm

# die Bugs laden und mit sed bearbeiten; gpsbabel wird benötigt, falls noch nicht installiert
wget http://www.gary68.de/osm/qa/gpx/allbugs.gpx
sed 's/closed>/name>/g;s/<extensions>//g;s/<\/extensions>//g' allbugs.gpx |gpsbabel -i gpx -o osm -f - -F allbugs.osm

# Verzeichnisstruktur generieren
mkdir tiles
cd tiles
mkdir gbasemap
mkdir gaddr
mkdir gfixme
mkdir gboundary
mkdir gosb
mkdir gmaxspeed

# Die Kartendaten splitten
# Benötigt wird die Sun Java JRE6
# Bei 32bit System müsste die Speicherzuteilung reduziert werden, das könnte aber bei grossen Kartenbereichen dann ungenügend sein!
java -Xmx5000M -jar ../splitter.jar --mapid=63240345 --max-nodes=1000000 ../map.osm

cd gbasemap/
echo "Basemap"
java -Xmx4000M -jar ../../mkgmap.jar --max-jobs --style-file=../../aiostyles/basemap_style/ --description='Openstreetmap' --country-name=europe --country-abbr=EU --family-id=4 --product-id=45 --series-name='OSM-AllInOne-EU-bmap' --family-name=OSM --area-name=EU --latin1 --mapname=63240345 --draw-priority=10 --add-pois-to-areas --make-all-cycleways --link-pois-to-ways --remove-short-arcs --net --route --gmapsupp ../*.osm.gz ../../aiostyles/basemap.TYP

cd ../gaddr
echo "Adresseen"
java -Xmx4000M -jar ../../mkgmap.jar --max-jobs --style-file=../../aiostyles/addr_style/ --description='Adressen' --country-name=europe --country-abbr=EU --family-id=5 --product-id=40 --series-name='OSM-AllInOne-EU-Addr' --family-name=ADRESSEN --area-name=EU --latin1 --mapname=63241345 --draw-priority=20 --no-poi-address --no-sorted-roads --add-pois-to-areas --transparent --gmapsupp ../*.osm.gz ../../aiostyles/addr.TYP

cd ../gfixme
echo "Fixme"
java -Xmx4000M -jar ../../mkgmap.jar --max-jobs --style-file=../../aiostyles/fixme_style/ --description='Fixme_Layer' --country-name=europe --country-abbr=EU --family-id=3 --product-id=33 --series-name='OSM-AllInOne-EU-Fixme' --family-name=FIXME --area-name=EU --latin1 --mapname=63242345 --draw-priority=22 --no-poi-address --no-sorted-roads --transparent --gmapsupp ../*.osm.gz ../../aiostyles/fixme.TYP

cd ../gboundary
echo "Boundary"
java -Xmx4000M -jar ../../mkgmap.jar --max-jobs --style-file=../../aiostyles/boundary_style/ --description='Boundary_Layer' --country-name=europe --country-abbr=DE --family-id=6 --product-id=30 --series-name='OSM-AllInOne-EU-boundary' --family-name=boundary --area-name=EU --latin1  --mapname=63240625 --draw-priority=21 --no-poi-address --no-sorted-roads --transparent --gmapsupp ../*.osm.gz ../../aiostyles/boundary.TYP

cd ../gmaxspeed
echo "Maxspeed"
java -Xmx4000M -jar ../../mkgmap.jar --max-jobs --style-file=../../aiostyles/maxspeed_style/ --description='Maxspeed' --country-name=europe --country-abbr=EU --family-id=84 --product-id=15 --series-name='OSM-AllInOne-EU-Maxspeed' --family-name=MAXSPEED --area-name=EU --latin1 --mapname=63246345 --draw-priority=19 --no-poi-address --no-sorted-roads --transparent --gmapsupp ../*.osm.gz ../../aiostyles/maxspeed.TYP

cd ../gosb
echo "OSM-Bugs"
java -Xmx4000M -jar ../../mkgmap.jar --max-jobs --style-file=../../aiostyles/osb_style/ --description='Openstreetbugs' --country-name=europe --country-abbr=EU --family-id=3 --product-id=33 --series-name='OSM-AllInOne-EU-OSB' --family-name=OSB --area-name=EU --latin1 --mapname=63243345 --draw-priority=23 --no-poi-address --no-sorted-roads --transparent --gmapsupp ../../allbugs.osm ../../aiostyles/osb.TYP

# Jetzt alles zu einem gmapsupp.img
cd ../..
./gmt -jo gmapsupp.img tiles/gbasemap/gmapsupp.img tiles/gaddr/gmapsupp.img tiles/gfixme/gmapsupp.img tiles/gosb/gmapsupp.img tiles/gmaxspeed/gmapsupp.img tiles/gboundary/gmapsupp.img

--Hetzi 15:49, 2 September 2010 (BST)

Wanderweg- und Radroutenlayer

Ich hab in ähnlicher weise wie im obigen Skript auch Stylefiles und TYP-File für einen eigenen Wanderweg und Radrouten-Layer erstellt. Das Skript zur Erzeugung liegt unter: http://140.78.94.22/osm/hiking-map.tar.gz bereit. Eine generierte Deutschlandkarte mit diesen Einstellungen kann man sich unter http://140.78.94.22/osm/hiking_germany.img laden. (ca. 23MB) Die Gesamt-AIO-Karte, incl. des Wanderweg und Radroutenlayer gibt es unter http://140.78.94.22/osm/aio-germany-custom.img (über 1200MB, jetzt täglich aktualisiert) Weiters generiere ich jetzt auch täglich eine Österreichkarte mit den identischen Einstellungen unter http://140.78.94.22/osm/aio-austria-custom.img abrufbar (ca. 220MB) Im Verzeichnis http://140.78.94.22/osm/ hab ich auch noch die Polygondateien nach denen ich die Daten ausschneide und den Deutschland .osm Extrakt nach diesem Polygon ausgeschnitten, so wie ich es zur Generierung der Deutschlandkarte verwende. Es sollten dabei immer auch die benachbarten Grenzregionen rund um Deutschland mit drauf sein.

Höhenlinien

Die Höhenlinien hab ich nicht selber generiert, sondern im Netz gefunden. Runterzuladen sind sie hier: [2] Die Höhenlinien wurden in den Alpen mit den genaueren SRTM1 Daten berechnet und die Höhenlinien besitzen einen Abstand von 20 Meter.

Falls es jemand hinbekommt ne transparente Garminkarte mit Höhenlinien von ganz Europa zu erzeugen, wäre ich sehr interessiert. Ich bin schon deutschlandweit gescheitert.

Schau mal auf http://www.kleineisel.de/ralf/gps/garmin/
Mit phyghtmap ist das Erstellen der OSM-Höhenlinien-Daten (in fertigen Tiles) aus den SRTM-Daten an sich kein Problem mehr. Leider ist alleine das Höhenlinien-Image mit einer Auflösung von 20 Meter schon etwa 3 GB groß, das komplette gmapsupp mit basemap über 5 GB. Auch wenn das Garmin GPSMap 60Csx 8 GB große SDHC-Karten unterstützt, macht einem das Dateisystem (FAT32) einen Strich durch die Rechnung, denn die maximale Dateigröße beträgt dort 4 GiB. Garmin selbst ist nicht an der Weiterentwicklung der Firmware interessiert. Mit 50 Meter Höhenauflösung ist das gmapsupp derzeit noch klein genug, aber weniger nützlich.

Das Problem ist, dass srtm2osm zwar ordnungsgemäß ne OSM-Datei erzeugt, diese aber extrem groß wird. (Für Deutschland 8G) Dank dieser Größe kann mkgmap das nicht mehr alles in eine Kachel schieben und man müsste die Höhenlinien-OSM-Datei kacheln. Leider sind die Höhenlinien teilweise sehr lang und somit kommt es unglaublich oft vor, dass diese über mehrere Kacheln hinweggehen und somit weggehaun werden. Im Übrigen lässt sich der tilesplitter gar nicht verwenden, um die Höhen zu kacheln. Anscheinend wertet der die Stützpunkte der Höhenlinien gar nicht als node und somit nützt ein max-nodes gar nichts. Wenn es also irgendwer schafft solche Garminkarten zu erzeugen und sein Wissen und Ergebnis mit anderen teilen möchte, der kann dies hier gerne tun!

Mit dem mkgmap-splitter ist das durchaus möglich. Siehe auch mein HOWTO. --R kleineisel 11:45, 30 September 2009 (UTC)

Für kleinere Ausschnitte habe ich im übrigen unten beschrieben, wie man sich eigene Garminkarten mit Höhenlinien bauen kann. Das Kachelproblem tritt dabei ja nicht auf.

phyghtmap beherrscht Tiling und bietet dieselbe Funktionalität wie srtm2osm, daher lassen sich Höhenlinien-Images auch für größere Bereiche problemlos erzeugen.

Openstreetbugs

Mein Kumpel John und ich haben ein kleines Tool in C gehackt mit dem sich die Openstreetbug-SQL-Dumps in osm-xml konvertieren lassen. Diese können anschließend mit mkgmap umgewandelt und so eine Garminkarte erzeugt werden. Den source-code stellen wir natürlich zur Verfügung: http://tuxcode.org/john/osbsql2osm/osbsql2osm-latest.tar.gz Ich schreibe den Rest mal in Englisch (wird wohl für jeden verständlich sein).

What does it do?

It converts Openstreetbugs sql data dumps to a valid osm-xml format. In Detail it takes a source like that:

INSERT INTO `bugs` (`id`, `lon`, `lat`, `text`, `type`, `last_changed`, `date_created`, `nearby_place`) VALUES
(1,13.50,46.01,'This is an example with &qout;special$qout; Characters -> to show what it does & what not. <hr /> Here you can see a comment with an sql escaped Apostroph \' - funny isn't it? [master, 2009-11-13 12:56:00 MESZ]',1,'2009-11-13 12:56:00','2009-11-13 13:00:00','Dresden [DE]')

You should get an osm-xml file like this:

<?xml version='1.0' encoding='UTF-8'?>
<osm version='0.6' generator='osbsql2osm'>
  <node id='1' timestamp='2009-11-13 13:00:00' visible='true' version='1' lat='46.01' lon='13.50'>
          <tag k='text' v='his is an example with &qout;special$qout; Characters -> to show what it does &_amp; what not. ## Here you can see a comment with an sql escaped Apostroph ' - funny isn't it? [master, 2009-11-13 12:56:00 MESZ]' />
          <tag k='type' v='1' />
          <tag k='last_changed' v='2009-11-13 12:56:00' />
          <tag k='date_created' v='2009-11-13 13:00:00' />
          <tag k='nearby_place' v='Dresden [DE]' />
  </node>
</osm>

How does it work?

First we get the source-code and compile it:

wget http://tuxcode.org/john/osbsql2osm/osbsql2osm-latest.tar.gz
tar xzvf osbsql2osm-latest.tar.gz
cd osbsql2osm-0.3/
./configure
make

If everything goes right we can find a binary file in osbsql2osm-0.3/src named osbsql2osm. Now we get the Database dumps from Openstreetbugs [http://openstreetbugs.schokokeks.org/dumps/]

wget http://openstreetbugs.schokokeks.org/dumps/osbdump_latest.sql.bz2

Now we use bzcat to extract this sql file and pipe it to our converter.

bzcat osbdump_latest.sql.bz2 | osbsql2osm-0.3/src/osbsql2osm > osbdump.osm

If you want to visualize it you can simply load it in JOSM. It looks like this:

Osbjosm.jpg

  • Ain't it beautiful. You see the world made of bugs and still there are countries. But why not use gary68s perl script? -- User:glangollor