示例中心
功能在线体验
控制台

高德 开发 iOS 导航SDK 开发指南 在地图上导航 实时导航

更新时间:2017年11月30日

基本介绍

实时导航,也可以称为GPS导航,是通过连续的GPS定位信息来驱动进行的导航,用于实际的导航过程。

在路线规划成功后(驾车或步行),就可以开始实时导航了。

注意:若您的位置并没有发生变化,自车位置就只会停留在定位点的位置不动。

我们提供了一个默认的导航界面 AMapNaviDriveView,如下图所示:


使用说明

实现实时导航的步骤如下:

第 1 步,创建 AMapNaviDriveView

- (void)initDriveView
{
    if (self.driveView == nil)
    {
        self.driveView = [[AMapNaviDriveView alloc] initWithFrame:self.view.bounds];
        self.driveView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
        [self.driveView setDelegate:self];
        
        [self.view addSubview:self.driveView];
    }
}
func initDriveView() {
   driveView = AMapNaviDriveView(frame: view.bounds)
   driveView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
   driveView.delegate = self
   
   view.addSubview(driveView)
    }

第 2 步,创建 AMapNaviDriveManager

构造 AMapNaviDriveManager 的同时,将 AMapNaviDriveView 添加为导航数据的 Representative,使其可以接收到导航诱导数据。

- (void)initDriveManager
{
    [[AMapNaviDriveManager sharedInstance] setDelegate:self];   
    //将driveView添加为导航数据的Representative,使其可以接收到导航诱导数据
    [[AMapNaviDriveManager sharedInstance] addDataRepresentative:self.driveView]
}
func initDriveManager() {
   AMapNaviDriveManager.sharedInstance().delegate = self
   
   AMapNaviDriveManager.sharedInstance().allowsBackgroundLocationUpdates = true
   AMapNaviDriveManager.sharedInstance().pausesLocationUpdatesAutomatically = false
   
   //将driveView添加为导航数据的Representative,使其可以接收到导航诱导数据
   AMapNaviDriveManager.sharedInstance().addDataRepresentative(driveView)
}

第 3 步,进行路线规划

具体参考:驾车路线规划步行路线规划骑行路线规划

第 4 步,开始实时导航

在路线规划成功的回调函数中,开启实时导航。

- (void)driveManagerOnCalculateRouteSuccess:(AMapNaviDriveManager *)driveManager
{
    NSLog(@"onCalculateRouteSuccess");
 
    //算路成功后开始GPS导航
    [[AMapNaviDriveManager sharedInstance] startGPSNavi];
}
func driveManager(onCalculateRouteSuccess driveManager: AMapNaviDriveManager) {
   NSLog("CalculateRouteSuccess")
   
   //算路成功后开始GPS导航
   AMapNaviDriveManager.sharedInstance().startGPSNavi()
}

第 5 步,当退出页面的时候,销毁AMapNaviDriveManager单例

- (void)dealloc
{
    [[AMapNaviDriveManager sharedInstance] stopNavi];
    [[AMapNaviDriveManager sharedInstance] removeDataRepresentative:self.driveView];
    [[AMapNaviDriveManager sharedInstance] setDelegate:nil];
    
    BOOL success = [AMapNaviDriveManager destroyInstance];
    NSLog(@"单例是否销毁成功 : %d",success);
    
}
deinit {
    AMapNaviDriveManager.sharedInstance().stopNavi()
    AMapNaviDriveManager.sharedInstance().removeDataRepresentative(driveView)
    AMapNaviDriveManager.sharedInstance().delegate = nil
        
    let success = AMapNaviDriveManager.destroyInstance()
    NSLog("单例是否销毁成功 : \(success)")
        
}


示例中心 功能
在线体验
常见问题