2012-04-21 6 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)으로 변경되었으며 현재 작동 중입니다. 그러나 나는 아직도 궁금해하던 이유가 이전에 실패했습니다. 초기화() 함수

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






} 

});

관련 문제