W rzeczywistości próbka zdarzenia kliknięcia daje Ci to, czego chcesz.
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");
}
});
W razie potrzeby możesz przekonwertować współrzędne na piksele, aby wyświetlić wyskakujące okienko.
Edytuj - aby uzyskać współrzędne tylko po wybraniu obiektu :
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");
}
Interfejs API nie zapewnia sposobu uzyskania lokalizacji kliknięcia z
SelectFeature
kontrolki - ale powinien. Byłby to trywialny dodatek (doxy
uwzględnienia wfeatureselected
wydarzeniu). Jeśli to zrobisz, będzie to pierwszy krok do tego, aby tak się stało.W międzyczasie możesz uzyskać dostęp do zdarzenia myszy w module obsługi funkcji używanym przez
SelectFeature
kontrolkę. Możesz mieć słuchacza, który wygląda mniej więcej tak:Zakłada się (oczywiście), że masz odniesienie do
SelectFeature
kontrolki i mapy.źródło
Udało mi się uzyskać lat lon zdarzenia kliknięcia, wykonując następujące czynności:
Wewnątrz
clickFeature
obsługigdzie
selectFeatureReference
jest odniesienie doSelectFeature
utworzonego przez Ciebie.źródło
Właśnie tak to wymyśliłem w wersji 3.2.2, aby uzyskać współrzędne w następujący sposób:
[-1.1645507812500016, 53.2257684357902]
kiedy klikam w Wielkiej Brytanii.
źródło
Możesz użyć
feature.getBounds().getCenterLonLat()
. Działa dla funkcji typu punkt / linia / wielokąt. I nie musisz wiedzieć, co to jest, ponieważ działa dla wszystkich.źródło
W przypadku, gdy ktoś natknie się na to stare pytanie, tak jak ja, w najnowszej wersji OpenLayers w tym czasie (3.20.0) możesz uzyskać pozycję kliknięcia, używając
e.mapBrowserEvent.coordinate
gdziee
jest zdarzenie Select.źródło