2012-04-21 4 views
0

Я пытаюсь получить координаты с щелчка мышью на карте.Openlayers - координаты с неправильного пикселя

Координаты направо, пока я не прокручу карту. После этого они ошибаются - они сдвинуты с позиции щелчка. Если я изменю масштабный уровень, следующие координаты будут правы, пока я снова не прокручу карту.

Сначала я думал, что getLayerPxFromViewPortPx возвращает неправильное значение, потому что если я прокручивать влево и к вершине и нажмите там она дает мне пиксель с отрицательным x и y. Но я полагаю, что это так, как это работает, и x и y относятся к центру слоев.

Вот что у меня есть:

 
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

Я изменил getLonLatFromPixel() с помощью 'var lonlat = map.getLonLatFromViewPortPx (e.xy)', и теперь это похоже на работу. Однако мне все еще любопытно, почему предыдущая неудача. О полном примере вы можете найти здесь: http://dev.ivanatora.info/spirki/ –

ответ

1

Я изменил getLonLatFromPixel() с var lonlat = map.getLonLatFromViewPortPx(e.xy) и теперь он кажется рабочим. Однако мне все еще любопытно, почему предыдущая неудача.

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






} 

});