Как получить матрицу расстояний с вычислениями, выполняемыми в автономном режиме на моем сервере

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

В идеале я хочу иметь возможность отправлять GPS-координаты местоположений, использовать данные OpenStreetMap и получать на выходе матрицу расстояний с заданными местоположениями, все это будет выполняться в автономном режиме на моем сервере AWS. (Хорошо бы использовать PHP или C++)

Я действительно новичок в использовании OpenStreetMap. Я только что скачал ile-de-france.osm.pbf, карту региона Франции.

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


person Guy Daher    schedule 24.07.2014    source источник


Ответы (3)


OSRM имеет вызов матрицы расстояний, но в настоящее время он ограничен определенным количеством местоположений. Я создал скрипт для создания матриц больших расстояний с помощью локального сервера OSRM (его очень просто скомпилировать в Ubuntu). Вот это https://github.com/sabas/OSRMdistance. Я вычислил квадратные матрицы более чем 300 локаций...

person sabas    schedule 28.07.2014
comment
Это мило! Тем не менее, я использую AWS EC2 для своих серверов, и у меня было много проблем с созданием и запуском OSRM (EC2 основан на redhad/centOS), и в итоге я отказался :( Я мог бы попробовать Routino сейчас ( Если OSRM не сработает) - person Guy Daher; 28.07.2014
comment
На ec2 есть специальное руководство по компиляции, которое я пробовал на сервере, который, как мне кажется, некоторое время назад был основан на той же инфраструктуре github.com/Project-OSRM/osrm-backend/wiki/ - person sabas; 29.07.2014
comment
Именно то, что мне было нужно, большое спасибо за то, что поделились своим проектом! - person Guy Daher; 29.07.2014
comment
Я рад, что это помогло, если у вас есть какие-то улучшения или вы переписываете вещь по-другому, дайте мне знать... (было бы здорово посмотреть, есть ли более умные способы улучшить результаты, я в основном сделал скрипт грубой силы ) Например, делая это многопоточным способом. - person sabas; 29.07.2014
comment
Да, определенно, я посмотрю на это и внесу свой вклад, если смогу :) - person Guy Daher; 29.07.2014
comment
Есть вызов, который мы можем сделать, чтобы получить таблицу расстояний, которая дает время в пути в десятых долях секунды. Проверьте github.com/Project-OSRM/osrm-backend/wiki/Server. -api в конце страницы. Пример: сервер :5000/ - person Guy Daher; 31.07.2014
comment
github.com/Project-OSRM/osrm-backend/issues/1077 На данный момент максимум 100 пунктов назначения, как я сказал в ответе :-) Когда я найду время, я перекомпилирую свой OSRM и проверю, как он работает... - person sabas; 31.07.2014
comment
Большой! дайте мне знать, когда у вас будет обновление по этому поводу :) - person Guy Daher; 31.07.2014

Для расчета расстояний вам также необходимо установить маршрутизатор. Выберите один из доступных сетевых маршрутизаторов (многие из них можно установить локально и использовать в автономном режиме, тоже) или офлайн-маршрутизаторы. Хороший выбор: OSRM, GraphHopper и gosmore.

person scai    schedule 24.07.2014

Есть простая формула для расчета расстояния между двумя GPS-координатами. Например (вам может потребоваться обратить внимание на единицы измерения)

double t1 = sin(y1) * sin(y2);
double t2 = cos(y1) * cos(y2);
double t3 = cos(x1 - x2);
double t4 = t2 * t3;
double t5 = t1 + t4;
double rad_dist = atan(-t5/sqrt(-t5 * t5 +1)) + 2 * atan(1.0f);
double mile = rad_dist * 3437.74677 * 1.1508;
double meter = mile * 1609.3470878864446;

Чтобы найти расстояние ходьбы/автомобиля, вы разбиваете путь на контрольные точки, сопоставляя ближайшие «пути» в базе данных.

person Non-maskable Interrupt    schedule 24.07.2014
comment
Эта формула вычисляет расстояние между двумя точками, как если бы это была прямая линия. Я не об этом спрашиваю. Я спрашиваю больше о том, как использовать дороги OpenStreetMap между двумя точками, чтобы получить правильные измерения времени и расстояния, выполняя офлайн-вычисления на моем сервере. - person Guy Daher; 25.07.2014