You are not logged in.

Announcement

*** NOTICE: forum.openstreetmap.org is being retired. Please request a category for your community in the new ones as soon as possible using this process, which will allow you to propose your community moderators.
Please create new topics on the new site at community.openstreetmap.org. We expect the migration of data will take a few weeks, you can follow its progress here.***

#1 2013-06-16 20:59:53

Ghostrider82
Member
Registered: 2010-05-25
Posts: 132

onClick Event/Feature bei KML?

Hallo zusammen,

gibt es eine Möglichkeit, den Linien, die ich aus einer KML heraus generiere, ein Callback Event oder sowas zuzuweisen?

    var data =  new OpenLayers.Layer.Vector("KML", {
        style : style,
        strategies: [new OpenLayers.Strategy.Fixed()],
        protocol: new OpenLayers.Protocol.HTTP({
            url: "xml.php",
            format: new OpenLayers.Format.KML({
                extractStyles: true, 
                extractAttributes: true
            })
        })
  });

Ich bin für jeden Tip zu haben....ich suche mir schon die Finger wund.

Last edited by Ghostrider82 (2013-06-17 07:24:37)

Offline

#2 2013-06-16 21:43:36

wambacher
Member
From: Schlangenbad/Wambach, Germany
Registered: 2009-12-16
Posts: 16,769
Website

Re: onClick Event/Feature bei KML?

Ghostrider82 wrote:

Hallo zusammen,

gibt es eine Möglichkeit, den Linien, die ich aus einer KML heraus generiere, ein Callback Event oder sowas zuzuweisen?

    var data =  new OpenLayers.Layer.Vector("KML", {
        style : style,
        strategies: [new OpenLayers.Strategy.Fixed()],
        protocol: new OpenLayers.Protocol.HTTP({
            url: "http://www.yourgps.de/tests/longtrack/xml2.php",
            format: new OpenLayers.Format.KML({
                extractStyles: true, 
                extractAttributes: true
            })
        })
  });

Ich bin für jeden Tip zu haben....ich suche mir schon die Finger wund.

such dir was aus: http://openlayers.org/dev/examples/?q=click Dass die Daten per KML reinkommen , ist schnurzegal. Vektor ist Vektor.

Gruss
walter

Offline

#3 2013-06-17 09:16:44

Ghostrider82
Member
Registered: 2010-05-25
Posts: 132

Re: onClick Event/Feature bei KML?

Bitte entschuldige meine etwas plumpe Frageweise.

Ich habe nach diversen Tests und Herumsuchereien in irgendeinem Forenbeitrag gelesen, dass click-Events auf einem Vectorlayer gar nicht möglich sein.

Bevor ich dann aber weiter Stunden für eine Suche vergeude, die keine Ergebnisse liefert, habe ich gedacht: Ich frage hier.


Die auktuelle Lösung bei Verwendung einer GPX Datei sieht wie folgt aus:


var data =  new OpenLayers.Layer.Vector("GPX", {
        style : style,
        strategies: [new OpenLayers.Strategy.Fixed()],
        protocol: new OpenLayers.Protocol.HTTP({
            url: "gpx.gpx",
            format: new OpenLayers.Format.GPX()
        }),
        style: {strokeColor: "green", strokeWidth: 5, strokeOpacity: 0.5},
				projection: new OpenLayers.Projection("EPSG:4326")
  });

map.addLayer(layer_mapnik);
map.addLayer(data);

           selectControl = new OpenLayers.Control.SelectFeature(
                [data],
                {
                    clickout: true, toggle: false,
                    multiple: false, hover: false,
                    toggleKey: "ctrlKey", // ctrl key removes from selection
                    multipleKey: "shiftKey" // shift key adds to selection
                }
            );
            
            map.addControl(selectControl);
            selectControl.activate();
            
            map.setCenter(new OpenLayers.LonLat(0, 0), 3);
            
 
            data.events.on({
                "featureselected": function(e) {
                    showStatus("selected feature "+e.data.Name+" on Vector Layer 1");
                },
                "featureunselected": function(e) {
                    showStatus("unselected feature "+e.feature.id+" on Vector Layer 1");
                }
            });

Mal angenommen, das Format lautet:

<trkpt lat="49.771240" lon="8.814750">
<ele>188.520000</ele>
<time>2011-02-13T15:16:35.000Z</time>
</trkpt>

Wie kann ich nun per Click an <ele> herankommen?

Offline

#4 2013-06-17 10:40:56

maxbe
Member
Registered: 2010-01-19
Posts: 3,255
Website

Re: onClick Event/Feature bei KML?

Ghostrider82 wrote:

Wie kann ich nun per Click an <ele> herankommen?

Die dürfte bei Dir in e.feature.ele stehen. Frag doch mal Firebug innerhalb der featureselected-Funktion, was in "e" alles drin ist.

Mit KML hab ich wenig zu tun, aber bei GPX gehts relativ einfach, Clicks auszuwerten. Allerdings kenne ich das für GPX-Dateien nur bei Tracks und Waypoints, nicht bei einzelnen Trackpoints.

Ich denke, das Beispiel für GPX ist auf KML übertragbar: Man hat irgendein Element namens "name", "ele" (...) und übergibt das an die featureselected-Funktion. Dort schaut man dann in evt.feature.attributes.... nach seinen Elementen und gibt sie hübsch formatiert aus...

Grüße, Max

PS: Die Position des Popups beim Klick auf den Track muss man auch noch schöner machen. Der "Mittelpunkt" der Linie ist nicht das, was der klickende Anwender erwartet wink

Last edited by maxbe (2013-06-17 11:20:37)

Offline

#5 2013-06-17 11:17:16

Oranger Assistent
Member
Registered: 2013-04-07
Posts: 92

Re: onClick Event/Feature bei KML?

Tach.

Ghostrider82 wrote:

Mal angenommen, das Format lautet:

<trkpt lat="49.771240" lon="8.814750">
<ele>188.520000</ele>
<time>2011-02-13T15:16:35.000Z</time>
</trkpt>

Wie kann ich nun per Click an <ele> herankommen?

Deine Aufgabenstellung triff auf zwei Herausforderungen:

1. Der Selection-Mechanismus liefert jeweils den ganzen Track als Line-Feature und damit auch die Attribute des Tracks und nicht die der Track-Elemente.

2. Die für das Einlesen von Tracks zuständige Methode “extractSegment” der Klasse “OpenLayers.Format.GPX” nutzt aus den Trackpoint-Elementen nur die Koordinaten lon und lat. Die Höhe und alles andere gehen beim Einlesen verloren. Daher kommst Du an sie auch nicht heran. Watt fott es, es fott.

Ich sehe folgende Lösung: Du müsstest zum einen die “extractSegment”-Methode so modifizieren, dass sie die Attribute bewahrt, die Dich interessieren, und zum anderen bei einem Selection-Ereignis die Komponenten des übergebenen Line-Features durchsuchen nach der Komponente, die der Klick-Position am nächsten liegt, und deren Attribute für die Anzeige nutzen.

Das funktioniert, scheint mir aber zu kompliziert. Das sollte einfacher gehen.

Vieleicht kann ein OpenLayers-Kundiger eine bessere Lösung aufzeigen?

Der Assistent

Last edited by Oranger Assistent (2013-06-17 13:25:01)

Offline

#6 2013-06-17 12:42:06

wambacher
Member
From: Schlangenbad/Wambach, Germany
Registered: 2009-12-16
Posts: 16,769
Website

Re: onClick Event/Feature bei KML?

Ghostrider82 wrote:

Ich habe nach diversen Tests und Herumsuchereien in irgendeinem Forenbeitrag gelesen, dass click-Events auf einem Vectorlayer gar nicht möglich sein.

Ist zum Glück völliger Blödsinn, den du da irgendwo aufgeschnappt hast. Das Vektor-Layer ist - zumindest für mich - DAS Layer, mit dem man fast alles machen kann. Es kreisen zwar immer noch alte Beispiele und Hinweise rum, die aber alle von Vector "erschlagen" werden.

Bevor ich dann aber weiter Stunden für eine Suche vergeude, die keine Ergebnisse liefert, habe ich gedacht: Ich frage hier.

Das war und ist absolut ok so. Nur erkennt man nicht immer, ob ein  Laie/Newbie fragt, oder ob es doch ein "Wissender" ist. Da kommt dann schon mal leicht der Hinweis auf RTFM wink

Da die Kollegen meine Abwesenheit "ausgenutzt" haben, bist du ja schon gut beraten worden.

Gruss
walter

Offline

Board footer

Powered by FluxBB