我试图通过鼠标点击地图来获取坐标。
坐标是正确的,直到我滚动地图。之后他们错了 - 他们从点击的位置移开。如果我更改了缩放级别,则下一个坐标是正确的,直到我再次滚动地图。
首先我认为getLayerPxFromViewPortPx
返回了错误的值,因为如果我向左滚动并向上滚动并点击那里,它会给我一个负数x
和y
的像素。但我认为这是它的工作方式,x
和y
相对于图层中心。
这就是我所拥有的:
map.events.register("click", map, function(e){ var opx = map.getLayerPxFromViewPortPx(e.xy) ; var lonlat = map.getLonLatFromPixel(opx); console.log(lonlat) var marker = new OpenLayers.Marker(lonlat); markers.addMarker(marker)
还有什么可能失败?
答案 0 :(得分:1)
我用getLonLatFromPixel()
更改了var lonlat = map.getLonLatFromViewPortPx(e.xy)
,现在看起来很有效。但是我仍然很好奇为什么之前的失败。
答案 1 :(得分:0)
在init函数()
中 var click = new OpenLayers.Control.Click();
map.addControl(click);
click.activate();
初始化功能
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.getLonLatFromPixel(e.xy);
N = lonlat.lat;
E = lonlat.lon;
alert("Bu koordinatlar civarındasınız: " + N + " N, " + E + " E");
}
});