Answers:
实际上,单击事件示例可为您提供所需的内容。
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
控件使用的功能处理程序上访问mouse事件。因此,您可能有一个看起来像这样的侦听器:
layer.events.on({featureselected: function(event) {
// should be event.xy, but it's not available currently
var pixel = control.handlers.feature.evt.xy;
var location = map.getLonLatFromPixel(pixel);
alert("You clicked near " + location);
});
显然,这假定您具有对SelectFeature
控件和地图的引用。
我可以使用以下方法获得click事件的延迟:
内部clickFeature
处理程序
var clickedlonlat =
Ext.getCmp("coreRef").parent.map.getLonLatFromPixel(
new OpenLayers.Pixel(
selectFeatureReference.handlers.feature.evt.layerX,
selectFeatureReference.handlers.feature.evt.layerY
));
您创建selectFeatureReference
的引用在哪里SelectFeature
。
map.on('click', function(evt){
console.log(ol.proj.transform(evt.coordinate, 'EPSG:3857', 'EPSG:4326'));
});
这是我在v3.8.2中弄清楚的方式,以便获得如下所示的坐标:
[-1.1645507812500016, 53.2257684357902]
单击英国附近时。
如果有人像我一样偶然发现这个老问题,那么在当前最新版本的OpenLayers(3.20.0)中,您可以使用Select事件e.mapBrowserEvent.coordinate
在哪里获得点击位置 e
。