Привязка к ближайшей улице - PullRequest
5 голосов
/ 30 апреля 2009

Вы, ребята, помогали решить некоторые из моих проблем с Google Map в последнее время, и спасибо вам за это.

Я почти закончил с этим - осталась только одна проблема. Когда я помещаю первый маркер на карту, он привязывается к ближайшей улице (что хорошо!), Но когда я перетаскиваю первый маркер в другое место, направления внезапно путаются. А маркеры получают миксы.

Вы можете увидеть пример на http://dev.korebogen.dk/gmap/

Мне нужно сделать возможным перемещение первого маркера (все еще привязывается), и когда я размещаю второй маркер, сначала загружаются направления. Но чтобы снова сделать первый маркер, мне нужно загрузить направления.

Надеюсь, у некоторых из вас есть решение. Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 30 апреля 2009

Команда Javascript сообщества Blackpool Community Church имеет отличный пример именно этого ( прямая ссылка на четвертый пример ). Посмотрите и их другие примеры.

(отказ от ответственности: я не связан с ними, но многое узнал о GMaps из их примеров)

Edit: Я подозреваю, что события карты запускаются примерно так (псевдокод, для реальных имен событий и т. Д. Проверьте документы GMaps):

  • клик по карте: mousedown, mouseup, клик: {установить красный маркер}
  • перетаскивание красного маркера: mousedown, dragstart {красный маркер}, mouseup, нажатие: {установить маркер b} (mousedown + mouseup), dragend
  • оба маркера установлены? Да, проложить маршрут

Что я бы посоветовал: в функциях перетаскивания red-marker и marker-A установите флаг «перетаскивание маркера», сбросьте его в функции драгендинга; в функции «Установить маркер B» установите маркер, только если мы НЕ перетаскиваем что-либо (флаг не установлен).

2 голосов
/ 30 апреля 2009

Код, который я дал вам ранее, прослушал первые два клика и добавил маркер для каждого. Проблема в том, что когда вы перетаскиваете первый маркер, он снова вызывает событие «click» - и, таким образом, добавляет еще один маркер в том же месте.

К счастью, событие click позволяет узнать, был ли выбран оверлей. Поэтому выполняйте только тот код, который добавляет новый маркер, если наложение равно нулю. Обратите внимание, что оверлей не является логическим значением.

var listener = GEvent.addListener(map, "click", function(overlay, latlng) {
  if (overlay == null) {
    // code to add new marker
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...