Расчет времени поездки с использованием доступных API geo для адресов 5k+



Я работаю над транспортной моделью и собираюсь построить матрицу времени в пути между 5000 точками. Есть ли бесплатный, полу-надежный способ рассчитать время перемещения между всеми моими узлами?



Я думаю, что google maps имеет ограничение на количество запросов / обращений, которых я могу достичь.



EDIT



Я хотел бы использовать api, такие как google maps или аналогичные, поскольку они включают такие данные, как направление движения, количество полос движения, скорость движения, тип дороги и т. д ...



EDIT 2



Обратите внимание, что картографические данные openstreet неполны и доступны не для всех юрисдикций за пределами США
754   5  

5 ответов:

Google Directions API ограничивает вас до2500 звонков в день . Кроме того, условия предоставления услуг предусматривают, что вы должны использовать сервис только "в сочетании с отображением результатов на карте Google".

Вас может заинтересовать OpenTripPlanner, проект в разработке, который может выполнять мультимодальную маршрутизацию, и Graphserver, на котором построен OpenTripPlanner.

Один из подходов заключается в использованииOpenStreetMap данных с Graphserver для генерациидеревьев кратчайших путей из каждого узла.

Поскольку это 12 502 500 общих подключений, я уверен, что вы достигнете некоторого предела, если попытаетесь использовать Google maps для всех из них. Насколько точные результаты вам нужны/как далеко вы путешествуете?

Я мог бы попытаться создать грубую карту со скоростями движения на ней (например, отмечать межштатные расстояния как быстрые, яд-яд-яд), а затем использовать какое-то программное обеспечение, чтобы вычислить, сколько времени это займет от точки до точки. Можно представить себе это как проблему электромагнитных полей, где вы пытаетесь вычислите сопротивление от точки к точке на плоскости с переменным сопротивлением (промежуточные состояния-провода, озера-разомкнутые цепи...).

Если вам действительно нужны все эти маршруты, точно рассчитанные и сохраненные в вашей базе данных, похоже (и я бы поверил), что вам придется потратить деньги, чтобы получить это. Как вы можете себе представить, это дорого для разработки, и должна быть перенумеровка.

Я бы, однако, немного исследовал вашу проблему:

  • вам действительно нужны все 5000! расстояния в базе данных? Что делать, если вы запросили их у google, когда они вам нужны, а затем кэшировали их (если это разрешено). У меня были такие веб-приложения, что из-за медленного увеличения трафика я смог использовать БЕСПЛАТНЫЕ сервисы на ранней стадии, чтобы проверить эту идею.
  • вам действительно нужны все 5000 очков? Или вы могли бы выбрать топ-100 и иметь более сговорчивую проблему?
  • Возможно, есть какой-то гибрид, где вы сохраняете расстояния между большими городами и делаете больше оценок для более коротких расстояний.

Опять же, я действительно не знаю, в чем ваша проблема, но, возможно, думаю немного нестандартно поможет вам найти более простое решение.

Возможно, вам придется пойти на некоторые эвристики здесь. Возможно, вы можете оценить время в пути, основываясь на нескольких факторах, таких как геометрическое расстояние и некоторые особенности о начальной и конечной точках (городские и сельские районы, страна, ...). Вы можете получить несколько расстояний, попытаться подогнать свои параметры к подмножеству из них и посмотреть, насколько хорошо вы можете предсказать другие. Например, я могу предсказать, что время в пути во многих случаях приближается к линейной зависимости от расстояния по мере увеличения расстояния.

Я знаю, что это грязно, но эй, вы пытаетесь оценить 12,5 миллионов точек данных (или независимо от их количества :)

Вы также можете постепенно добавлять знания из уже полученного "реального" времени путешествия, находя точки, близкие к тем, которые вы ищете:

  • получить ближайшие точки StartApprox, EndApprox к начальной и конечной позиции таким образом, что у вас есть время в пути между StartApprox и EndApprox
  • вычисляют расстояния StartError, EndError между началом и StartApprox, end и EndApprox
  • Если Starterr+Enderr>расстояние (StartApprox, EndApprox) * 0.10 (или независимо от вашего порога) - > вычислить расстояние через API (и сохранить его), в противном случае используйте известное время в пути плюс время накладных расходов на основе Starterr+Enderr

(если у вас есть 100 адресов в NY и 100 в SF, все значения будут более или менее одинаковыми (т. е. разница между ними, вероятно, меньше, чем неопределенность, связанная с этими предсказаниями), и такой подход будет держать вас от выдачи 10000 запросов, где 1 сделал бы)

Многие программные пакеты ГИС имеют алгоритмы маршрутизации, если у вас есть данные... Транспортные данные могут быть довольно затратными.

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

Вот некоторые другие варианты из quick поиск Google: Википедия Route66 Грузовые Мили

Comments

    Ничего не найдено.