如何通过OSRM HTTP-API获取路线上指定时长后的位置?
可以通过OSRM HTTP API实现这个需求,步骤清晰可行
完全可以!我之前做过类似的需求,OSRM的HTTP API提供了足够的信息来计算车辆行驶指定时间后的理论位置,核心是结合route服务的注解参数和对路线分段数据的简单处理,下面是具体的实现思路:
第一步:获取带时长注解的完整路线
调用OSRM的route接口时,必须加上annotations=duration参数,这样返回的路线数据里,每一段行驶路段(step)都会包含精确的行驶时长,以及对应的路径几何信息。为了获取完整路径细节,建议同时加上overview=full参数。典型的请求格式如下:GET /route/v1/driving/{long_start},{lat_start};{long_end},{lat_end}?annotations=duration&overview=full第二步:定位行驶2分钟后的目标路段
先把2分钟转换成120秒,然后遍历返回结果中routes[0].legs[0].steps数组,逐个累加每个step的duration值:- 当累加的总时长未达到120秒时,继续遍历下一个step;
- 当累加总时长超过120秒时,说明目标位置就在当前这个step里。此时计算在该step中已行驶的时间:
remaining_time = 120 - 之前累加的总时长,再算出这个时间占当前step总时长的比例:ratio = remaining_time / 当前step的duration。
第三步:提取对应位置的坐标
当前step的geometry字段是经过Polyline编码的路径数据,你需要用对应语言的Polyline解码工具(比如Python的polyline库、JavaScript的@mapbox/polyline包)把它解码成坐标数组。然后根据刚才算出的ratio,在坐标数组中找到对应的位置——比如ratio为0.4,就取路径前40%处的坐标点;如果需要更高精度,还可以对相邻坐标做线性插值计算。
需要注意的是,OSRM返回的时长是基于推荐路线的理想行驶时长,和实际路况可能有偏差,但如果是基于规划路线的理论位置查询,这个方法完全够用。
内容的提问来源于stack exchange,提问作者Joule
相关产品推荐
相关产品推荐

