0

地図上でマウスをクリックして座標を取得しようとしています。

地図をスクロールするまで座標は正しいです。その後、それらは間違っています-クリックの位置からシフトされます。ズームレベルを変更すると、マップをもう一度スクロールするまで次の座標が正しくなります。

最初にgetLayerPxFromViewPortPx、間違った値が返されると思いました。左と上にスクロールしてそこをクリックすると、負の値xとが表示されるピクセルが表示されるためyです。しかし、私はそれが機能する方法でありxyレイヤーの中心に相対的であると思います。

これが私が持っているものです:

map.events.register( "click"、map、function(e){
        var opx = map.getLayerPxFromViewPortPx(e.xy);
        var lonlat = map.getLonLatFromPixel(opx);
        console.log(lonlat)

        varmarker = new OpenLayers.Marker(lonlat);
        マーカー.addMarker(マーカー)

他に何が失敗している可能性がありますか?

4

2 に答える 2

1

私はで変更getLonLatFromPixel()しました、var lonlat = map.getLonLatFromViewPortPx(e.xy)そして今それは働いているようです。しかし、なぜ前のものが失敗したのか、私はまだ興味があります。

于 2012-09-20T12:17:29.893 に答える
0

init function()

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

init関数out

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 に答える