Das Beispiel für ein Klickereignis gibt Ihnen genau das, was Sie möchten.
OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {
defaultHandlerOptions: {
'single': true,
'double': false,
'pixelTolerance': 0,
'stopSingle': false,
'stopDouble': false
},
initialize: function(options) {
this.handlerOptions = OpenLayers.Util.extend(
{}, this.defaultHandlerOptions
);
OpenLayers.Control.prototype.initialize.apply(
this, arguments
);
this.handler = new OpenLayers.Handler.Click(
this, {
'click': this.trigger
}, this.handlerOptions
);
},
trigger: function(e) {
var lonlat = map.getLonLatFromViewPortPx(e.xy);
alert("You clicked near " + lonlat.lat + " N, " +
+ lonlat.lon + " E");
}
});
Bei Bedarf können Sie Koordinaten in Pixel konvertieren , um das Popup anzuzeigen.
Bearbeiten - um Koordinaten nur bei Auswahl der Funktion zu erhalten :
var options = {
onSelect: getCoordinates,
};
var selectEt = new OpenLayers.Control.SelectFeature(mylayer, options);
map.addControl(selectEt);
function getCoordinates(e) {
// this should work
var lonlat = map.getLonLatFromViewPortPx(e.xy);
alert("You clicked near " + lonlat.lat + " N, " +
+ lonlat.lon + " E");
}
Die API bietet keine Möglichkeit, die Klickposition vom
SelectFeature
Steuerelement abzurufen - sollte es aber. Es wäre eine triviale Ergänzung (xy
in diefeatureselected
Veranstaltung aufgenommen zu haben). Wenn Sie dies buchen, wäre dies der erste Schritt, um dies zu erreichen.In der Zwischenzeit können Sie über den vom
SelectFeature
Steuerelement verwendeten Feature-Handler auf das Mausereignis zugreifen . Vielleicht haben Sie einen Listener, der ungefähr so aussieht:Dies setzt (offensichtlich) voraus, dass Sie einen Verweis auf das
SelectFeature
Steuerelement und Ihre Karte haben.quelle
Ich konnte das Lat-Lon des Click-Ereignisses folgendermaßen abrufen:
Im
clickFeature
HandlerWo
selectFeatureReference
ist der Verweis auf dieSelectFeature
, die Sie erstellt haben.quelle
So habe ich es in Version 3.8.2 herausgefunden, um Koordinaten wie die folgenden zu erhalten:
[-1.1645507812500016, 53.2257684357902]
Wenn ich in Großbritannien herumklicke .
quelle
Sie können verwenden
feature.getBounds().getCenterLonLat()
. Funktioniert für Features vom Typ Punkt / Linie / Polygon. Und Sie müssen nicht wissen, was es ist, da es für alle funktioniert.quelle
Falls jemand wie ich über diese alte Frage stolpert, können Sie in der neuesten Version von OpenLayers zu diesem Zeitpunkt (3.20.0) die angeklickte Position ermitteln, indem Sie angeben,
e.mapBrowserEvent.coordinate
woe
sich das Select-Ereignis befindet.quelle