Получить точные геокоординаты по всему маршруту, Google Maps или OpenStreetMap
Предположим, у меня есть маршрут, определенный из одного города в другой. Из API Карт Google я могу восстановить маршрут между ними. Тем не менее, маршрут, возвращенный из Google, является маршрутом вождения, который включает в себя геокоординаты только в местах, где есть еще один шаг в ноге (например, когда мне приходится поворачиваться с одного шоссе на другое).
Мне нужны гео-местоположения (лат/долго) по всему маршруту с определенными интервалами (например, каждые 1/4 мили или 100 м).
Есть ли способ выполнить это с помощью API Карт Google/веб-служб?
Или может ли база OpenStreetMap быть способ сделать это?
С уважением,
Мадлен.
Ответы
Ответ 1
OSRM дает вам маршруты с геометриями дороги, как они есть в базе данных OpenStreetMap. Например, вы можете получить маршрут как GPX (и после этого обработать этот файл, если хотите). Это будет выглядеть следующим образом:
GET http://router.project-osrm.org/viaroute?hl=en&loc=47.064970,15.458470&loc=47.071100,15.476760&output=gpx
Подробнее: Документы API OSRM.
Ответ 2
Это просто метод google.maps.DirectionsService(). route(). Вам необходимо передать запрос на обслуживание, а затем обратный вызов, который выполняется после завершения запроса службы.
https://developers.google.com/maps/documentation/javascript/directions
Ответ 3
Добавление к ответу Марлио.
Вы можете использовать API Google Maps Directions.
Для данного источника и адресата в выводе JSON найдите следующее:
"polyline" : {
"points" : ""
}
Вы можете использовать декодер для получения координат из полилинии.
https://github.com/emcconville/google-map-polyline-encoding-tool
Или. вы можете использовать пакет googleway в R для декодирования.
https://cran.r-project.org/web/packages/googleway/googleway.pdf
Я не уверен, как установить разрешение на нужный уровень. Но разрешение на выходе API действительно хорошее.
Ответ 4
Поскольку принятый ответ устарел и больше не работает, вот как можно отслеживать все узлы вдоль дороги с помощью службы маршрута от Проект OSRM.
Для произвольного количества пар lon, lat.
Для экземпляра следующие три (в Берлине):
- 13.388860,52.517037
- 13.397634,52.529407
- 13.428555,52.523219
Служба маршрута рассчитывает самый быстрый маршрут между этими точками и его возможное возвращение всех узлов вдоль дороги, используя следующий запрос:
http://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.397634,52.529407;13.428555,52.523219?alternatives=false&annotations=nodes
Это возвращает ответ json, содержащий node идентификаторы всех узлов вдоль маршрута. Результат должен выглядеть примерно так:
{
"routes": [
{
...
"legs": [
{
"annotation": {
"nodes": [
2264199819,
2045820592,
21487242,
...
]
}
Для получения lat, lon координат узлов OverpassAPI можно использовать.
[out:json];
(
node(264199819);
node(...);
node(...);
...
);
(._;>;);
out;
Вот пример запроса с использованием overpass-turbo: http://overpass-turbo.eu/s/toe