Использование API Google Maps для определения средней скорости в определенном месте - PullRequest
1 голос
/ 09 ноября 2010

Я пытаюсь узнать текущие условия движения в определенном месте. Упомянутый объект GTrafficOverlay здесь обеспечивает только наложение на существующую карту.

Кто-нибудь знает, как я могу получить эти данные от Google, используя их API?

Ответы [ 2 ]

0 голосов
/ 22 августа 2018

Это только теоретически, но, возможно, есть способ извлечь эти данные, используя distancematrix api.

Метод

1)

Создайте топологическую дорожную сеть с узлом и ребром примерно так:

enter image description here

Каждое ребро будет иметь четыре атрибута: [EDGE_NUMBER;EDGE_SPEED;EDGE_TIME,EDGE_LENGTH] Вы можете использовать данные openstreetmap для создания этой сети. В начале каждый край будет иметь одинаковую скорость движения, например, 50 км / ч. Вам нужно использовать только drivelink и удалить другие края. Примите также во внимание, что некоторые дороги являются односторонними.

2)

Случайно выбрал два узла, которые не ближе 5 или 10 км

  • Используйте алгоритм кратчайшего пути dijsktra для вычисления кратчайшего пути между этими двумя узлами (стоимость = EDGE_TIME). Используйте свою топологическую сеть, чтобы сделать это. Вывод будет выглядеть так:

    NODE = [NODE_23, NODE_44] PATH = [EDGE_3, EDGE_130, EDGE_49, EDGE_39]

  • Рассчитайте время, необходимое для проезда между двумя узлами, с помощью матрицы расстояний api.

Предварительно выделить матрицу A размера N X number_of_edge, заполненную нулевым значением Предварительно выделить матрицу B размером 1 X number_of_edge, заполненную нулевым значением

В первой строке матрицы A заполните каждый столбец (соответствующий каждому ребру) длиной ребра, если соответствующее ребро находится в пути.

[col_1,col_2,col_3,...,col_39,...,col_49,...,col_130]
[0,    0,    len_3,...,len_39,...,len_49,...,len_130] %row 1

В первой строке матрицы B укажите время, рассчитанное с помощью матрицы расстояний api.

Затем выберите два узла новостей, которые не использовались в первом пути, и повторяйте операцию до тех пор, пока не останется ни одного узла. (чтобы вы заполнили строку 2, строку 3 ...)

Теперь вы можете решить систему линейных уравнений: Ax = B, где speed = 1/x

Назначьте новую расчетную скорость каждому ребру.

3)

Повторять точку 2) до тех пор, пока расчетная скорость не начнет сходиться.

Комментарий

Я не уверен, что расчетная скорость будет сходиться, будет интересно проверить метод. Я постараюсь сделать это, если у меня будет время. Матрица расстояний api не обеспечивает время в пути более точного, чем 1 минута, поэтому расстояние между парой узлов должно быть не менее 5 или 10 или более км. Также этот метод не соответствует условиям обслуживания Google.

0 голосов
/ 09 ноября 2010

Google не предоставляет общедоступный API для этих данных.

У Yahoo есть фид ( пример ) с условиями дорожного движения - строительство, аварии и тому подобное.Описание того, как получить к нему доступ: здесь .

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

...