首页 > 解决方案 > 不能在 NMACoreRouter 上使用循环(swift)(HereMap SDK)

问题描述

我有一个问题,我不能在 NMACoreRouter (HereMap SDK) 上使用 for 循环如果我按操作执行一次,它仍然可以工作!我不知道为什么不能应用到循环中。有趣的是,错误在第二个循环中仅返回“NMARoutingError”

这是我的代码

//route
var coreRouter: NMACoreRouter!
var mapRoute: NMAMapRoute?
typealias RouteContainer = (plan: [NMAGeoCoordinates], mode: NMARoutingMode)

 for var shop in pickedShopData {
            
                self.calculateRouteLength(startLat: self.curentUserGeo.latitude, startLong: self.curentUserGeo.longitude, endLat: shop.shopLat, endLong: shop.shopLong)
               
        }

func calculateRouteLength(startLat: Double, startLong: Double, endLat: Double, endLong: Double) {
    
    coreRouter = NMACoreRouter()
    /* Define waypoints for the route */
    let startPoint = NMAGeoCoordinates(latitude: startLat, longitude: startLong)
    let endPoint = NMAGeoCoordinates(latitude: endLat, longitude: endLong)
    /* Initialize a RoutePlan */
    let routePlan = [startPoint, endPoint]
    /*
     * Initialize a RouteOption. HERE Mobile SDK allows users to define their own parameters for the
     * route calculation,including transport modes,route types and route restrictions etc.Please
     * refer to API doc for full list of APIs
     */
    let routeMode = NMARoutingMode()
    /* Other transport modes are also available e.g Pedestrian */
    routeMode.transportMode = NMATransportMode.scooter
    /* Disable highway in this route. */
    routeMode.routingOptions.insert(NMARoutingOption.avoidHighway)
    /* Calculate the shortest route available. */
    routeMode.routingType = NMARoutingType.fastest
    /* Calculate 1 route. */
    routeMode.resultLimit = 3
    
    coreRouter.calculateRoute(withStops: routePlan, routingMode: routeMode,
                              { [self] (result, error) in
            // check error and unwrap route
            guard let route = result?.routes?.first, error == NMARoutingError.none else {
                print("error \(error)")
                return
            }
            // check if map object already exist
            if let tempMapRoute = self.mapRoute {
                self.mapView?.remove(mapObject: tempMapRoute)
            }
            // create map object from route
            guard let mapRoute = NMAMapRoute(route) else {
                return
            }
            print("distance \(mapRoute.route.length)")
    })
    
}

标签: iosswiftxcodesdkheremaps-ios-sdk

解决方案


我认为您的问题是 NMACoreRouter 在第二条路线启动时仍在计算第一条路线。

检查 NMACoreRouter.isBusy 以确保路由器已完成计算,直到您开始下一个。

-卡琳


推荐阅读