HERE Android SDK:避让区域功能失效问题求助
路线计算时避让区域设置未生效,路线仍穿过避让区域
我有一组由多个“区域框”组成的避让区域列表,尝试在计算驾车路线时将这些区域加入避让选项,但生成的路线完全忽略该设置,依然穿过避让区域。
我已尝试通过GeoCoordinates创建GeoBox对象,并添加到CarOptions的avoidanceOptions.avoidAreas中,代码如下:
CarOptions carOptions = new CarOptions(); for (Area area : closest100Areas) { for (Box box : area.getBoxes()) { GeoCoordinates northEast = new GeoCoordinates(box.northEast.latitude, box.northEast.longitude); GeoCoordinates southWest = new GeoCoordinates(box.southWest.latitude, box.southWest.longitude); carOptions.avoidanceOptions.avoidAreas.add(new GeoBox(southWest, northEast)); } } routingEngine.calculateRoute(waypoints, carOptions, new CalculateRouteCallback() { @Override public void onRouteCalculated(@Nullable RoutingError routingError, @Nullable List<Route> routes) { if (routingError == null) { Route route = routes.get(0); showRouteDetails(route); showRouteOnMap(route); getManeuverInstructions(route); logRouteViolations(route); } else { Log.e("Error while calculating a route:", routingError.toString()); } } });
附上的图片显示了被忽略的高亮避让区域,另外还有一处明显的缺口问题,但这属于单独问题。
解决建议
1. 校验GeoBox坐标顺序
部分路由API对GeoBox的参数顺序有严格要求,需确保西南坐标(southWest)的纬度确实小于东北坐标(northEast)的纬度,经度范围也符合逻辑。可以添加日志验证坐标值:
Log.d("GeoBox", String.format("SW: %.6f, %.6f | NE: %.6f, %.6f", southWest.getLatitude(), southWest.getLongitude(), northEast.getLatitude(), northEast.getLongitude()));
如果发现坐标颠倒,比如SW纬度大于NE,需交换参数重新创建GeoBox。
2. 确认避让规则的生效逻辑
部分路由服务的避让区域并非完全禁止进入,而是通过增加区域内道路权重实现绕行。若当前路线没有可行的绕行路径,服务会直接穿过避让区。可以:
- 缩小避让区域范围,测试是否能触发避让逻辑
- 检查起点/终点是否位于避让区域内(若起点/终点在避让区,路由会直接穿过)
3. 显式初始化AvoidanceOptions
确保avoidanceOptions对象已被正确初始化,部分API需要显式创建实例:
CarOptions carOptions = new CarOptions(); carOptions.setAvoidanceOptions(new AvoidanceOptions()); // 显式初始化避让选项
4. 检查路由引擎配置
确认路由引擎实例是否启用了避让功能,部分服务需要在初始化时指定相关功能开关或权限。
5. 分析Route违规日志
你的代码中已调用logRouteViolations(route),查看该方法的输出,确认路由服务是否识别到避让区域但因无可行绕行路线而穿过。
内容的提问来源于stack exchange,提问作者Addict of Rice
相关产品推荐
相关产品推荐

