Как использовать функцию привязки к дороге с помощью OSRM? - PullRequest
0 голосов
/ 11 июля 2019

В настоящее время я работаю с OSRM и использовал некоторые данные GPS для тестирования, которые я сгенерировал с помощью googles Утилита Interactive Polyline Encoder https://developers.google.com/maps/documentation/utilities/polylineutility

Концепция, которую я собираюсь использовать, заключается в том, что автомобиль едет по улице, отправляя каждые20 секунд его местоположение GPS.Я хочу отобразить путь и километры, которые он проехал в конце своего путешествия.

Я настроил клиента в C #, выполняя запрос GET с алгоритмом сопоставления, для связи с API-интерфейсом на открытом бэкенде демосервера http://router.project -osrm.org

Проблема в том, что я не могу использовать алгоритм сопоставления, потому что он берет только две точки GPS вместо полилинии, состоящей из нескольких местоположений GPS.Для меня это не имеет смысла.

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

enter image description here

http://router.project-osrm.org/match/v1/driving/13.682632,47.393753;13.6849281,47.3935649?overview=full&radiuses=49;49

Я также нашел несколько приличныхблоги и веб-сайты, которые говорят мне, что я должен использовать алгоритм сопоставления OSRM в качестве инструмента привязки к дороге.Вот один из них: https://www.jamesrcroft.com/2015/06/snapping-gps-tracks-to-roads/

Я также попробовал метод маршрута, который в соответствии с вики OSRM находит самый быстрый маршрут между координатами в указанном порядке.Это не совсем то, что я хочу.По крайней мере, это может занять ломаную линию местоположений GPS, но она всегда была чрезвычайно неточной и неисправной.

Это запрос GET для маршрута метода, который я использовал:

Рисунок того, как он выглядел до OSRM, это немного неточно, поэтому я хочу, чтобы его привязали к дороге:

enter image description here

string polyline = @"kz~dHclrbBbAfAn@iBb@{Cf@aBXkA_@s@m@i@_A}@c@c@Fu@Tq@ZWXT";
string.Format("http://router.project-osrm.org/route/v1/driving/polyline({0})?overview=full", polyline);

В ответ я получил эту ломаную линию в геометрии атрибута:

mz~dHalrbB`@b@XZFFFHBK@CBI@E\\uA\\mA?[?SH[Ru@Nm@XkAFOg@a@m@g@AA}@_Ac@c@IIPk@Tq@Nc@?A??

Это то, что я получил, когда расшифровал его через Google Polyline Encoder: полный беспорядок .. enter image description here

Может кто-нибудь объяснить, что я делаюнеправильно?Заранее спасибо!

1 Ответ

0 голосов
/ 12 июля 2019

Я уверен, что проблема в том, что вы не отправляете временную метку каждой геолокации в Unix-времени.

Ознакомьтесь с официальной документацией : http://project -osrm.org/docs/v5.5.1/api/#match-service

Вот как должен выглядеть ваш запрос:

http://router.project-osrm.org/match/v1/driving/13.682632,47.393753;13.6849281,47.3935649?overview=full&radiuses=49;49&timestamps=1563459949;1563460007
...