fill und fillColor bei GPX-Dateien?

Hallo OSM-Gemeinde,
ich komme mit dem Wert in meinen Script nicht klar, siehe Beispiel-Code unten. Egal, was ich bei fill und fillColor eingebe. Es werden nur die Konturen der GPX-Datei in der Karte eingefärbt. Was mache ich falsch? Wie kann ich die Farbe der Fläche ändern? Noch eine Anmerkung: Die Kontur ist geschlossen. Der Anfangs- und der Endpunkt in der GPX-Datei sind gleich. Vielen Dank schon einmal für eure Hilfe!

var gpxTrackStyle = {strokeColor: "#00FF00", strokeWidth: 2, fillColor: "#00FF00", pointRadius: 5};
var gpxTrack = new OpenLayers.Layer.Vector("Title",{
                protocol: new OpenLayers.Protocol.HTTP
                ({
                    url: "path",
                    format: new OpenLayers.Format.GPX()
                }),
                strategies: [new OpenLayers.Strategy.Fixed()],
                style: gpxTrackStyle,
                projection: new OpenLayers.Projection("EPSG:4326")
});
            
map.addLayer(gpxTrack);

Funktioniert fillColor nur bei Polygonen? Wird dieser Wert bei einer Gpx-Datei ignoriert? Wie schon geschrieben, die Konturen des Gpx-Tracks lässt sich einfärben, aber nicht die Fläche. Vielen Dank für eure Antwort vorab! VG Leo

Das GPX Dateiformat transportiert m.W. nur Tracks, Routen und POIs. Ich kann eine Rundtour laufen, und der Inhalt darf nicht zum Polygon werden. Würde OL das Vorhandensein eines identischen Start- und Zielpunktes als Fläche interpretieren, würde ich das als Bug einstufen. Von daher wirst Du vermutlich Deine GPX Datei manuell auslesen, und diese Geodaten OL auf andere Weise servieren müssen.

Nahmd,

Ein Track aus einer GPX-Datei beschreibt auch wenn geschlossen immer eine Linie und keine Fläche. Als kurzfristigen Fix kannst Du das OpenLayers.Format.GPX so verhunzen, dass es alle Linien als Flächen darstellt:


format: new OpenLayers.Format.GPX({
        extractSegment: function(segment, segmentType) {
                var geometry = OpenLayers.Format.GPX.prototype.extractSegment.apply(this,arguments);
                return new OpenLayers.Geometry.LinearRing(geometry.components);
        }
})

Gruß Wolf

Erst einmal vielen Dank für eure Rückmeldung!

Der Gedanke, dass das GPX-Format nicht wirklich dafür geeignet ist, kam mir schon gestern. Eine Funktion für Polygone zu schreiben, schien mir aber relativ aufwendig. Ich habe mir dann noch mal das KML-Format angesehen. Dieser Link hat mir dabei besonders geholfen:

http://amorphe-welt.blogspot.de/2009/02/openlayers.html

Obwohl die Demo-Seite nicht mehr richtig funktioniert, habe ich jetzt endlich eine Lösung gefunden. Für die Kunden muss ich jetzt noch einen KML-Konverter schreiben, der die GPX-Daten in Flächen umwandelt. Das bekomme ich aber hin. Für mich hat jetzt ein einfaches JS-Script gereicht. Vielen Dank an alle!

Mir auch bereits beim ersten Lesen: “Was will der K… damit?” schoß mir durch den Kopf.

Nun mal lieb gefragt: was wolltest du damit anfangen? Um einen See gelaufen und den so in OSM eingeben oder irgendwo darstellen? Was anderes kann ich mir nicht vorstellen. Eventuell zeigst du meinen Gedanken die richtige Richtung :wink: Und wir finden eine Lösung.

Grübelnde Grüße
walter

Hallo Walter,

ich möchte bestimmte Flächen in einer OSM-Karte kennzeichnen. Mit GPX kann ich nur Konturen darstellen, dies wußte ich leider nicht, deshalb meine Anfrage. In dem geposteten Link habe ich eine Lösung mit KML gefunden:

http://amorphe-welt.blogspot.de/2009/02/openlayers.html

Falls ich weitere GPX-Daten als Fläche darstellen möchte, muss ich aber noch einen KML-Konverter z.B. in PHP schreiben, der die Daten umwandelt. Für eine Fläche habe ich das Fix mit Javascript gelöst, zumindestens für die Längen- und Breitenangaben.

Danke noch mal an alle!

VG Leonhard

OpenLayers unterscheidet zw.
LinearRing http://dev.openlayers.org/docs/files/OpenLayers/Geometry/LinearRing-js.html
als geschlossene Linie = Fläche , die auch gefüllt werden kann
und
LineString http://dev.openlayers.org/docs/files/OpenLayers/Geometry/LineString-js.html
als Kurve ( keine Fläche)

Danke an alle!