我试图创建一条遵循我提供的 gps 跟踪的路线。gps 跟踪已清理,其中没有循环并且顺序正确。我用其他服务检查了它。它有1920点。您可以在GPX 文件中找到跟踪 遗憾的是,如果我根据提供的 sdk 示例(github)创建路由,我的路径中会出现循环。
我希望你能帮助我解决以下问题:
如何在使用 HERE ios Swift SDK 创建路由时避免循环
我如何设置路线选项是遵循提供的点阵列而不是创建最快或平衡路线的方式。
因为我在 Ios sdk 中找不到这些函数,所以我使用了额外的 REST API 来稍微过滤一下路线,以根据这里的地图删除所有未正确匹配的点......在绘制路线之前......即所有概率低的东西,警告,离马路很远……但结果还是不好。这是一个清理过的文件.. 在原始文件通过 HERE 地图映射/运行一次后创建该文件。在此文件中,所有置信度低或产生警告或与原始点距离较大的点.. 都将被删除。这是我用来创建路线的路线,但它仍然存在相同的问题,例如循环和奇怪的转弯。
非常感谢您!BR。
到目前为止,我有这个代码:
private lazy var router = NMACoreRouter()
@objc func do_routing_stuff( gps_trace :[NMAWaypoint]) {
var stops = [Any]()
stops = gps_trace
let routingMode = NMARoutingMode(routingType: .fastest,
transportMode: .car,
routingOptions: .avoidHighway)
// Trigger the route calculation
router.calculateRoute(withStops: stops ,
routingMode: routingMode)
{ [weak self] routeResult, error in
guard error == .none else {
self?.showMessage("Error:route calculation returned error code \(error.rawValue)")
return
}
guard let result = routeResult, let routes = result.routes, routes.count > 0 else {
self?.showMessage("Error:route result returned is not valid")
return
}
// Let's add the 1st result onto the map
self?.route = routes[0]
self?.updateMapRoute(with: self?.route)
// self?.startNavigation()
}
}
private func updateMapRoute(with route: NMARoute?) {
// remove previously created map route from map
if let previousMapRoute = mapRoute {
mapView.remove(mapObject:previousMapRoute)
}
guard let unwrappedRoute = route else {
return
}
mapRoute = NMAMapRoute(unwrappedRoute)
mapRoute?.traveledColor = .clear
_ = mapRoute.map{ mapView?.add(mapObject: $0) }
// In order to see the entire route, we orientate the
// map view accordingly
if let boundingBox = unwrappedRoute.boundingBox {
geoBoundingBox = boundingBox
mapView.set(boundingBox: boundingBox, animation: .linear)
}
}
相比之下,传单地图显示了相同的路线。