关于Here SDK模拟导航生成GPX文件及速度告警设置的技术问询
Here SDK 3.13.x 模拟导航GPX录制与速度告警问题解决方案
针对你在Here SDK 3.13.2.86 + Android 9.0环境下遇到的两个问题,结合实际开发经验给出具体解决方案:
一、模拟导航时的GPX文件录制问题
首先明确:Here SDK 3.13.x版本确实没有内置的模拟导航GPX录制功能,但我们可以通过手动监听位置数据来生成符合要求的GPX文件,完美弥补mapstogpx等工具的字段缺失问题。
具体实现步骤:
- 监听导航位置更新:通过
NavigationManager.addPositionListener()注册位置监听器,模拟导航过程中,SDK会持续推送包含时间戳、速度、hdop等完整数据的位置对象。 - 手动构建GPX结构:每次获取到位置数据后,生成GPX的
trkpt节点,填充以下关键字段:- 纬度/经度:从位置对象的
coordinates属性提取 - 时间:将位置对象的
timestamp格式化为ISO 8601标准(例如2024-05-20T14:30:00Z) - 速度:提取位置对象的
speed字段,添加<speed>标签 - HDOP:提取位置对象的
horizontalAccuracy数据,添加<hdop>标签
- 纬度/经度:从位置对象的
- 整合生成GPX文件:将所有
trkpt节点放入trkseg节点,再包裹标准的GPX根节点,最后写入本地文件即可。这样生成的GPX文件完全满足Here API回放日志的格式要求。
二、setSpeedWarningEnabled(false)失效问题
这个问题是Here SDK 3.13.x版本的已知特性:启动或恢复导航时,SDK内部会自动重置速度告警状态,导致你的初始设置被覆盖。
解决办法:
- 重复设置而非仅初始化:不要只在启动导航前调用
setSpeedWarningEnabled(false),还要在导航状态恢复时重新触发设置。例如,监听NavigationManager的NavigationState变化,当状态从PAUSED切换回RUNNING时,立即再次执行关闭操作。 - 示例代码片段:
navigationManager.addNavigationStateListener((oldState, newState) -> { if (newState == NavigationState.RUNNING) { navigationManager.setSpeedWarningEnabled(false); } });
这样就能确保每次导航恢复后,速度告警都会被强制关闭,避免SDK的自动重置覆盖你的配置。
内容的提问来源于stack exchange,提问作者Louis
相关产品推荐
相关产品推荐

