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

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

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

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

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

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

введите описание изображения здесь

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, оно немного неточно, поэтому я хочу, чтобы он был привязан к дороге:

введите описание изображения здесь

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: полный беспорядок .. введите описание изображения здесь

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


person Phil Zerza    schedule 11.07.2019    source источник


Ответы (1)


Я уверен, что проблема в том, что вы не отправляете временную метку каждой геолокации во времени 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
person Rene    schedule 12.07.2019