В настоящее время я работаю с 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: полный беспорядок ..
Может ли кто-нибудь объяснить, что я делаю неправильно? Заранее спасибо!