我对skmap sdk功能有疑问。

创建路线并开始导航过程之后,是否仍要捕获您当前指向的waypoint / viapoint?计算路线后,看来routeInformation.viaPointsOnRoute为空。 calculateRoute(route)是否自动生成viaPoints列表?在SKNavigationDelegate协议参考中,我看到以下事件函数:

– routingService:didEnterViaPointArea:
– routingService:didReachViaPointWithIndex:
– routingService:didExitViaPointArea:

但是,这些方法似乎从未被调用过。不确定是否仅以编程方式添加了ViaPoints才调用它们。

同样,当routeService触发currentAdvice和nextAdvice方法时,SKRouteAvice位置也显示为空。

无论如何,有人可以向我提供一个简单的示例,说明在导航时如何创建和捕获当前waypoint位置以及下一个waypoint位置吗?本质上,我正在尝试计算从当前位置到下一个waypoint的方向。

以下是我的路线和导航启动代码的粗略示例:
//Created Route
let route: SKRouteSettings = SKRouteSettings()
route.routeMode = SKRouteMode.Pedestrian
route.startCoordinate = coordinateCurrent!
route.destinationCoordinate = coordinateDestination!
route.shouldBeRendered = true
SKRoutingService.sharedInstance().calculateRoute(r oute)

//Start Navigation
let navSettings: SKNavigationSettings = SKNavigationSettings()
navSettings.navigationType = SKNavigationType.Simulation
navSettings.distanceFormat = SKDistanceFormat.MilesFeet
navSettings.viaPointNotificationDistance=1
self.mapView!.settings.displayMode = SKMapDisplayMode.Mode3D
navSettings.transportMode = SKTransportMode.Pedestrian
SKRoutingService.sharedInstance().startNavigationW ithSettings(navSettings)

//Start Postioner Service
SKPositionerService.sharedInstance().delegate = self
SKPositionerService.sharedInstance().startLocation Update()
routeInfo.viaPointsOnRoute

func routingService(routingService: SKRoutingService!, didChangeNextAdvice nextAdvice: SKRouteAdvice, isLastAdvice:Bool)
{
    log(String(nextAdvice.location))
}

func routingService(routingService: SKRoutingService!, didChangeCurrentAdvice currentAdvice: SKRouteAdvice, isLastAdvice:Bool)
{
    log(String(currentAdvice.location))
}

func routingService(routingService: SKRoutingService!,
                    didUpdateViaPointsInformation viaPoints: [AnyObject]!)
{
    log("VIA INFO: " + String(viaPoints))
}

func routingService(routingService: SKRoutingService!,
                    didEnterViaPointArea index: Int32)
{
    log("ENTER VIA: " + String(index))
}

func routingService(routingService: SKRoutingService!,
                    didExitViaPointArea index: Int32)
{
    log("EXIT VIA: " + String(index))
}

感谢您的时间!

最佳答案

我认为首先我们必须澄清术语。

viaPoint或waypoint(skobbler / telenav SDK使用viaPoint术语)将是路线上明确声明为“viaPoint”的点。这些点是在路线计算时添加的(通过在路线设置中传递viaPoints数组)或在使用addViaPoint API导航期间添加。

这些viaPoint将由SDK监控,您将收到didEnterViaPointArea,didReachViaPointWithIndex和didExitViaPointArea回调。

我相信您使用的是航路点,它描述的是沿路线的“路口”或“需要建议的点”-这些将主要对应于SDK提供的“路线坐标”(请参见routeCoordinationsForRouteWithID API)。 SDK不会明确显示这些路线坐标-您不会获得有关这些点的任何明确信息,而只会获得建议形式的间接通知(“在200米处右转到主大街”)。

转弯引擎为您提供的正是这些2个坐标之间的“方向”(以建议的形式:“直行”,“右转”,“左转”)。有关更多详细信息,请参见有关如何创建建议的文档(herehere)

如果您可以描述最终目标(您要实现的用例),也许skobbler / Telenav团队可以为您提供更好的建议。

关于ios - SKMaps和ViaPoints/WayPoints,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35229847/

10-11 00:44