2012-04-21 15 views
0

マップ上でマウスをクリックして座標を取得しようとしています。Openlayers - ピクセルからの座標が正しくない

マップをスクロールするまで、座標は正しく表示されます。その後、彼らは間違っている - 彼らはクリックの位置からシフトされます。ズームレベルを変更した場合、次の座標はマップが再びスクロールされるまで正しく表示されます。

まず、私は左に、上にスクロールして、そこをクリックした場合、それは私に負xyとのピクセルを与えるので、私は、getLayerPxFromViewPortPx返します誤った値を考えました。しかし、それはそれが動作する方法であり、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) 

失敗する可能性が他に何が?

+0

地図やレイヤの設定など、完全な例を教えてください。 –

+0

私は 'var lonlat = map.getLonLatFromViewPortPx(e.xy)'でgetLonLatFromPixel()を変更しました。しかし、私はまだ不思議なことに、前回の失敗はどうでしたか?完全な例については、こちらをご覧ください:http://dev.ivanatora.info/spirki/ –

答えて

1

getLonLatFromPixel()var lonlat = map.getLonLatFromViewPortPx(e.xy)に変更されました。しかし、私はまだ不思議なことに、前回の失敗はどうでしたか? init関数()

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

init関数で

0

アウト

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






} 

})。

関連する問題