На самом деле, пример события click дает вам то, что вы хотите.
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");
}
});
При необходимости вы можете преобразовать координаты в пиксели для отображения всплывающего окна.
Изменить - получить координаты только при выборе объекта :
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");
}
API не предоставляет способ получить местоположение щелчка от элемента
SelectFeature
управления - но он должен. Это было бы тривиальным дополнением (чтобыxy
включить вfeatureselected
событие). Если вы это сделаете, это будет первым шагом к тому, чтобы это произошло.В то же время вы можете получить доступ к событию мыши в обработчике объектов, используемом элементом
SelectFeature
управления. Итак, у вас может быть слушатель, который выглядит примерно так:Это предполагает (очевидно), что у вас есть ссылка на
SelectFeature
элемент управления и вашу карту.источник
Я смог получить информацию о событии click, используя следующее:
Внутри
clickFeature
обработчикгде
selectFeatureReference
ссылка на то,SelectFeature
что вы создали.источник
Вот как я понял это в v3.8.2, чтобы получить координаты, подобные следующим:
[-1.1645507812500016, 53.2257684357902]
когда я щелкаю по Великобритании.
источник
Вы можете использовать
feature.getBounds().getCenterLonLat()
. Работает для объектов типа точка / линия / полигон. И вам не нужно знать, что это такое, поскольку это работает для всех.источник
В случае, если кто-нибудь наткнется на этот старый вопрос, как я, в последнем выпуске OpenLayers в это время (3.20.0) вы можете получить позицию, по
e.mapBrowserEvent.coordinate
которой щелкнули, с помощью гдеe
находится событие Select.источник