如何从 GPX 文件实例化 NMARoute 对象
How to instanciate a NMARoute object from GPX file
我们正在使用 iOS Premium HereMaps SDK。我们的基本问题是如何从一个非常详细的 GPX 文件中实例化一个 NMARoute
对象。该对象应该用于自定义的逐向导航。目前我们采取以下步骤:
- 从 GPX 文件创建一个包含
NMAGeoCoordinates
个对象的数组
- 创建
NMAWaypoint
的数组
- 致电
[NMACoreRouter calculateRouteWithStops:]
不幸的是,我们面临着多重限制:
[NMACoreRouter calculateRouteWithStops:]
方法限制了waypoints的数量。虽然我们有一个足够详细的 GPX 文件来创建整个路线,但我们必须挑选 waypoints 并让此处的服务再次计算路线。此过程不能确保我们将准确获得我们在 GPX 文件中的路线。
- NMAWaypoints 会在每次到达航路点时在逐向导航期间发出 "You reached your stopover" 语音呼叫。我们知道可以使用
NMAViaWaypoint
作为类型,但这不适合我们,因为 NMAViaWaypoint
将在导航过程中可能发生的重新路由过程中被取消。此外,中途停留会导致导航中断,例如在显示的距离内。
- 对于位于十字路口中间的一些 GPS 点,HereMaps 路线计算有时会选择与预期不同的路线。这又是由于 HereMaps 想要自己计算路线的问题,尽管我们有包含路线的详细 GPX 文件。
我们实际上正在寻找的是一种从 GPX 文件中获取 NMARoute
对象的更好方法。令我们惊讶的是,HereMaps SDK 提供了 REST endpoint 将 GPX 文件转换为 json 数据,但遗憾的是无法将此数据输入 iOS SDK。
遗憾的是,这不适用于当前的 HERE iOS SDK。 TbT Navigation 和路由紧密耦合,因此 Navigation 目前只能与内部路由引擎配合使用。
一些背景:
想象一下,您在导航时从预先计算好的路线中得出(即使您没有得出,例如由于 GPS 跳跃、复杂情况下的错误地图匹配、暂时的信号丢失,如果您在未映射的情况下开始,也可能会发生这种情况)或私家路网等)导航会要求路由重新计算。如果您的 GPX 轨迹与基于 iOS MobileSDK 的应用程序中的道路网络和地图数据不匹配怎么办?所以你的踪迹告诉指导去某个地方开车,那里不再有道路可用?指导会拒绝并强制重新计算。在你的情况下,你很可能不想要交通优化导航,但是如何处理阻塞的道路(所以不仅仅是减慢自由流动速度,而是完全阻塞)?我建议在此处启用优化 - 但这也不适用于静态 GPX 跟踪。
因此,正如您已经说过的,更好的解决方案是在本地重新计算一条非常接近您的轨迹的路线,但要考虑本地地图数据和约束。
您提到的限制是正确的,但是:
- Waypoint 限制在 SDK 3.6 中已经完全移除。但请仍然注意 waypoints 的数量,尤其是大于 500 的数字以及介于这些 waypoints.
之间的复杂段
- 您是否尝试过使用 NMAAudioManager 委托来拦截音频输出? https://developer.here.com/documentation/ios-premium/topics_api_nlp_hybrid_plus/protocolnmaaudiomanagerdelegate-p.html#topic-apiref
- 如上所述,路由推导的原因有很多。有时是由于地图数据,有时是由于计算包含。 100% 重建可能会很棘手(有时您可能对 GPX 跟踪是正确的,但在某些情况下 HERE SDK 可能是正确的),因此请尝试使用 waypoints 的数量和路由选项以尽可能接近尽可能。
我们正在使用 iOS Premium HereMaps SDK。我们的基本问题是如何从一个非常详细的 GPX 文件中实例化一个 NMARoute
对象。该对象应该用于自定义的逐向导航。目前我们采取以下步骤:
- 从 GPX 文件创建一个包含
NMAGeoCoordinates
个对象的数组 - 创建
NMAWaypoint
的数组 - 致电
[NMACoreRouter calculateRouteWithStops:]
不幸的是,我们面临着多重限制:
[NMACoreRouter calculateRouteWithStops:]
方法限制了waypoints的数量。虽然我们有一个足够详细的 GPX 文件来创建整个路线,但我们必须挑选 waypoints 并让此处的服务再次计算路线。此过程不能确保我们将准确获得我们在 GPX 文件中的路线。- NMAWaypoints 会在每次到达航路点时在逐向导航期间发出 "You reached your stopover" 语音呼叫。我们知道可以使用
NMAViaWaypoint
作为类型,但这不适合我们,因为NMAViaWaypoint
将在导航过程中可能发生的重新路由过程中被取消。此外,中途停留会导致导航中断,例如在显示的距离内。 - 对于位于十字路口中间的一些 GPS 点,HereMaps 路线计算有时会选择与预期不同的路线。这又是由于 HereMaps 想要自己计算路线的问题,尽管我们有包含路线的详细 GPX 文件。
我们实际上正在寻找的是一种从 GPX 文件中获取 NMARoute
对象的更好方法。令我们惊讶的是,HereMaps SDK 提供了 REST endpoint 将 GPX 文件转换为 json 数据,但遗憾的是无法将此数据输入 iOS SDK。
遗憾的是,这不适用于当前的 HERE iOS SDK。 TbT Navigation 和路由紧密耦合,因此 Navigation 目前只能与内部路由引擎配合使用。
一些背景:
想象一下,您在导航时从预先计算好的路线中得出(即使您没有得出,例如由于 GPS 跳跃、复杂情况下的错误地图匹配、暂时的信号丢失,如果您在未映射的情况下开始,也可能会发生这种情况)或私家路网等)导航会要求路由重新计算。如果您的 GPX 轨迹与基于 iOS MobileSDK 的应用程序中的道路网络和地图数据不匹配怎么办?所以你的踪迹告诉指导去某个地方开车,那里不再有道路可用?指导会拒绝并强制重新计算。在你的情况下,你很可能不想要交通优化导航,但是如何处理阻塞的道路(所以不仅仅是减慢自由流动速度,而是完全阻塞)?我建议在此处启用优化 - 但这也不适用于静态 GPX 跟踪。
因此,正如您已经说过的,更好的解决方案是在本地重新计算一条非常接近您的轨迹的路线,但要考虑本地地图数据和约束。
您提到的限制是正确的,但是:
- Waypoint 限制在 SDK 3.6 中已经完全移除。但请仍然注意 waypoints 的数量,尤其是大于 500 的数字以及介于这些 waypoints. 之间的复杂段
- 您是否尝试过使用 NMAAudioManager 委托来拦截音频输出? https://developer.here.com/documentation/ios-premium/topics_api_nlp_hybrid_plus/protocolnmaaudiomanagerdelegate-p.html#topic-apiref
- 如上所述,路由推导的原因有很多。有时是由于地图数据,有时是由于计算包含。 100% 重建可能会很棘手(有时您可能对 GPX 跟踪是正确的,但在某些情况下 HERE SDK 可能是正确的),因此请尝试使用 waypoints 的数量和路由选项以尽可能接近尽可能。