0

我正在尝试通过在地图上单击鼠标来获取坐标。

在我滚动地图之前,坐标是正确的。之后它们是错误的 - 它们从点击的位置移动。如果我改变缩放级别,下一个坐标是正确的,直到我再次滚动地图。

首先我认为getLayerPxFromViewPortPx返回错误的值,因为如果我滚动到左侧和顶部并单击那里,它会给我一个带有负x和的像素y。但我想这是它的工作方式,并且xy图层中心相关。

这是我所拥有的:

map.events.register("点击", map, function(e){
        var opx = map.getLayerPxFromViewPortPx(e.xy) ;
        var lonlat = map.getLonLatFromPixel(opx);
        控制台日志(lonlat)

        var marker = new OpenLayers.Marker(lonlat);
        标记.addMarker(标记)

还有什么可能失败?

4

2 回答 2

1

I changed getLonLatFromPixel() with var lonlat = map.getLonLatFromViewPortPx(e.xy) and now it seems working. However I'm still curious why did the previous fail.

于 2012-09-20T12:17:29.893 回答
0

在初始化函数()中

 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");






}

});

于 2013-08-27T15:31:42.510 回答