Von Google Earth zu OSMAnd

Wenn man mehrere Touren vorab mit Google Earth plant und dabei Pfade und Punkte anlegt, so kann man auf die Idee kommen, die Daten auch am Handy unter OSMAnd zu nutzen. OSMAnd ist eine Android- und Iphone-App, die OSM-Kartendaten lokal gespeichert nutzt. Das heisst, man braucht kein Netz und auch keinen Datentransfer, wenn man zuvor die entsprechenden Grundkarten herunterladen hat. Man kann auch GPS-Tracks aufzeichnen und Punkte vermerken, bzw. Tracks und Points auch als GPX-auf das Handy spielen.

Das Problem dabei: Symbole und Farben gehen bei einem einfachen KML2GPX-Vorgang verloren, man erhält standardmässig rote Tracks und dunkelgelbe Points. Wenn  man allerdings die GPX-Dateien bearbeitet, bevor man sie zu OSMAnd spielt, kann man etwas Layout “mitnehmen”.

Der geschilderte Weg ist mühsam und durchaus verbesserungswürdig.

Vorarbeiten unter Google Earth

Hier werden alle Daten verwaltet und bearbeitet.

Punktdaten

Bei KML2GPX-Konversionen gehen in der Regel Symbole und Farben verloren. Als XSI-Information gespeicherte Angaben können viele KML2GPX-Converter nicht interpretieren und OSMAnd ebenso wenig. Für den Konvertierungsvorgang braucht es also eigentlich keine Symbole und Farben, man macht am Einfachten alles über die Objektnamen indem man sie vereinheitlicht. Das geht für ein Punktobjekt zum Beispiel so:

kirc-stAugstin-AA
rest-zumOchsen
natu-wasserfallStuiben-AAA-OK

mit den “Vorsilben” den “Nachsilben” kann man bei der Konvertierung Unterscheidungen treffen. Sonderzeichen sind zulässig, aber nicht getestet, ein Unterstrichen (_) generiert unter OSMAnd eine Unterkategorie bei den Punktesammlungen, sollte also nicht in den Objektnamen vorkommen.

Ob und wie die Punkte unter Google Earth in Ordner abgelegt werden ist egal, bei der Konvertierung landen alle Punkte in einem Topf.

Tracks

Linienhafte Information kann man unter OSMAnd nur als GPX-Tracks einfügen, sie bekommen alle eine einheitliche Standardfarbe. Das ist nicht besonders übersichtlich und wird hoffentlich einmal optimiert. Auch kann man Tracks in OSMAnd in der Karte nicht anwählen um Informationen abzufragen. In der Zwischenzeit behelfe ich mir damit, dass ich je Track den Startpunkt auch als Punkt vermerke und nach dem obigen Prinzip bezeichne.

Tracks konvertiert man generell zu GPX (wie Punkte, siehe unten) und spielt die Datei mit einem freien Namen am Handy unter

/Android/data/net.osmand.plus/files/tracks/import/

Man wählt sie dann wie aufgezeichnete GPS-Tracks aus.

Man kann hier auch Punktdaten ablegen, sie werden ebenso mit einer einzigen Standardfarbe unter OSMAnd erscheinen und nicht amwählbar sein.

Export aus Google Earth

Den Ordner der Punkte und jenen mit den Linien mit der rechten Maustaste anwählen, “Ort speichern unter…” als KML selektieren.

KML2GPX-Konvertierung

Hier gehen mehrere Tools, online zum Beispiel kml2gpx.com, oder lokal GPSBabel. KML-Datei rein und GPX-Datei raus.

Ein Punkt kann in der GPX-Datei dann so aussehen:

 <wpt lat="43.743424282" lon="6.377657568">
   <ele>0.000000</ele>
   <name>natu-brecheimbert</name>
   <cmt>natu-brecheimbert</cmt>
   <desc>natu-brecheimbert</desc>
 </wpt>

Für OSMAnd braucht man allerdings so etwas:

 <wpt lat="43.743424282" lon="6.377657568">
  <name>natu-brecheimbert</name>
  <extensions><color>#b400e700</color></extensions>
  <type>natu</type>
</wpt>

Grundsätzlich handelt es sich um eine XSL-Transformation, aber die Tools dazu sind teuer, mühsam und so ziemlich der Overkill. Man kann auch mit dem DOM und JavaScript arbeiten:

Browser-Console und JavaScript für GPX2GPX für Punktdaten

Das Prinzip: man liest die GPX-Datei ein, arbeitet sie von oben nach unten ab und schreibt sie neu hinaus. Man kann nicht strikt zeilenorientiert arbeiten weil die Informationen unregelmässig über mehrere Zeilen verteilt sind. Aber GPX ist ein XML-Format wie HTML und es unterliegt einem DOM (Document Object Model). An dessen Knoten kann man DOM-orientiert arbeiten. Folgendes Prozedere ist sicher optimierbar, aber es zeigt gut die einzelnen Schritte.

HTML-Datei mit Script-Block und den GPX-Daten

Man legt eine HTML-Datei mit folgenden Inhalt an, der Script-Block ist unten extra erklärt. Grün die hineinkopierte GPX-Datei samt Header.

<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <script>
  function init(){
    // hier der Script-Block
  }
 </script>
 </head>
 <body onload="init()">
  <h1>GPX</h1>
  <button onclick="printDOM()">Print DOM</button><hr/>

<?xml version="1.0" encoding="UTF-8"?>
<gpx version="1.0" creator="GPSBabel - http://www.gpsbabel.org" xmlns="http://www.topografix.com/GPX/1/0">
  <time>2017-03-26T12:53:30.005Z</time>
  <bounds minlat="42.997039300" minlon="4.455575097" maxlat="44.930359000" maxlon="7.674507902"/>
  <wpt lat="43.581054000" lon="7.124147000">
    <ele>0.000000</ele>
    <name>marc-marchandsDePoissons</name>
    <cmt>marc-marchandsDePoissons</cmt>
    <desc>marc-marchandsDePoissons</desc>
  </wpt>
  <!-- etc. -->
</gpx>

 </body>
</html>

Der Script-Block besteht aus DOM-abarbeitenden Elementen und dem eigentlichen Umschreiben des Inhalts.

  • Rot: Durchlauf aller Punkte (wpt).
  • Orange: das Attribut name wird für weiteren Schritte herangezogen.
  • Gelbgrün: Löschen von überflüssigen Inhalten:
    • Das GPX stammt von GPSBabel, andere Konverter schreiben andere unnötige Inhalte.
  • Dunkelgrün: Erkennen anhand der Vor- oder Nachsilben (Reguläre Ausrücke, RegEx):
    • Es werden hier die Präfixe kirc- und kape- gesucht, zudem wird unterschieden ob hinten die Folge -A, -AA, oder -AAA vorkommt und ob dahinter -OK vorkommt. Nur Namen mit -A, -AA, oder -AAA werden in der ersten Anweisung mit einem blauen, in der zweiten die anderen mit eiben hellblauen Symbol versehen.
  • Blau: DOM bearbeiten, Elemente kreieren und einfügen.
  • Rosa: Funktion zum Rausschreiben in die Browserkonsole
function init(){
  var elems = document.getElementsByTagName("wpt"); 
  alert(elems.length);
  for (var i = 0;i < elems.length; i++){
    var nameHere = elems[i].getElementsByTagName("name")[0].innerHTML;
 
    if(nameHere == elems[i].getElementsByTagName("desc")[0].innerHTML){
     elems[i].removeChild(elems[i].getElementsByTagName("desc")[0]);
    }
    if(elems[i].getElementsByTagName("extensions")[0]){
      elems[i].removeChild(elems[i].getElementsByTagName("extensions")[0]);
    }
    if(elems[i].getElementsByTagName("type")[0]){
      elems[i].removeChild(elems[i].getElementsByTagName("type")[0]);
    }
    if(elems[i].getElementsByTagName("ele")[0]){
      elems[i].removeChild(elems[i].getElementsByTagName("ele")[0]);
    }
    if(elems[i].getElementsByTagName("cmt")[0]){
      elems[i].removeChild(elems[i].getElementsByTagName("cmt")[0]);
    }

    if(nameHere.match(/^((kirc\-)|(kape\-))(.*)(A{1,3})(\-OK)?$/)){
      var newElem = document.createElement("extensions"); 
      var newSubElem = document.createElement("color");
      var newSubElemCont = document.createTextNode("#b40000ff"); // dark
      newSubElem.appendChild(newSubElemCont);
      newElem.appendChild(newSubElem);
      elems[i].appendChild(newElem);
      var newElem = document.createElement("type"); 
      var newElemCont = document.createTextNode("kirc-kape-3A");
      newElem.appendChild(newElemCont);
      elems[i].appendChild(newElem);
    } else if(nameHere.match(/^(kirc\-)|(kape\-).*$/)){
      var newElem = document.createElement("extensions"); 
      var newSubElem = document.createElement("color");
      var newSubElemCont = document.createTextNode("#b47676ff");  // light
      newSubElem.appendChild(newSubElemCont);
      newElem.appendChild(newSubElem);
      elems[i].appendChild(newElem);
      var newElem = document.createElement("type"); 
      var newElemCont = document.createTextNode("kirch-kape");
      newElem.appendChild(newElemCont);
      elems[i].appendChild(newElem);
    }
    // WEITERE ANWEISUNGEN
  } // ENDE DER SCHLEIFE DURCH DIE PUNKTE
} // ENDE DER FUNKTION

function printDOM() {
  console.log(document.getElementsByTagName('body')[0].innerHTML);
}

Man lädt die HTML-Datei im Browser (getestet Google Chrome) und bekommt in einem Alert die Anzahl der Punkte. Weiters öffnet man die Konsole unter “Weitere Werkzeuge” > “Entwicklertools”. Nun klickt man den Button und die neue GPX-Datei wird in die Konsole hinausgeschrieben. Diesen kann man kopieren (überflüssige Zeilen oben und unten löschen) und als

/Android/data/net.osmand.plus/files/favourites.gpx

am Handy speichern, man überschreibt dabei die existierende Datei.

Ist OSMAnd am Handy geladen und man tauscht die Datei favourites.gpx aus, so kann es vorkommen, dass alte und neue Inhalte gleichzeitig geladen werden. In diesem Fall muss man ggf. zuvor die Punkte in OSMAnd am Handy löschen.


No Comments

Leave a Comment