如何通过HERE Routing API获取路线途经各州的行驶英里数
分州路线里程统计实现方案
HERE API 正确调用方法
之前调用HERE拿不到对应数据,基本是两个原因:用了旧版v7接口,或是没指定返回span维度的行政区域属性。用v8版本的Routing API按如下方式构造请求即可拿到需要的字段:
- 核心请求参数必须配置:在
spans字段中传入countryCode,subdivisions,distance,这个参数控制路由分段返回的属性,默认配置不会携带行政区域归属、分段里程信息。 - 参考请求示例(纽约布鲁克林到西雅图路线):
GET https://router.hereapi.com/v8/routes ?transportMode=car &origin=40.6782,-73.9442 &destination=47.6062,-122.3321 &return=polyline,summary &spans=countryCode,subdivisions,distance &apiKey=你自己的HERE API密钥
返回结果处理逻辑:每个路线分段(leg)下的spans数组中,单个span会携带三个核心字段:distance是当前分段的长度(单位米)、subdivisions[].code是对应州的官方编码,把相同州编码对应的span长度累加后,乘以0.000621371转换成英里,就是该州境内的行驶里程。
注意:旧版HERE Routing v7接口不支持返回span级别的行政区域属性,不用在旧接口上调试浪费时间。
其他可落地替代方案
如果HERE接口调试仍有问题,可以用这几个经过验证的方案,不需要采购高价企业级API服务:
- 开源数据自计算方案
任意支持返回高精度路线polyline的路由API(包括之前测过的MapQuest、TomTom免费版)都可以用这个方法:先拿到路线的全量经纬度坐标串,再对接公开的美国州界行政边界矢量数据(TIGER/Line数据集可免费获取),用GeoPandas或PostGIS做空间相交判断,把落在同一个州边界内的路线段长度累加即可,计算精度完全取决于路由polyline的采样密度,实际测试误差在0.5英里以内。 - 自部署OSRM路由服务
自行部署开源OSRM路由服务时,提前导入行政区域标注配置,路由请求时携带annotations=true参数,返回结果会直接标注每个路线节点对应的州级行政区域编码,后续累加里程的逻辑和HERE方案一致,无调用量限制,数据完全可控。 - Mapbox Directions API
调用接口时增加annotations=region,distance参数,返回的annotation层会直接携带每段路线对应的州信息和分段长度,直接累加即可。注意Google Maps Routes API目前没有开放这个维度的返回字段,不用反复调试该接口。
内容的提问来源于stack exchange,提问作者user3299199
相关产品推荐
相关产品推荐

