Google Maps API V3 - отображение прогресса на маршруте - PullRequest
2 голосов
/ 14 февраля 2012

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

Зная LatLng текущей позиции и вооружившись массивом точек LatLng, использованных для создания оригинальной полилинии, как лучше всего создать второй маршрут 'Progess'?

Спасибовперед.

Ответы [ 2 ]

1 голос
/ 01 мая 2012

С несколькими допущениями:

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

.. один грубый путь будет следующим:

Используя псевдокод Python'y, скажем, у вас есть маршрут, подобный следующему:

points = [LatLng(1, 1), LatLng(2, 2), LatLng(3, 3), LatLng(4, 4)]

Вы рисуете это как PolyLine как обычно.

Тогда, учитывая ваше текущее положение, вы найдете ближайшую точку на маршруте:

cur_pos = LatLng(3.1, 3.0123)

nearest_latlng = closest_point(points, to = cur_pos)

Тогда nearest_latlng будет содержать LatLng(3, 3)

Найдите nearest_latlng в списке, затем просто нарисуйте вторую полилинию до этой точки. Другими словами, вы усекаете список points на текущем LatLng:

progress_points = [LatLng(1, 1), LatLng(2, 2), LatLng(3, 3)]

.. затем нарисуйте это на карте

Как уже упоминалось, это прервется, если путь вернется к себе (closest_point найдет только первую или последнюю точку)

Если вы знаете, как далеко пройдено, существует расширение epoly , которое дает несколько методов, которые можно использовать, в основном:

.GetIndexAtDistance(metres)
Returns the vertex number at or after the specified distance along the path.

Этот индекс можно использовать вместо closest_point, рассчитанного выше

0 голосов
/ 14 февраля 2012

Это будет действительно сложно, если у вас уже нет способа определить, что автомобиль уже прошел определенные баллы.Если вы знаете, что он прошел определенные точки, вы просто создаете вторую полилинию с пройденными точками и текущим маркером в качестве конца полилинии.Возможно, вы захотите изменить ширину ломаной линии, чтобы сделать ее видимой, когда она перекрывает начальный маршрут.

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

Надеюсь, это поможет несколько ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...