Openlayer mit gpx-Datei

Meine Dateien sind auf der Festplatte.

Ich möchte einen gpx-Track auf OpenStreetMap überlagern. Wenn ich die gpx-Datei im gleichen Verzeichnis wie die aufrufende Datei habe oder in direkter Verzeichnislinie angebe, funktioniert es. Übers Internet erhalte ich die OSM und der Track von der Festplatte wird überlagert.

var GPXVariable_1 = new OpenLayers.Layer.Vector(“Bretterspitze”, {
strategies: [new OpenLayers.Strategy.Fixed()], protocol: new
OpenLayers.Protocol.HTTP({
url:“Bretterspitze.gpx”, format:new OpenLayers.Format.GPX()
}), // funktioniert

… url:“CD-oF/GPS/Allgauer/Bretterspitze.gpx” // funktioniert

Muss ich in den Verzeichnissen zurückspringen (weil die Quelldatei in tieferer Verzeichnisebene ist), wird kein Track gezeichnet:

… url:“…/…/…/GPS/Allgauer/Bretterspitze.gpx” // funktioniert nicht

Was gebe ich in der url falsch ein? Wie muss die Syntax der url geschrieben werden?

Öffentlich verfügbar? Falls ja: Link? Ansonsten sehe ich da nur, dass du nochmal genau prüfen solltest, ob der Pfad wirklich stimmt.

Hallo,

ich habe die Datei versuchsweise nur eine Ebene höher eingestellt und der Zugriff ist nicht möglich

… url:“…/Alpspitze.gpx”

Durch die Frage nach dem Link hatte ich eine Idee. Ich habe eine aktuellen Datei (Lailach_osm.html) entsprechend erweitert und über das Internet gestartet - und siehe da es funktioniert.

http://www.antonflegar.de/Alpen/CD_1024/Allgauer/Lailach/Lailach_osm.html

Wenn ich aber die gleiche Datei von der Festplatte aus starte, erscheint kein Track. Muss ich die url anders gestalten, wenn ich von der Festplatte starte? Oder muss ich noch eine zusätzliche Angabe im Header der Datei machen (so ähnlich wie: ?

Am einfachsten hier wäre zu schauen, was das Netzwerktab der Browserkonsole (oder von Firebug) dazu sagt. Alternativ die Fehlerkonsole.

Ich verstehe Deine Frage allerdings nicht zu 100%, wenn ich richtig interpretiere, dass Du aus einer Internetseite eine lokale Datei einbinden möchtest: das geht (zum Glück) nicht.

Ich möchte den gleichen Inhalt, den ich auf dem Server habe, auf eine DVD übertragen, bzw von der Festplatte starten.
Auf dem Server funktioniert die Einbindung eines Tracks mit der Adresse

var GPXVariable_1 = new OpenLayers.Layer.Vector(“Lailachspitze”, {
strategies: [new OpenLayers.Strategy.Fixed()], protocol: new
OpenLayers.Protocol.HTTP({
url:“…/…/…/GPS/Allgauer/Lailachspitze.gpx”, format: new
OpenLayers.Format.GPX()
}),

Starte ich die identische Webseite auf der Festplatte (ich muss die Webseiten vor dem Transfer schließlich testen), dann wird der Track nur überlagert wenn sich die Datei Lailachspitze.gpx im gleichen Verzeichnisbaum in oder unterhalb der Datei Lailachspitze.html befindet:

url:"Lailachspitze.gpx
url:"xyz/Lailachspitze.gpx

Die Fehlerkonsole von Firefox meldet beim Offline-Aufruf der Datei im ersten Fall einen Fehler:

**NS_ERROR_DOM_BAD_URI: Access to restricted URI denied **

mit Bezug auf OpenLayer.js

Bei den beiden anderen Fällen kommt kein Fehlerhinweis, weil ja auch der Track überlagert wird.

Muss die uri im ersten Fall evt mit localhost: oder file: beginnen?

Aus http://kb.mozillazine.org/Security.fileuri.strict_origin_policy

Possible values and their effects

True: Local documents have access to other local documents in the same directory and in subdirectories, but not directory listings. (Default)
False: Local documents have access to all other local documents, including directory listings.
Recommended settings: If you do development with local files and need to be able to retrieve other local files, you may need to set this preference to false. Otherwise, leaving it set to true offers the most security.

Das blöde (für Dich, vom Sicherheitsaspekt her betrachtert ist das ja eher gut) daran ist, dass das eine Browsereinstellung ist. Die kannst Du nicht bei mir ändern, wenn Du mir Deine CD gibst.

Noch blöder ist, dass das nur bei Firefox mit der Umstellung dieser Konfiguration geht. Andere Browser haben andere Vorlieben, wie sie lokale html-Seiten und deren Scripts behandeln. Im IE solls z.B. mit der Sicherheitseinstellung für “local zone” oder so gehen. Chrome hat wohl einen Kommandozeilenparameter

Sämtliche Browser sind der Ansicht, dass ich das bei meinem Browser lokal ändern muss. Keinesfalls darf sowas der Ersteller einer CD entscheiden, weil der könnte ja der böswillige Angreifer sein.

Grüße, Max

Du könntest einen eigenen Webserver mitliefern, z.B. mit https://code.google.com/p/mongoose/ , dann hast du die Rechteprobleme nicht, solange alle Seiten vom Webserver aus zugreifbar sind. Den kannst du dann auch auf DVD brennen, und eine batch-Datei schreiben, die den Server startet und vielleicht schon den Browser mit der korrekten Adresse startet.

Hallo Max,

danke für die Info.

Mit der Änderung in Firefox about:config kann man den Wert für

**security.fileuri.origin_policy false **

setzen. Dann wird der Track angezeigt.

Ich stimme zu, dass das nicht praktikabel ist. Man kann den Leuten nicht sagen, wenn ihr die DVD benutzt, dann müsst ihr in der Config Änderungen vornehmen.

Nun probiere ich noch die Idee von gormo mit dem Webserver. Wenn das zuviel Aufwand ist, müsste ich die Verzeichnisstruktur ändern.

In jedem Fall Danke an all die Helfer! :slight_smile:

Hast Du denn mal versucht, das GPX in den selben Ordner zu packen wie die aufrufende Datei? Das sollte eigentlich gehen.

Hallo MKnight,

Ja, dann geht es. Ich wollte aber meine Verzeichnisstruktur nicht ändern. Die Idee mit dem Webserver ist auch zu aufwändig.
Ich habe mich daher entschieden, die Verzeichnisstruktur zu ändern, so dass die gpx-Dateien in einem Unterverzeichnis der aufrufenden Dateien stecken. Nun habe ich wieder einige Tage Arbeit.

Danke für die Unterstützung.

Aber Achtung: dass Unterverzeichnisse als same-origin betrachtet werden ist nur bei Firefox so! Andere Browser erlauben den Zugriff erst mal gar nicht, z.B. Chrome:

[http://googlechromereleases.blogspot.de/2010/02/dev-channel-update_24.html]

Gruß,
Norbert