Это только теоретически, но, возможно, есть способ извлечь эти данные, используя distancematrix api.
Метод
1)
Создайте топологическую дорожную сеть с узлом и ребром примерно так:
Каждое ребро будет иметь четыре атрибута: [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.