我对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个坐标之间的“方向”(以建议的形式:“直行”,“右转”,“左转”)。有关更多详细信息,请参见有关如何创建建议的文档(here和here)
如果您可以描述最终目标(您要实现的用例),也许skobbler / Telenav团队可以为您提供更好的建议。
关于ios - SKMaps和ViaPoints/WayPoints,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35229847/