2016-02-05 3 views
2

У меня есть вопросы относительно функциональности skmap sdk.SKMaps и ViaPoints/WayPoints

После создания маршрута и начала процесса навигации есть ли в любом случае захват /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

Я думаю, что сначала мы должны уточнить терминологию.

viaPoint или waypoint (skobler/telenav SDK использует терминологию viaPoint) будет точкой на маршруте, который явно объявлен как «через точку». Эти точки добавляются во время расчета маршрута (путем передачи массива viaPoints в настройках маршрута) или во время навигации с помощью API addViaPoint.

Эти контрольные точки будут отслеживаться SDK, и вы получите обратные вызовы didEnterViaPointArea, didReachViaPointWithIndex и didExitViaPointArea.

Я считаю, что вы используете термин «путевая точка», описывая «соединение» или «точка, требующая совета» по маршруту - они будут в основном соответствовать «координатам маршрута», предоставляемым SDK (см. API routeCoordinationsForRouteWithID). Эти координаты маршрута явно не отображаются SDK - вы не получаете никакой явной информации об этих точках, а только косвенные уведомления в форме советов («В 200 метрах направо направо на главную улицу»).

То, что поворачивает двигатель, дает вам именно «направление» между двумя такими координатами (в виде совета: «нести прямо», «повернуть направо», «повернуть налево»). Обратитесь к документации о том, как советы создаются для более подробной информации (here и here)

Может быть Skobbler/Telenav команда может предоставить вам лучший совет, если вы могли бы описать вашу конечную цель (что использование случае, если вы пытаетесь достичь).

Смежные вопросы