En realidad, la muestra de evento de clic te da lo que quieres.
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");
}
});
Si es necesario, puede convertir coordenadas a píxeles para mostrar la ventana emergente.
Editar: para obtener coordenadas solo al seleccionar la función :
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");
}
La API no proporciona una forma de obtener la ubicación del clic desde el
SelectFeature
control, pero debería. Sería una adición trivial (haberxy
incluido en elfeatureselected
evento). Si usted registra esto, sería el primer paso para hacerlo realidad.Mientras tanto, puede acceder al evento del mouse en el controlador de funciones utilizado por
SelectFeature
control. Entonces, es posible que tenga un oyente que se vea así:Esto supone (obviamente) que tiene una referencia al
SelectFeature
control y su mapa.fuente
Pude obtener el último tiempo del evento de clic usando lo siguiente:
Dentro del
clickFeature
controladordonde
selectFeatureReference
está la referencia alSelectFeature
que creaste.fuente
Así es como lo descubrí en v3.8.2 para obtener coordenadas como las siguientes:
[-1.1645507812500016, 53.2257684357902]
cuando hago clic en Reino Unido.
fuente
Puedes usar
feature.getBounds().getCenterLonLat()
. Funciona para características de tipo punto / línea / polígono. Y no tiene que saber qué es, ya que funciona para todos.fuente
En caso de que alguien tropiece con esta vieja pregunta como lo hice yo, en la última versión de OpenLayers en este momento (3.20.0) puede obtener la posición en la que se hizo clic usando
e.mapBrowserEvent.coordinate
dóndee
está el evento Seleccionar.fuente