Спасибо за ваше время.Указания 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 будет поражен. Может быть разрешено с задержкой между вызовами, но кажется странным пересчитывать все каждый раз только для одной точки.
Я чувствую, что я близок к решению, но не могу его понять. Любые предложения будут ценны. Спасибо.
это вопрос ??? – Usman
Он находится в разделе «Проблема». Извините, я сделаю это более ясным: что я делаю неправильно в функции dragend (или, возможно, где-то в другом месте), так как пойнты не перерисовываются так, как должны быть? – deep42
Мне показалось, что я ошибаюсь, поэтому я переделал карту с помощью стандартного DirectionService (вызовите службу, сохраните сгенерированную полилинию в массиве и наложите ее на карту). Тем не менее, у меня все еще есть проблемы при перетаскивании, потому что он возвращается к исходным направлениям: http://test.bluecactus.ro/gmaps2.html. Какие-либо предложения? спасибо – deep42