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
SelectFeaturecontrol, pero debería. Sería una adición trivial (haberxyincluido en elfeatureselectedevento). 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
SelectFeaturecontrol. Entonces, es posible que tenga un oyente que se vea así:Esto supone (obviamente) que tiene una referencia al
SelectFeaturecontrol y su mapa.fuente
Pude obtener el último tiempo del evento de clic usando lo siguiente:
Dentro del
clickFeaturecontroladordonde
selectFeatureReferenceestá la referencia alSelectFeatureque 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.coordinatedóndeeestá el evento Seleccionar.fuente