Kann man mehrere Tracks (KML) zusammengefasst in einem Layer anzeigen

Ich habe eine Webseite (http://www.orpatec.ch/osm/tools/waterways.php) gemacht, die die Kanäle in Frankreich anzeigt. Jetzt möchte ich noch die Flüsse dazufügen, mein Layerswitcher überläuft jedoch. Gibt es eine Möglichkeit mehrere Tracks in einen Layer zu packen?

Du kannst in eine kml-Datei mehrere Tracks packen, wobei die Ladezeit natürlich nicht so der Kracher ist. Hast du schonmal über ein Overlay in Kachel-Form nachgedacht?

Schau dir mal die Lösung bei cycling.lonvia.de und hiking.lonvia.de an.
Die Lösung zeigt nur die Routen an, die im aktuellen Ausschnitt sichtbar sind.

Eine andere Idee wäre, die Kanäle/Flüsse regionsweise ein-/auszuschalten.
Das reduziert zumindest die Menge an Einträgen im Layer-Switcher.

Zur technischen Lösung kann ich leider nichts beitragen.

Edbert (EvanE)

Um mehrere Tracks zu einem gemeinsamen Layer hinzuzufügen, kann man diese selbst per Request.GET laden, mit dem passenden Format parsen und per addFeatures zum Layer hinzufügen. Hier ein Beispiel für einen GPX Track:


var lgpx = new OpenLayers.Layer.Vector("GPX Track", {
   projection: new OpenLayers.Projection("EPSG:4326")
});

var request = OpenLayers.Request.GET({
    url: "Track.gpx",
    async: false
});
var gpxFormat = new OpenLayers.Format.GPX({internalProjection: map.getProjectionObject(), extractWaypoints: true, extractRoutes: true, extractAttributes: true});
var features = gpxFormat.read(request.responseXML);
lgpx.addFeatures(features);

Der Track wird hier einfach synrchon (async: false) geladen, bei vielen Dateien empfielt sich asynchrones Laden mit entsprechendem Response-Handler.

Gruß,
Norbert

Ich habe jetzt versucht, es mit KML zu lösen, aber irgendwie will es einfach nicht.


      for (var i=0; i<canals.length; i++) {
        var request = OpenLayers.Request.GET({
          url: "data/relation_"+canals[i][0]+".kml",
          async: false
        });
        var kmlformat = new OpenLayers.Format.KML ({extractAttributes: true, extractStyles: false});
        var features = kmlformat.read (request.responseXML);
        layer.addFeatures(features);
      }

Bei " var features = kmlformat.read" stürzt es immer ab und ich habe keine Ahnung wieso. Der GET scheint die Datei richtig zu lesen.

http://www.orpatec.ch/osm/tools/waterways2.php

Ich hab beim Debuggen gesehen, dass request.responseXML null ist. response.responseText ist IMHO immer gesetzt, bei responseXML hängt es vermutlich vom Content-Type ab, der ist in diesem Fall “text/plain”. Weiß jetzt nicht, ob es der Server besser wissen müsste, oder ob es helfen würde, den gewünschen Typ, z.B. “application/xml”, schon im Request Header mitzugeben.

Es reicht aber vermutlich, einfach responseText zu verwenden:


var features = kmlformat.read (response.responseXML || response.responseText);

Gruß,
Norbert

Hallo,

ich habe den quellcode ausprobiert, allerdings wird mir meine Route nicht angezeigt.

Hat jemand ein Idee woran es liegt?

Zur info ich nutze openlayer 2.11.

Danke
Andy

Moin,

Mein FF zeigt auf der Seite http://www.orpatec.ch/osm/tools/waterways.php rote Linien an.

Die Seite enthält aber folgendes:


var rivers = [[1410772, "La Charente"]
             ,[, ""]

Die zweite Zeile ist syntaktisch fehlerhaft: in der Liste fehlt das erste Element. Der FF ist bei Initialisierungslisten viel zu gnädig und sieht über solche Fehler hinweg (ergänzt möglicherweise ein null), der IE wirft (zu recht!) einen Syntax Fehler. Falls Du den IE benutzt hast, schau mal in die Fehlerkonsole. Und lass die Zeile verschwinden oder mach ein


var rivers = [[1410772, "La Charente"]
             ,[null, ""]

daraus.

Gruß Wolf

Ich hatte zwischenzeitlich ein “waterways2.php”, damit ich die zwei Versionen gleichzeitig anschauen konnte.

Eigentlich wollte ich schon seit längerem einen KML-Export einbauen (via Popup-Box), finde jedoch kaum Zeit. Ausser es hätte jemand gerade ein passendes Beispiel…