首页 文章

Openlayers - 像素坐标不正确

提问于
浏览
0

我正试图通过鼠标点击 Map 获取坐标 .

坐标是正确的,直到我滚动 Map . 之后他们错了 - 他们从点击的位置移开 . 如果我更改了缩放级别,则下一个坐标是正确的,直到我再次滚动 Map .

首先我认为 getLayerPxFromViewPortPx 返回错误的值,因为如果我向左滚动并向上滚动并点击那里它会给我一个负 xy 的像素 . 但我认为这是它的工作方式, xy 是相对于图层中心 .

这是我有的:

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)

还有什么可能失败?

2 回答

  • 1

    我用 var lonlat = map.getLonLatFromViewPortPx(e.xy) 更改了 getLonLatFromPixel() ,现在看起来很有效 . 但是我仍然很好奇为什么之前的失败 .

  • 0

    在init函数中()

    var click = new OpenLayers.Control.Click();
    map.addControl(click);
    click.activate();
    

    init函数输出

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

    });

相关问题