如何在HERE SDK导航版(4.13.2.0)中获取当前道路名称?
正确获取HERE SDK导航中当前道路名称的方法
你之前的两种方式容易返回null,原因如下:
- 遍历Route的
sections和maneuvers时,很多机动动作(比如起步、到达、匝道切换等)本身不关联具体道路名称,或者道路未命名,导致roadTexts为空。 - 通过
maneuverProgress获取机动动作的方式,仅在当前处于某个机动节点的执行阶段时才有有效数据,大部分行驶过程中是在两个机动动作之间的路段,因此无法拿到对应机动动作的道路信息。
正确的做法是直接从RouteProgress中获取当前行驶的道路元素或道路名称:
方法1:通过RouteProgress的currentRoadName直接获取
override fun onRouteProgressUpdated(routeProgress: RouteProgress) { // 获取当前道路名称的本地化默认值 val currentRoadName = routeProgress.currentRoadName?.defaultValue currentRoadName?.let { // 处理获取到的道路名称 } }
方法2:通过当前道路元素获取更详细信息
如果需要道路的更多属性(比如道路类型、多语言名称),可以获取当前道路元素:
override fun onRouteProgressUpdated(routeProgress: RouteProgress) { val currentRoadElements = routeProgress.currentRoadElements if (currentRoadElements.isNotEmpty()) { val mainRoadElement = currentRoadElements.first() // 获取默认语言的道路名称 val roadName = mainRoadElement.names.defaultValue // 可选:获取指定语言的名称(示例为中文) val localizedRoadName = mainRoadElement.names.getLocalizedValue(Locale.CHINESE) } }
补充说明
currentRoadName是SDK提供的快捷方式,内部已处理道路元素的筛选逻辑,直接返回当前行驶道路的名称。currentRoadElements会返回当前位置对应的所有道路元素(比如主路+辅路),通常取第一个元素即可得到主要行驶道路的信息。
内容的提问来源于stack exchange,提问作者Serggio Lysenko
相关产品推荐
相关产品推荐

