перемещение маркера с открытыми слоями только для точного на определенном уровне масштабирования - PullRequest
3 голосов
/ 02 марта 2011

Я работаю над тем, чтобы пользователи могли перемещать маркер без перетаскивания.Обычно пользователь нажимает на маркер, и он открывает всплывающее окно с информационным окном.В пузыре есть ссылка на функцию JavaScript, которая устанавливает событие клика на карте.Когда пользователь щелкает где-то на карте, он должен переместить маркер в точку, которую щелкнули.

На моей карте 18 уровней масштабирования.На уровне масштабирования 15 этот процесс работает отлично.Если я увеличу масштаб ПОСЛЕ щелчка один раз, маркер все еще перемещается точно в то место, где я щелкаю.Но затем, если я обновлюсь и начну сначала с уровня масштабирования 16 и попытаюсь щелкнуть где-нибудь, маркер переместится в положение выше и больше влево.Повторяя этот процесс при более высоких уровнях масштабирования, маркер перемещается еще больше вверх и влево на карте (по расстоянию).

Выполнение вышеизложенного при уровнях масштабирования ниже 15 также отлично работает.

Вот фрагмент кода:

lmLayer = new OpenLayers.Layer.Markers("Landmark Creation");
map.addLayer(lmLayer);
var marker = landmark['landmark_1234'];// this just pulls the marker out of storage
map.events.register("click", lmLayer, function(evt){
    var pixel = new OpenLayers.Pixel(evt.clientX,evt.clientY);
    marker.moveTo(pixel);
    OpenLayers.Event.stop(evt);
});

Я отключил консоль, выполнив щелчки clientX и clientY, и они зарегистрировали правильные координаты x / y от левого и верхнего краев браузера.Но кажется, что OL неправильно рассчитывает moveTo при уровнях масштабирования выше 15.

Есть идеи?

1 Ответ

1 голос
/ 08 марта 2011

небольшой обходной путь в ожидании исправления ошибки

lmLayer = new OpenLayers.Layer.Markers("Landmark Creation");
map.addLayer(lmLayer);
var marker = landmark['landmark_1234'];

map.events.register("click", lmLayer, function(evt){
    var pixel = new OpenLayers.Pixel(evt.clientX,evt.clientY);
    marker.lonlat = pixel;
    marker.moveTo(pixel);
    // workaround
    marker.draw();
    lmLayer.redraw();
    OpenLayers.Event.stop(evt);
});

Cheers, J.

...