Mapbox Android导航SDK路线请求报错171:No suitable edges near location
问题根因
- 坐标顺序错误:Mapbox Navigation SDK 要求传入的坐标点格式为
(经度, 纬度),若构造ptsList时误传为(纬度, 经度),会导致坐标点落在无道路区域,触发本地校验报错。Postman中手动输入的坐标顺序正确,因此可正常返回结果。 - 本地离线路网前置校验拦截:SDK默认优先使用本地离线路网数据做坐标吸附校验,如果坐标点所在区域没有对应的离线路网数据,本地校验会直接返回失败,不会发起在线请求。Postman直接调用在线接口,不受本地离线数据影响。
- 吸附半径配置过小:SDK默认的坐标吸附到道路的半径远小于在线Direction API的默认阈值,坐标点离道路稍远就会触发本地校验失败,而服务端可以正常吸附返回结果。
- 路径拼接错误:当前
baseUrl配置已经包含/directions/v5/mapbox/前缀,同时又单独配置了user("mapbox")和profile(RouteUrl.PROFILE_DRIVING),会导致SDK拼接出的请求路径重复,本地解析前置逻辑出错。
解决方案
- 校验坐标顺序:确认
ptsList中所有点都是通过Point.fromLngLat(经度, 纬度)构造,禁止颠倒经纬度顺序。 - 关闭离线路由校验:如果不需要使用离线导航功能,初始化MapboxNavigation时添加配置
enableOfflineRouting(false),强制所有路线请求走在线接口,绕过本地路网校验。 - 配置合理的吸附半径:在RouteOptions构造逻辑中添加
radiusesList配置,比如给所有坐标点设置50米的吸附阈值:
builder.radiusesList(Collections.nCopies(ptsList.size(), 50.0));
- 修正baseUrl配置:删除
builder.baseUrl("https://api.mapbox.com/directions/v5/mapbox/")这一行,使用SDK默认的官方服务地址即可,避免路径拼接重复。 - 比对请求参数:开启SDK日志,抓取实际发起的路线请求完整URL,和Postman使用的请求URL做参数比对,排除其他参数配置差异。
内容的提问来源于stack exchange,提问作者kchoi
相关产品推荐
相关产品推荐

