2013-02-21 2 views
2

Спасибо за ваше время.Указания API Карт Google пересчитываются при перетаскивании

Коротко:

  • Google Maps API V3 проекта
  • Нажмите на карту, чтобы поместить маркеры
  • Схема проезда Сервис вычисляет маршрут между двумя последовательными точками

Цель:

Пересчитать маршрут, когда один из маркеров перетаскивается.

Прогресс:

До сих пор я собрал эту страницу: http://test.bluecactus.ro/gmaps.html. Я прокомментировал большую часть кода.

Проблема:

Страница работает нормально для первого сопротивления. Когда я перетаскиваю второй маркер или снова перетаскиваю первый, полилинии больше не «регенерируются» так, как они должны быть (удалять входящие и исходящие, вычислять из новой позиции, график на карте).

Для множественного перетаскивания на одном и том же маркере на карте останутся некоторые полилинии, которые необходимо удалить. При перетаскивании второго маркера удаляются неправильные полилинии.

Это заставило меня поверить, что что-то не так с определением позиции перетаскиваемого маркера в массиве, который содержит все маркеры; функция ниже. Я переделал «математику» несколько раз - на бумаге это кажется ОК. Я попытался поставить все за пределами для цикла и использовать цикл, чтобы идентифицировать позицию в глобальной переменной. Ни один из них не работал.

http://test.bluecactus.ro/gmaps.html

google.maps.event.addListener(marker, 'dragend', function(event) { //ondrag 
    for (var i = 0; i < gmarkers.length; i++) { 
     if(gmarkers[i].getPosition() == marker.getPosition()) { //find out array position of current marker 
     console.log("i = " + i); 
     //hide incoming and outgoing polylines; polylines index offset by -1 (n markers => n-1 polylines) 
     gpolys[i-1].setMap(null); 
     gpolys[i].setMap(null); 
     drawPath(gmarkers[i-1].getPosition(), marker.getPosition()); //calculate route between moved marker and previous point 
     drawPath(marker.getPosition(), gmarkers[i+1].getPosition()); //calculate route between moved marker and next point 
     //overwrite initial polylines; drawPath function automatically adds new polylines to end of gpolys array 
     gpolys[i-1] = gpolys[gpolys.length-2]; 
     console.log(gpolys); 
     gpolys[i] = gpolys[gpolys.length-1]; 
     console.log(gpolys); 
     //delete last 2 elements from gpolys 
     gpolys.pop(); 
     console.log(gpolys); 
     gpolys.pop(); 
     console.log(gpolys); 
     } 
    } 
}); 

Примечания:

  • Первый и последний маркер не будет работать, они не рассматриваются на данный момент.
  • Я нашел несколько обходных путей: на перетаскивании пересчитайте весь маршрут - возьмите все маркеры в массиве и график между i & i + 1; однако это работает только для небольших маршрутов и без перетаскивания - в противном случае OVER_QUERY_LIMIT будет поражен. Может быть разрешено с задержкой между вызовами, но кажется странным пересчитывать все каждый раз только для одной точки.

Я чувствую, что я близок к решению, но не могу его понять. Любые предложения будут ценны. Спасибо.

+0

это вопрос ??? – Usman

+0

Он находится в разделе «Проблема». Извините, я сделаю это более ясным: что я делаю неправильно в функции dragend (или, возможно, где-то в другом месте), так как пойнты не перерисовываются так, как должны быть? – deep42

+0

Мне показалось, что я ошибаюсь, поэтому я переделал карту с помощью стандартного DirectionService (вызовите службу, сохраните сгенерированную полилинию в массиве и наложите ее на карту). Тем не менее, у меня все еще есть проблемы при перетаскивании, потому что он возвращается к исходным направлениям: http://test.bluecactus.ro/gmaps2.html. Какие-либо предложения? спасибо – deep42

ответ

0

Вам не нужно самостоятельно осуществлять перетаскивание, это уже часть JavaScript API v3 с 2010 года. Вы можете иметь маркеры на путевых точках, но любая точка маршрута перетаскивается.

https://developers.google.com/maps/documentation/javascript/examples/directions-draggable https://developers.google.com/maps/documentation/javascript/directions#DraggableDirections

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