我对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))
}
感谢您的时间!
答案 0 :(得分:1)
我认为首先我们必须澄清术语。
viaPoint或waypoint(skobbler / telenav SDK使用viaPoint术语)将是路由上明确声明为“viaPoint”的点。这些点在路线计算时添加(通过在路线设置中传递viaPoints数组)或在使用addViaPoint API导航期间添加。
这些viaPoints将由SDK监控,您将收到didEnterViaPointArea,didReachViaPointWithIndex和didExitViaPointArea回调。
我相信你通过在路线上描述“交汇点”或“需要建议的点”来使用术语路点 - 这些主要对应于SDK提供的“路线坐标”(参见{{3 API)。 SDK未明确显示这些路线坐标 - 您不会获得有关这些点的任何明确信息,而只会获得建议形式的间接通知(“在200米处向右转到主街道”)。
转弯引擎为您提供的正是两个这样的坐标之间的“方向”(以建议的形式:“直接行驶”,“向右转”,“向左转”)。有关更多详细信息,请参阅有关如何创建建议的文档(routeCoordinationsForRouteWithID和here)
如果你可以描述你的最终目标(你想要实现的用例),也许skobbler / Telenav团队可以为你提供更好的建议。