SRTM2Osm -mit OSMOSIS mergen

Hallo Leute,

ich versuche derzeit vergeblich meine OSM-Karte mit den SRTM-Höhendaten per OSMOSIS zu vereinigen (–merge).
Vielleicht macht dies jemand von Euch bereits erfolgreich und kann mich etwas unterstützen.
Die fertige Karte möchte ich dann auf dem Handy per GPSMID benutzen, was bislang gut funktioniert, jedoch ohne SRTM-Höhendaten.

Das Herunterladen der SRTM.osm für meinen gewünschten Bereich klappte einwandfrei per:
Srtm2Osm.exe -large -bounds1 49.00 9.00 51.00 16.00

vorab: Ich benutze bereits Osmosis v0.31.2 erfolgreich, um aus der Europakarte spezielle Kartenbereiche fürs Handy herauszuschneiden:
osmosis --rx europe.osm --tee 1 --bounding-box top=“51.00” bottom=“49.00” left=“9.00” right=“16.00” --wx Karte.osm

Nun wollte ich meiner Karte noch die Höhenlinien spendieren, indem man die beiden OSM-Dateien zusammenfügt, per:
osmosis --rx SRTM.osm --rx Karte.osm --merge --wx merged.osm

Leider hagelt es da Fehlermeldungen. Nun habe ich festgestellt, dass die SRTM.osm als XML-Version 0.5 erzeugt wurde und die
Karte.osm mit Version 0.6 von “http://download.geofabrik.de/osm/” kommt. Daher testete ich erfolglos den Befehl:
osmosis --rx Karte.osm --read-xml-0.5 srtm.osm --merge --wx merged.osm

Nun wollte ich die SRTM.osm erstmal auf die gleiche Version bringen, wie die aktuelle Karte.osm:
osmosis --rx SRTM.osm --migrate --wx merged.osm

Ich habe noch viele weitere Befehle ausgetestet, auch mit älteren OSMOSIS-Versionen (v0.30 und die alte Java5-Version).
Auch mit denen funktionierte z.B. der folgende Befehl nicht:
osmosis --read-xml-0.6 Karte.osm --read-xml-0.5 srtm.osm --write-xml-0.6 merged.osm

Langsam beschleicht mich das Gefühl, dass die SRTM.osm fehlerhaft oder inkompatibel ist.

Meistens erscheinen die folgenden Fehler:
…OsmosisRuntimeException: Task … does not support data provided by default pipe stored at level 1 in the default pipe stack.
oder “Thread for task 1-rx failed”

Hat jemand eine Idee oder kann mir jemand erklären wie ich an OSM-Höhendaten in der Version v0.6 herankomme ?

Vielen Dank, fireball2.

Hallo fireball2,

ich habe das vor länger Zeit mal mit Osmosis gemacht, damals hatte ich folgende Befehle nacheinander verwendet:

  1. SRTM-Daten ins OSM-API 0.6-Format umgewandelt:
    … --read-xml-0.5 enableDateParsing=no file=“xyz_srtm.osm” --migrate --write-xml file=“xyz_srtm_neu.osm”

  2. OSM- und SRTM-Daten kombiniert:
    … --read-xml file=“xyz_osm.osm” --sort-0.6 --read-xml file=“xyz_srtm_neu.osm” --sort-0.6 --merge --write-xml file=“xyz_osm_und_srtm.osm”

“enableDateParsing” und “sort” sind von Bedeutung. Die Höhendaten stammten bei mir allerdings von Groundtruth (Srtm2Osm lief damals aufgrund eines Wechsels des NASA-Download-Servers gerade nicht), eventuell sieht es bei Srtm2Osm etwas anders aus. Außerdem ist es schon eine Weile her. Falls es mit obigem also nicht klappt, kann ich noch einmal genauer bei mir nachschauen. Sicher kann man das ganze auch in einer Zeile zusammenpacken, wenn man es will.

Der erste Befehl klappte wunderbar, ich habe nun die Höhendaten im OSM-API 0.6-Format vorliegen. Vielen Dank.
Ich hatte nicht gedacht, dass “enableDateParsing=no” so wichtig ist. Außerdem wußte ich bis dato nicht, an welcher Stelle in der Befehlszeile der Schalter eingefügt werden sollte. Nun ist es mir klarer und es erscheint logisch, Höhendaten haben keinen Zeitstempel ;-).
Die SRTM.osm-Datei wuchs von 600MB (v0.5) auf 800MB (v0.6) an.

Der zweite Befehl -das eigentliche Zusammenfügen der beiden Karten- funktioniert leider nicht.
Der PC arbeitete ca. 5 Minuten und endete mit folgender Fehlermeldung (ganz unten habe ich mal die komplette Meldung angehängt):
Thread for task 1-read-xml failed - org.openstreetmap.osmosis.core.OsmosisRuntimeException: An output error has occurred, aborting.
Thread for task 3-read-xml failed - org.openstreetmap.osmosis.core.OsmosisRuntimeException: Cannot represent 72006 as a char.
Thread for task 5-merge failed - org.openstreetmap.osmosis.core.OsmosisRuntimeException: An input error has occurred, aborting.
Eine Ausgabedatei wurde nicht erzeugt (nicht mal teilweise).

Nun habe ich auch hier wieder verschiedenste Varianten ausprobiert, jedoch führte keine zum Ziel.
In der Regel erhalte ich immer die obige Fehlermeldung, jedoch erhalte ich bei einigen Befehlszeilen eine fragmentarische Ausgabedatei.

Hier nun noch meine gescheiterten Befehlszeilen-Versuche:
osmosis --read-xml file=“C:\Karte.osm” --sort-0.6 --read-xml file=“C:\srtm6.osm” --sort-0.6 --merge --write-xml file=“C:\merged.osm”
osmosis --read-xml file=“C:\Karte.osm” --sort-0.6 --read-xml enableDateParsing=no file=“C:\srtm6.osm” --sort-0.6 --merge --write-xml file=“C:\merged.osm”
osmosis --read-xml enableDateParsing=no file=“C:\Karte.osm” --sort-0.6 --read-xml enableDateParsing=no file=“C:\srtm6.osm” --sort-0.6 --merge --write-xml file=“C:\merged.osm”
osmosis --read-xml file=“C:\Karte.osm” --sort-0.6 --read-xml enableDateParsing=no file=“C:\srtm6.osm” --sort-0.6 --merge --write-xml file=“C:\merged.osm”
osmosis --rx C:\Karte.osm --rx enableDateParsing=no C:\srtm6.osm --merge --wx C:\merged.osm
osmosis --rx enableDateParsing=no C:\Karte.osm --sort-0.6 --rx enableDateParsing=no C:\srtm6.osm --sort-0.6 --merge --wx “C:\merged.osm”
osmosis --rx enableDateParsing=no C:\Karte.osm --rx enableDateParsing=no C:\srtm6.osm --sort-0.6 --merge --wx “C:\merged.osm”
osmosis --rx C:\Karte.osm --sort-0.6 --rx C:\srtm6.osm --sort-0.6 --merge --wx “C:\merged.osm”

Bei diesen Befehlszeilen wurde zumindest eine 1,2GB große Ausgabedatei erzeugt:
osmosis --rx enableDateParsing=no C:\Karte.osm --sort-0.6 --rx enableDateParsing=no C:\srtm6.osm --merge --wx “C:\merged.osm”
osmosis --rx enableDateParsing=no C:\Karte.osm --rx enableDateParsing=no C:\srtm6.osm --merge --wx “C:\merged.osm”

osmosis --rx C:\Karte.osm --rx C:\srtm6.osm --merge --wx “C:\merged.osm”
==> Fehler: Pipeline entities are not sorted, sofortige Dateiausgabe bis zu 1.2GB
OK, hier fehlt der “–sort”-Schalter

Jetzt habe ich nun schon die zwei OSM-Dateien (OSM-Karte und SRTM-Höhendaten) im API 0.6-Format vorliegen, bekomme Sie aber nicht zusammen, es ist zum Haare ausraufen … .
Mir bleibt daher nichts anders übrig, als erneut um Hilfe zu rufen und mich schon mal für die geleistete Hilfe bei “Ebbe73” zu bedanken.
Nun scheint der Thread auf ein reines “Osmosis --merge”-Problem hinauszulaufen…

Nachfolgend die Fehlermeldung in kompletter Länge:
07.11.2009 13:03:06 org.openstreetmap.osmosis.core.Osmosis run
INFO: Osmosis Version 0.31.2
07.11.2009 13:03:06 org.openstreetmap.osmosis.core.Osmosis run
INFO: Preparing pipeline.
07.11.2009 13:03:06 org.openstreetmap.osmosis.core.Osmosis run
INFO: Launching pipeline execution.
07.11.2009 13:03:06 org.openstreetmap.osmosis.core.Osmosis run
INFO: Pipeline executing, waiting for completion.
07.11.2009 13:06:54 org.openstreetmap.osmosis.core.pipeline.common.ActiveTaskMan
ager waitForCompletion
SCHWERWIEGEND: Thread for task 1-read-xml failed
org.openstreetmap.osmosis.core.OsmosisRuntimeException: An output error has occu
rred, aborting.
at org.openstreetmap.osmosis.core.store.DataPostbox.checkForOutputErrors
(DataPostbox.java:76)
at org.openstreetmap.osmosis.core.store.DataPostbox.populateCentralQueue
(DataPostbox.java:127)
at org.openstreetmap.osmosis.core.store.DataPostbox.put(DataPostbox.java
:182)
at org.openstreetmap.osmosis.core.merge.v0_6.EntityMerger$1.process(Enti
tyMerger.java:72)
at org.openstreetmap.osmosis.core.merge.v0_6.impl.SortedEntityPipeValida
tor.process(SortedEntityPipeValidator.java:56)
at org.openstreetmap.osmosis.core.sort.v0_6.EntitySorter.complete(Entity
Sorter.java:62)
at org.openstreetmap.osmosis.core.xml.v0_6.XmlReader.run(XmlReader.java:
110)
at java.lang.Thread.run(Unknown Source)
07.11.2009 13:06:54 org.openstreetmap.osmosis.core.pipeline.common.ActiveTaskMan
ager waitForCompletion
SCHWERWIEGEND: Thread for task 3-read-xml failed
org.openstreetmap.osmosis.core.OsmosisRuntimeException: Cannot represent 72006 a
s a char.
at org.openstreetmap.osmosis.core.util.IntAsChar.intToChar(IntAsChar.jav
a:32)
at org.openstreetmap.osmosis.core.domain.v0_6.Way.store(Way.java:183)
at org.openstreetmap.osmosis.core.container.v0_6.WayContainer.store(WayC
ontainer.java:51)
at org.openstreetmap.osmosis.core.store.BaseObjectWriter.writeObject(Bas
eObjectWriter.java:63)
at org.openstreetmap.osmosis.core.store.SegmentedObjectStore.add(Segment
edObjectStore.java:130)
at org.openstreetmap.osmosis.core.store.ChunkedObjectStore.add(ChunkedOb
jectStore.java:78)
at org.openstreetmap.osmosis.core.sort.common.FileBasedSort.flushAddBuff
er(FileBasedSort.java:93)
at org.openstreetmap.osmosis.core.sort.common.FileBasedSort.add(FileBase
dSort.java:118)
at org.openstreetmap.osmosis.core.sort.v0_6.EntitySorter.process(EntityS
orter.java:40)
at org.openstreetmap.osmosis.core.xml.v0_6.impl.NodeElementProcessor.end
(NodeElementProcessor.java:109)
at org.openstreetmap.osmosis.core.xml.v0_6.impl.OsmHandler.endElement(Os
mHandler.java:108)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endEleme
nt(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.
emptyElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp
l.scanStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp
l$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(U
nknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp
l.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U
nknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U
nknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown So
urce)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Un
known Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.p
arse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at org.openstreetmap.osmosis.core.xml.v0_6.XmlReader.run(XmlReader.java:
108)
at java.lang.Thread.run(Unknown Source)
07.11.2009 13:06:54 org.openstreetmap.osmosis.core.pipeline.common.ActiveTaskMan
ager waitForCompletion
SCHWERWIEGEND: Thread for task 5-merge failed
org.openstreetmap.osmosis.core.OsmosisRuntimeException: An input error has occur
red, aborting.
at org.openstreetmap.osmosis.core.store.DataPostbox.checkForInputErrors(
DataPostbox.java:88)
at org.openstreetmap.osmosis.core.store.DataPostbox.consumeCentralQueue(
DataPostbox.java:158)
at org.openstreetmap.osmosis.core.store.DataPostbox.hasNext(DataPostbox.
java:235)
at org.openstreetmap.osmosis.core.merge.v0_6.EntityMerger.run(EntityMerg
er.java:126)
at java.lang.Thread.run(Unknown Source)
07.11.2009 13:06:54 org.openstreetmap.osmosis.core.Osmosis main
SCHWERWIEGEND: Execution aborted.
org.openstreetmap.osmosis.core.OsmosisRuntimeException: One or more tasks failed
.
at org.openstreetmap.osmosis.core.pipeline.common.Pipeline.waitForComple
tion(Pipeline.java:146)
at org.openstreetmap.osmosis.core.Osmosis.run(Osmosis.java:85)
at org.openstreetmap.osmosis.core.Osmosis.main(Osmosis.java:30)

Die Fehlermeldungen von Osmosis sind zwar immer schön lang, trotzdem kann man mit ihnen irgendwie wenig anfangen. :wink:

Also, ich wollte gerade bei mir auf dem Rechner meinen eigenen wöchentlichen Useractivity-Check für “meine” Mapping-Gegend laufen lassen. Nach dem Herunterladen und Entpacken des DE-Planet-Files ist Osmosis bei mir beim Ausschneiden meiner Mapping-Gegend mit einem Fehler abgebrochen und hat eine unvollständige ausgeschnittene Datei der Gegend erstellt. Leider habe ich gerade keine Zeit, genauer zu schauen, woran im DE-Planet-File Osmosis gescheitert ist. Auf jeden Fall gab es vor einer Woche dieses Problem nicht.

Daher wäre es nicht unwahrscheinlich, dass tatsächlich auch bei Dir schon beim Ausschneiden eine fehlerhafte Datei entstanden ist. Der Rest wären dann nur Folgefehler, wie von Dir vermutet.

Ansonsten könntest Du noch die “UTF8-Version” von Osmosis ausprobieren (Download-Link auf der Osmosis-Seite im OSM-Wiki etwas weiter unten). Vielleicht macht das einen Unterschied aus. Ich habe aber jene verwendet. Außerdem solltest Du zumindest kurz in einem Editor nachschauen (Achtung, ggf. Problem der OSM-Dateigröße beim Öffnen im Editor), ob Deine ausgeschnittene OSM-Datei mit endet. Falls nicht, ist es offensichtlich, dass Osmosis schon beim Ausschneiden einen Fehler gemacht hat.

Deine “gescheiterten” Versuche sehen vom Syntax her nämlich ok aus. Ob der Dateinamen in Anführungszeichen steht oder nicht, scheint egal zu sein (ggf. nur soweit keine Leerzeichen drinnen sind?). Zumindest ich habe Osmosis früher sowohl mit als auch ohne Anführungszeichen schon erfolgreich verwendet. Wenn einmal eine Datumsangabe in einer OSM-Datei steht bzw. eingefügt wurde, sollte es egal sein, ob man enableDateParsing=no verwendet oder nicht. Beides sollte klappen. Nur ist es mit Angabe von enableDateParsing=no oft schneller, da Osmosis dann auf eine Datumsanalyse verzichtet.

Also mit der Planetdatei dürfte dies nichts zu tun haben, da ich den ausgeschnittenen Bereich aus der Europe.osm ohne jegliche Probleme mit GPSMID weiterverarbeiten kann. Beide Dateien enden übrigens mit “” und besitzen auch einen ordentlichen XML-Kopf.
Ich habe sogar schon den Versuch unternommen beide OSM-Dateien per “copy Karte.osm+SRTM.osm” merged.osm /b" aneinanderzuhängen.
Danach habe ich mit einem HexEditor “” von Karte.osm und den xml-Header von SRTM.osm rausgelöscht (sonst bringt es ja nix ;-).
Und nun wollte ich die Datei einfach nochmal mit Osmosis OpenStreetMap-konform sortieren lassen.
Leider erscheint auch hier nach einer gewissen Zeit “Cannot represent 72006 as a char.”.

Ich vermute daher irgendein “komisches” Zeichen in der SRTM-Datei, mit welchem Osmosis nicht zurecht kommt (char = charakter ?!).
Nur leider weiß ich nicht wonach ich in der SRTM.osm suchen soll. Die Suche nach “72006” (inkl. der Anführungszeichen) fand keinen einzigen Eintrag,
dabei dachte ich an einer fehlerhaften Bezeichnungen in einer Node ID=“72006”.
Die Suche nach “72006” (ohne der Anführungszeichen) kann man sich sparen, da es tausende Koordinaten mit diesem Wert gibt.
Zuletzt dachte ich OSMOSIS meint vielleicht mit 72006 die 72006.-Zeile in der OSM-Datei, jedoch fand ich keinen Editor (inkl. UltraEdit), welcher mir diese Datei (800MB) geöffnet hätte.
Letztendlich läuft es darauf hinaus, dass ich die OSMOSIS-Fehlermeldung nicht richtig verstehe und die berühmte Suche der Stecknadel im Heuhaufen bekanntlich aussichtlos ist.
Übrigens glaube ich schon mit der UTF8-Version von Osmosis zu arbeiten ?! Wie kommst Du darauf ? Ich werde es trotzdem nochmal checken.

Eine Alternative sehe ich noch in der Verwendung von Höhendaten aus einer anderen Quelle.
Du sagtest etwas über “Höhendaten von Groundtruth”, dies wäre ja noch einen Versuch Wert. Könntest Du mir eventuell einen Hinweis (Link?) zukommen lassen, wie ich darüber an eine SRTM.osm herankomme ? Danke nochmals, schönes WE, fireball2.

Ich hab’s hinbekommen :wink: !
Der Bereich für die Höhendaten war wohl einfach zu groß, die Größe eines Bundeslandes scheint das Maximum zu sein.
Vielleicht besteht da ein Problem für OSMOSIS.
Hier ist zwar auch die Rede von zu langen Höhenlinien, jedoch hatte er dort Probleme mit GPSMID und nicht mit OSMOSIS.

Wie auch immer, jetzt habe ich ein ganzes Bundesland zoombar und mit meinen Wunscheinstellungen auf meinem kleinen Handy inkl.:

  • meiner Wunsch-POI’s

  • eigener deutscher Sprachausgabe fürs Routing

  • Wunschfarben für die einzelnen Straßen, Wege und Flächen

  • Routenplaner

  • Parkbank- und Restaurantfinder im gewählten Umkreis

  • und jetzt auch noch Höhenlinien (ideal zum Fahrrad fahren oder Wandern) :sunglasses:
    GPSMID machts möglich.

Aber erst wirklich genial ist die Möglichkeit die Karte täglich (wenn’s denn unbedingt sein muß) auf dem Handy zu aktualisieren bzw. eigene Einträge hinzuzufügen, alles völlig kostenlos. Wenn die Entwicklung so weiter geht, dann muß sich TomTom und Co. in Zukunft warm anziehen. :stuck_out_tongue:

Damit ich meine Zeit nicht umsonst vergeutet habe, will ich hier gleich noch der Nachwelt grob beschreiben, wie man mit einem Tastenklick eine länderübergreifende Karte auf sein Handy bekommt. Alles mit einer simplen BATCH-Datei und ein paar kleinen portablen Progrämmchen. Man kann dadurch den Vorgang natürlich auch mit dem Taskplaner (z.B. über Nacht) automatisieren. Wer an der Höhenlinienanzeige im Handy kein Interesse hat, kann die Punkte 3-5 weglassen.
Bitte testet die folgenden Punkte lieber erst mal an einem kleinen Gebiet aus (z.B. den Heimatort), da der Vorgang so erstmal viel schneller geht, weniger Fehler auftreten und wenn die Batch-Datei einmal steht, dann kann man sich nach und nach an größere Bereiche heranwagen. An irgendeiner Stelle gibt es sicherlich Grenzen, ob dies dann der PC oder das Handy ist, liegt an Eurer Hardware :).

  1. Zuerst lade ich mir die reichlich 2 GB große Europe-Karte herunter, weil ich nicht nur ein Stück Deutschland brauche, sonder auch noch ein bißchen Ausland. Wer’s nicht braucht oder nicht kann (z.B. wegen langsamer DSL-Leitung), kann sich schließlich auch “nur” Deutschland oder nur ein spezielles Bundesland von der Geofabrik herunterladen. Ich verwende wget, weil dieses vor dem Herunterladen prüft, ob die Datei im Netz wirklich aktueller ist, als die auf meinem Rechner (bei einem 2GB-Download kann dies sinnvoll sein :roll_eyes:):
    wget.exe http://download.geofabrik.de/osm/europe.osm.bz2 -P C:\ -N

  2. Jetzt schneide ich mir meinen gewünschten Teil aus der Europakarte aus, dazu benutze ich OSMOSIS mit der folgenden Befehlszeile:
    osmosis --rx C:\europe.osm.bz2 --tee 1 --bounding-box top=“50.00” bottom=“49.00” left=“9.00” right=“12.00” --wx C:\meine_Karte.osm.bz2
    Es ist hier zu beachten, dass die BAT-Datei im Verzeichnis “osmosis-0.31.2\bin” zu verwenden, und auch von dort zu starten ist!
    Außerdem hat hiermit der PC ordentlich zu tun, zwei Stunden kann man da schon mal einplanen.
    Man darf den obigen Bereich auch nicht zu groß wählen, da man sonst mit OSM2GPSMIS (siehe unten) Speicherprobleme bekommen kann.
    Als Faustregel gilt, die ausgeschnittene Datei muß (entpackt!) kleiner als der eigene Arbeitsspeicher sein.
    Außerdem soll ja auch das Handy mit den Datenmengen noch zurecht kommen.
    Um die obigen Koordinaten für sich selbst herauszufinden kann man einfach auf Openstreetmap.org gehen und dort mal auf den Kartenreiter “Export” klicken. Dort kann man sich den gewünschten Bereich per “Manually select a different area” mit der Maus aufziehen und links die Werte für OSMOSIS abschreiben.

  3. Während Osmosis am gewünschten Kartenauschnitt rumrechnet, kann man sich schon mal die Höhendaten von der NASA organisieren (aber nur wer Höhenlinien auf seiner Karte im Handy eingezeichnet haben möchte). Dies funktioniert mit dem Progrämmchen Srtm2Osm mit folgendem Befehl:
    Srtm2Osm.exe -large -bounds1 49.0 9.0 50.0 12.0
    Die hier angegebenen Koordinaten sollten selbstverständlich die gleichen sein, wie beim obigen Kartenausschnitt.
    Die Daten werden nun von der NASA geholt und in die Datei “srtm.osm” geschrieben.
    Leider erzeugt Srtm2Osm noch eine OSM-Datei im alten OpenStreetMap-Format nämlich in der API-0.5. Dies erkennt man daran, wenn man die OSM-Datei mit einem “guten” Text- oder Hexeditor (z.B. HxD) öffnet, dass dort gleich zu Beginn folgendes steht: osm version=“0.5”.

  4. Wir benötigen jedoch die Höhendaten in der Version 0.6 und müssen die Datei daher dahingehend konvertieren, mit dem folgenden Befehl:
    osmosis --read-xml-0.5 enableDateParsing=no C:\srtm.osm --migrate --wx C:\srtm6.osm

  5. Wenn beide OSMOSIS-Vorgänge (Punkt 2 & 4) beendet sind, dann sollten nun die Dateien “meine_Karte.osm.bz2” und “srtm6.osm” vorliegen. Diese müssen nun noch zu einer Datei zusammengefügt werden. Zuvor sollte man mal die Dateigröße überprüfen, ob diese noch im Rahmen des eigenen PC-Arbeitsspeichers liegen (beachte: bz2 = gepackt). Beide Dateien werden wie folgt zusammengefügt:
    osmosis --rx C:\meine_Karte.osm.bz2 --sort-0.6 --rx C:\srtm6.osm --sort-0.6 --merge --wx C:\meine_Karte_mit_SRTM.osm.bz2
    Sollte es jetzt Fehlermeldungen hageln, dann liegt dies mit ziemlicher Sicherheit an der Datei srtm6.osm, einfach nochmal von vorn beginnen und den Kartenbereich generell kleiner wählen. Bei mir erschien dann übrigens immer der Fehler “Cannot represent 72006 as a char.”
    Wenn alles glatt läuft, dann sollte OSMOSIS in spätestens 10 Minuten fertig sein und man hat nun die Datei “meine_Karte_mit_SRTM.osm.bz2” vorliegen.

  6. Diese Karte kann man nun mit OSM2GPSMID zu einer JAR- & JAD-Datei umwandeln, die man dann dem Handy installieren und starten kann.
    Ehe man das Programm startet, ist jedoch noch etwas Vorarbeit angesagt.
    Zumindest sollte man sich eine Datei namens “GPSMID.properties” zusammen-zimmern, in der u.a. erneut die obigen Koodinaten eingetragen werden. Beispielsweise könnte diese wie folgt aussehen:
    *
    bundle.name = GPSMID
    #südlicher Rand
    region.1.lat.min = 49.00
    #westlicher Rand
    region.1.lon.min = 9.00
    #nördlicher Rand
    region.1.lat.max = 50.00
    #östlicher Rand
    region.1.lon.max = 12.00*

    #spezielle Anpassung für das Handy
    app = GpsMid-Generic-full
    #zur Auswahlen stehen ansonsten noch
    #blackberry,editing,full-nolocation,minimal,minimal-bt,multi,no-obex,no-xml

    #Routing einschalten
    useRouting = motorcar,bicycle,foot

    #Style-file - dies beinhaltet alle wichtigen Einstellungen für GPSMID (Darstellung auf dem Handy)
    style-file = style-file.xml

    *midlet.name = GPSMID
    *
    Nun kann man OSM2GPSMID wie folgt starten:
    java -Xmx1024M -jar Osm2GpsMid.jar meine_Karte_mit_SRTM.osm.bz2 GPSMID
    Sollte hierbei ein “out-of-Memory”-Fehler erscheinen, dann kann man zwar versuchen den “-xmx”-Parameter weiter zu erhöhen,
    i.d.R. ist aber die Karte “meine_Karte_mit_SRTM.osm.bz2” zu groß. Auch hier würde die Parole dann lauten “zurück zu Nr. 2”.

  7. Nun noch die JAR-Datei aufs Handy laden, installieren und raus in die Natur.

Weiterer Hinweis:
Da man bei OSM2GPSMID wirklich nahezu alles selbst einstellen kann (POI-Bildchen, mp3-Dateien für die Sprachausgabe, Farbe, welche Objekte ab welcher Zoomstufe dargestellt werden, Routingoptionen, etc.) empfehle ich die Homepage von GPSMID, um sich ein wenig zu belesen. Grundsätzlich werden alle Einstellungen in der style-file.xml vorgenommen. Vor allem ist unter “” der folgende Eintrag vorzunehmen, damit man die oben erkämpften Höhenlinien auch auf dem Handy bewundern kann:

  •   	<keyW tag = "contour"> <!-- nur fuer SRTM-Hoehendaten, wenn diese mit in die OSM-Datei gemerged wurden -->
      		<Wvalue name ="elevation">
      			<description desc = "Meter"/>
      			<namekey tag = "ele"/>
      		<isArea area = "false"/>
      		<scale scale = "17"/>
      		<lineColor color = "009C004B" />
      			<lineStyle dashed = "false" />
      		<wayWidth width="1" />
      		</Wvalue>
      	</keyW>
    

Außerdem sollte man vorab schon mal wissen, was das eigene Handy überhaupt leisten kann. Es gibt einige Handy-Modelle, welche nur ziemlich kleine JAR-Dateien starten können, trotz großem internen Speichers. Auf Anhieb fallen mir da die Nokia Handy’s 6233 oder 6230i ein, welche nur max. 1MB große JAR-Dateien starten können. Da kann man dann leider nur kleinere Orte auf dem Handy installieren kann, braucht man gar nicht erst diese ganzen schwierigen Punkte durchzuackern, sondern erzeugt sich den Ort seiner Wahl allein mit der OSM2GPSMID-GUI:
java -Xmx1024M -jar Osm2GpsMid.jar
Für die Wanderung in einem fremden Urlaubsort ist dies allemal ausreichend und vor allem ganz schnell erzeugt und auf dem Handy gestartet.
Höhenlinien hat man dann allerdings nicht.

Diese Links habe ich gerade eben noch gefunden:

Viel Erfolg, fireball2.

Hallo zusammen,

danke für die Erklärungen und den WIKI http://sourceforge.net/apps/mediawiki/gpsmid/index.php?title=Elevation_contour_maps
(der offensichtlich aus dieser Mail entstanden ist)

Ich habe GPSMID erfolgreich auf meinem Blackberry 9700 am laufen.

Ich habe jetzt einen Tag mit dem Versuch zugebracht SRTM Daten mit einem OSM Kartenausschnitt zu verbinden. Leider ohne Erfolg.

Ich bekomme beim osmosis aufruf mit dem parameter --merge eine andere Fehlermeldung.
Ich habe so das Gefühl, dass entweder das osmosis-Paket für Windows einen Fehler hat oder meinem Java etwas fehlt.

Ich hoffe jemand von Euch kann die Fehlermeldungen nachvollziehen.

Alle Schritte davor haben (augenscheinlich) geklappt. Ich habe folgende Software verwendet:

win7 32 (auch unter XP selber Fehler)
srtm2osm-1.8.14.10
osmosis-bin-0.35 und osmosis-bin-0.38

Zum extrahieren der Karte habe ich osmosis und die vorgefertigten osm-Files verwendet (koeln.osm.bz2)

Auch einen Versuch mit vorgefertigten SRTM-Files im .osm Format habe ich getestet.

Besten Dank

/Eisenopferd/

Hier die Ausgabe von osmosis:

D:\daten\Handy\gps\openstreetmap\osmosis-latest\osmosis-0.38\bin>osmosis --rx D:
\daten\Handy\gps\openstreetmap\osmosis_map.osm --sort-0.6 --rx D:\daten\Handy\gp
s\openstreetmap\srtm6.osm --sort-0.6 --merge --wx D:\daten\Handy\gps\openstreetm
ap\map_with_contour.osm
01.01.2011 21:14:30 org.openstreetmap.osmosis.core.Osmosis run
INFO: Osmosis Version 0.38
01.01.2011 21:14:30 org.java.plugin.registry.xml.ManifestParser
INFO: got SAX parser factory - org.apache.xerces.jaxp.SAXParserFactoryImpl@93dee
9
01.01.2011 21:14:30 org.java.plugin.registry.xml.PluginRegistryImpl configure
INFO: configured, stopOnError=false, isValidating=true
01.01.2011 21:14:30 org.java.plugin.registry.xml.PluginRegistryImpl register
INFO: plug-in and fragment descriptors registered - 1
01.01.2011 21:14:30 org.java.plugin.standard.StandardPluginManager activatePlugi
n
INFO: plug-in started - org.openstreetmap.osmosis.core.plugin.Core@0.38.0
01.01.2011 21:14:30 org.openstreetmap.osmosis.core.Osmosis run
INFO: Preparing pipeline.
01.01.2011 21:14:30 org.openstreetmap.osmosis.core.Osmosis run
INFO: Launching pipeline execution.
01.01.2011 21:14:30 org.openstreetmap.osmosis.core.Osmosis run
INFO: Pipeline executing, waiting for completion.
01.01.2011 21:14:30 org.openstreetmap.osmosis.core.pipeline.common.ActiveTaskMan
ager waitForCompletion
SCHWERWIEGEND: Thread for task 1-rx failed
java.lang.LinkageError: loader (instance of org/codehaus/plexus/classworlds/rea
lm/ClassRealm): attempted duplicate class definition for name: “org/apache/xerc
es/jaxp/datatype/DatatypeFactoryImpl”
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf(Cl
assRealm.java:386)
at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(
SelfFirstStrategy.java:42)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm
.java:244)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm
.java:230)
at javax.xml.datatype.FactoryFinder.getProviderClass(Unknown Source)
at javax.xml.datatype.FactoryFinder.newInstance(Unknown Source)
at javax.xml.datatype.FactoryFinder.findJarServiceProvider(Unknown Sourc
e)
at javax.xml.datatype.FactoryFinder.find(Unknown Source)
at javax.xml.datatype.DatatypeFactory.newInstance(Unknown Source)
at org.openstreetmap.osmosis.core.time.DateParser.(DateParser.java
:36)
at org.openstreetmap.osmosis.xml.common.XmlTimestampFormat.parseTimestam
p(XmlTimestampFormat.java:58)
at org.openstreetmap.osmosis.core.domain.common.UnparsedTimestampContain
er.getTimestamp(UnparsedTimestampContainer.java:65)
at org.openstreetmap.osmosis.core.domain.v0_6.CommonEntityData.getTimest
amp(CommonEntityData.java:293)
at org.openstreetmap.osmosis.core.domain.v0_6.CommonEntityData.store(Com
monEntityData.java:188)
at org.openstreetmap.osmosis.core.domain.v0_6.Entity.store(Entity.java:1
38)
at org.openstreetmap.osmosis.core.domain.v0_6.Node.store(Node.java:184)
at org.openstreetmap.osmosis.core.container.v0_6.NodeContainer.store(Nod
eContainer.java:49)
at org.openstreetmap.osmosis.core.store.BaseObjectWriter.writeObject(Bas
eObjectWriter.java:63)
at org.openstreetmap.osmosis.core.store.SegmentedObjectStore.add(Segment
edObjectStore.java:130)
at org.openstreetmap.osmosis.core.store.ChunkedObjectStore.add(ChunkedOb
jectStore.java:78)
at org.openstreetmap.osmosis.core.sort.common.FileBasedSort.flushAddBuff
er(FileBasedSort.java:93)
at org.openstreetmap.osmosis.core.sort.common.FileBasedSort.add(FileBase
dSort.java:118)
at org.openstreetmap.osmosis.core.sort.v0_6.EntitySorter.process(EntityS
orter.java:40)
at org.openstreetmap.osmosis.xml.v0_6.impl.NodeElementProcessor.end(Node
ElementProcessor.java:117)
at org.openstreetmap.osmosis.xml.v0_6.impl.OsmHandler.endElement(OsmHand
ler.java:107)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source
)
at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unkn
own Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElemen
t(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContent
Dispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Un
known Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Sour
ce)
at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at org.openstreetmap.osmosis.xml.v0_6.XmlReader.run(XmlReader.java:108)
at java.lang.Thread.run(Unknown Source)
01.01.2011 21:14:35 org.openstreetmap.osmosis.core.pipeline.common.ActiveTaskMan
ager waitForCompletion
SCHWERWIEGEND: Thread for task 3-rx failed
org.openstreetmap.osmosis.core.OsmosisRuntimeException: An output error has occu
rred, aborting.
at org.openstreetmap.osmosis.core.store.DataPostbox.checkForOutputErrors
(DataPostbox.java:76)
at org.openstreetmap.osmosis.core.store.DataPostbox.populateCentralQueue
(DataPostbox.java:127)
at org.openstreetmap.osmosis.core.store.DataPostbox.put(DataPostbox.java
:182)
at org.openstreetmap.osmosis.set.v0_6.impl.DataPostboxSink.process(DataP
ostboxSink.java:34)
at org.openstreetmap.osmosis.core.sort.v0_6.SortedEntityPipeValidator.pr
ocess(SortedEntityPipeValidator.java:58)
at org.openstreetmap.osmosis.core.sort.v0_6.EntitySorter.complete(Entity
Sorter.java:62)
at org.openstreetmap.osmosis.xml.v0_6.XmlReader.run(XmlReader.java:110)
at java.lang.Thread.run(Unknown Source)
01.01.2011 21:14:35 org.openstreetmap.osmosis.core.pipeline.common.ActiveTaskMan
ager waitForCompletion
SCHWERWIEGEND: Thread for task 5-merge failed
org.openstreetmap.osmosis.core.OsmosisRuntimeException: An input error has occur
red, aborting.
at org.openstreetmap.osmosis.core.store.DataPostbox.checkForInputErrors(
DataPostbox.java:88)
at org.openstreetmap.osmosis.core.store.DataPostbox.consumeCentralQueue(
DataPostbox.java:153)
at org.openstreetmap.osmosis.core.store.DataPostbox.hasNext(DataPostbox.
java:235)
at org.openstreetmap.osmosis.set.v0_6.EntityMerger.run(EntityMerger.java
:107)
at java.lang.Thread.run(Unknown Source)
01.01.2011 21:14:35 org.openstreetmap.osmosis.core.Osmosis main
SCHWERWIEGEND: Execution aborted.
org.openstreetmap.osmosis.core.OsmosisRuntimeException: One or more tasks failed
.
at org.openstreetmap.osmosis.core.pipeline.common.Pipeline.waitForComple
tion(Pipeline.java:146)
at org.openstreetmap.osmosis.core.Osmosis.run(Osmosis.java:92)
at org.openstreetmap.osmosis.core.Osmosis.main(Osmosis.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchStandard(Laun
cher.java:329)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.jav
a:239)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(La
uncher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:
352)
at org.codehaus.classworlds.Launcher.main(Launcher.java:31)

D:\daten\Handy\gps\openstreetmap\osmosis-latest\osmosis-0.38\bin>