2014-10-09 3 views
1

Я помещаю маркер на свою карту с перетаскиваемым свойством true. Я хочу ограничить движущийся маркер не более чем на 500 метров от исходного положения. Как мне это сделать? Есть ли лучший способ, которым я пытался?Ограничение движения маркера от начальной точки (API Google Maps 3)

Я пробовал с событием перетаскивания. Я измеряю расстояние с кодом I found on SO. Но я не знаю, как я могу предотвратить перетаскивание. Я пытаюсь вернуть false, попытаться просмотреть, отменяет ли параметр функции или что-то в этом роде.

google.maps.event.addListener(marker, 'drag', function(e) 
{ 
    var distance = Application.getMapDistance(data[0].geometry.location, marker.getPosition()); 
    document.title = distance; 
    if (distance > 500) 
     return false; //not working, e has no cancel or something like that 
}); 

Edit:

Видимо кто-то не доволен моим вопросом. Да, основная логика заключалась бы в том, чтобы установить положение маркера google в последний раз, но таким образом маркер мерцает, когда он перемещается за пределы. Я уверен, Google может сделать лучше, чем это.

google.maps.event.addListener(marker, 'drag', function(e) 
     { 
      var distance = Application.getMapDistance(data[0].geometry.location, marker.getPosition()); 
      document.title = distance; 
      if (distance > 500) 
       marker.setPosition(lastGoodPosition); 
      else 
       lastGoodPosition = marker.getPosition(); 
     }); 
+0

Вы пробовали просто сбросить положение маркеров, когда он потащил за пределами ваших границ? –

+0

Нет, я знаю, что есть лучший способ. При установке позиции маркера в новые координаты я ожидаю некоторого мерцания. – Makla

+0

Не разрабатывая свой класс маркеров и не перетаскивая реализацию, я не могу придумать лучшего способа. –

ответ

2

использование bounds = map.getBounds();

Тогда в случае маркер dragend, проверить, попадает ли новое местоположение в пределах определенных границ, и если нет, то вернуть маркер к последней сохраненной позиции:

google.maps.event.addListener (маркер, 'dragend', function() {

var position = marker.getPosition(); 
bounds.contains(position) ? lastPosition = position : marker.setPosition(lastPosition); 

});

установленный уровень масштабирования, как эти первоначальные карты имеет предел согласно вашему требованию

посмотреть дем на http://jsfiddle.net/upsidown/89DJC/

+0

границы получат мне квадрат, но мне нужен круг (радиус 500 м). Dragend не является решением, которое я ищу, потому что это путало бы пользователя, почему маркер изменился. Спасибо в любом случае. – Makla

Смежные вопросы