我如何使用 OSRM 使用道路捕捉功能?

How do I use the snap to road function using OSRM?

我目前正在使用 OSRM 并使用一些 GPS 数据进行测试,这些数据是我使用 googles Interactive Polyline Encoder Utility 生成的 https://developers.google.com/maps/documentation/utilities/polylineutility

我想要的概念是汽车沿着街道行驶,每 20 秒发送一次 GPS 位置。我想在行程结束时显示路径和行驶的公里数。

我在 C# 中设置了一个客户端,使用匹配算法执行 GET 请求,以便与开放演示服务器后端 http://router.project-osrm.org

上的 api 进行通信

问题是我无法使用匹配算法,因为它只需要两个 GPS 点,而不是一条由多个 GPS 位置组成的折线。对我来说这没有意义。

我试过了,效果还不错,但它迷路了,不知何故在我没有定义的点结束,可能是因为两点之间的距离很长,但我需要它工作超过两个虽然: 这是它出错的地方的照片

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

我还发现一些不错的博客和网站告诉我应该使用 OSRM 匹配算法作为 Snap to road 工具。其中之一是这个:https://www.jamesrcroft.com/2015/06/snapping-gps-tracks-to-roads/

我还尝试了根据 OSRM wiki 的路线方法,该方法在提供的顺序中找到坐标之间的最快路线。那不是我想要的。至少它可以采用 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 折线编码器解码时得到的结果:一团糟..

有人可以解释一下我做错了什么吗?提前致谢!

我确定问题是您没有以 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