SKMaps和ViaPoints / WayPoints

时间:2016-02-05 17:15:51

标签: ios swift skmaps

我对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))
}

感谢您的时间!

1 个答案:

答案 0 :(得分:1)

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

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

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

我相信你通过在路线上描述“交汇点”或“需要建议的点”来使用术语路点 - 这些主要对应于SDK提供的“路线坐标”(参见{{3 API)。 SDK未明确显示这些路线坐标 - 您不会获得有关这些点的任何明确信息,而只会获得建议形式的间接通知(“在200米处向右转到主街道”)。

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

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