Browserabhängiges GPX-Format bei OpenLayers.Format.GPX

Tag zusammen,

ich wollte eine Seite basteln, wo der Besucher sich einen GPX-Track zusammenklicken kann, stiess aber auf eine Hürde, die ich erstmal feige umgehen musste. Anscheinend haben nämlich unterschiedliche Browser unterschiedliche Vorstellungen von GPX…

Wenn ich in der “Vector Formats Example”-Seite von Openlayers einen Track baue und das Ergebnis ansehe, liefern Opera (9 Linux), Chrome (11 Linux) und IE (9 Win) sowas:

<gpx xmlns="http://www.topografix.com/GPX/1/1" .....>
  <gpx:trk xmlns:gpx="http://www.topografix.com/GPX/1/1"> 
    <gpx:trkseg>
      <gpx:trkpt lon="-53.4375" lat="22.8515625"/>
      <gpx:trkpt lon="6.328125" lat="-24.2578125"/>

Der Firefox (10 auf Linux, 14 auf Windows) liefert

<gpx xmlns="http://www.topografix.com/GPX/1/1" .....>
  <trk>
    <trkseg>
       <trkpt lon="-98.578122854233" lat="15.234378576279"/>
       <trkpt lon="63.140627145767" lat="21.562503576279"/>

Der Unterschied ist, dass bei den nicht-Firefoxen der Namespace in jedem Element mitgeschleppt wird (“<**gpx:**trkseg>, <**gpx:**trkpt …/>”).

Man könnte das für eine Schrulle vom Firefox halten. Erlaubt ist beides, soweit ich XML verstehe. Dummerweise verstehen auch andere Programme die Schreibweise mit Namespace nicht (und meine selbstgetippten auch nicht, das kommt davon wenn man immer nur den output von gpsbabel und Abkömmlingen als Beispiel für gpx-Dateien nimmt). Ich vermute mal, das liegt an den eingebauten Javascript-XML-Parsern, die die Browser unterschiedlich arbeiten lassen, die Seite zum Testen war ja die gleiche.

Kann man dieses Verhalten irgendwie steuern und alle Browser die gleiche Art von GPX ausgeben lassen?

viele Grüße,
Max

Hallo Max

Sofern du noch ein Programm dazwischen laufen lassen kannst, wäre etwas wie sed, awk, Perl und ähnliche eine Lösung.
Einfach den Text “<gpx:” durch den Text “<” ersetzen. Die Syntax hängt von dem gewählten Programm ab. Umgekehrt immer den Text “gpx:” einfügen ginge natürlich auch.

Wenn du kein Programm zwischen schalten kannst, dann weiß ich auch keine Lösung.

Edbert (EvanE)

Hi,

das scheint erst vor wenigen Monaten nochmal angepackt worden zu sein und auch die Testcases, die man ganz unten im Pull request sieht, gehen wohl eher davon aus, dass da nicht die ganzen Namespaces in den Elementen mit drin sind (wobei unklar ist, ob t.xml_eq das berücksichtigen würde und der Testfall dann auf rot geht, wenn man ihn in Chrome oder IE ausführt).

Anyway: ich würde damit die openlayers-dev Liste beglücken, dass da zwar wunderschön gültiges XML (oder GPX?) erzeugt wird, was aber ‘in the wild’ von niemandem verstanden wird. Zusätzlich noch ein Ticket aufmachen.

In der Zwischenzeit würde ich eine Kopie von OpenLayers.Format.GPX bauen und dort das Namespace-Zeug rauswerfen, also ungefähr so.

Gruß,
mmd

Morgen und danke für die Antworten,

Ist das so? Ich dachte, ich hätte einfach veraltetete Vorstellungen und Programme.

Umgangen hab ich das erstmal, indem ich mir OL.Format.WKT ausgeben lasse und mir damit dann ein GPX zusammenbaue. Interpretieren muss ich das sowieso, weil ich kann ja eine Datei nicht unverändert auf meinen Server lassen, die mir wildfremde Menschen hochladen…

Grüße, Max

Guter Punkt. Ich habe gerade mal beide Varianten mit Mapsource und BaseCamp durchgetestet und siehe da, beiden sind die Namespaces ziemlich egal, macht also keinen Unterschied. Dürfte dann wohl eher Probleme mit XML-Verarbeitung light (einfacher Stringvergleich) geben.

Gruß,
mmd