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

高德 开发 iOS 导航SDK 开发指南 实用工具 基于Swift的导航应用开发

更新时间:2017年02月06日

开始实践前别忘记申请Key,申请请参考:http://lbs.amap.com/api/ios-sdk/guide/create-project/get-key/

新建工程

新建一个 Single View Application 工程。注意:Language 选择 Swift,如下图所示。

工程配置

按照以下步骤配置工程:

第 1 步,引入高德库

需引入基础库、导航库以及3D地图库。

左侧目录中选中工程名,在 TARGETS->Build Settings->Link Binary With Libaries 中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择解压后的 AMapNaviKit.framework、Foundation.framework、MAMapKit.framework 文件添加到工程中。

若需要查询功能,可引入搜索库 AMapSearchKit.framework。

第 2 步,引入资源文件

需引入 AMapNavi.bundle 和 AMap.bundle 两个资源文件。在 AMapNaviKit.framework 的 Resources 文件中有 AMapNavi.bundle,在 MAMapKit.framework 的 Resources 文件中有和 AMap.bundle 文件,其中:AMapNavi.bundle 文件中包含了导航界面&HUD界面中所需的图片资源,AMap.bundle资源文件中存储了定位、默认大头针标注视图等图片。

左侧目录中选中工程名,在右键菜单中选择 Add Files to “工程名”…,从 AMapNaviKit.framework->Resources 文件夹中选择AMapNavi.bundle,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。

AMap.bundle的引入方式参考AMapNavi.bundle。

第 3 步,引入系统库

左侧目录中选中工程名,在TARGETS->Build Settings-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中查找并选择所需的库(见下表),单击“Add”按钮,将库文件添加到工程中。

1.

UIKit.framework

2.

Foundation.framework

3.

CoreTelephony.framework

4.

SystemConfiguration.framework



5.

libz.tbd

6.

libc++.tbd

7.

libstdc++6.09.tbd

8.

Security.framework

第 4 步,Swift编译配置

1)新建桥接头文件(放在工程路径下),这里命名为 AMapDemoSwift-Bridging-Header.h,在该头文件中import需要的库文件,代码如下:

#import <AMapNaviKit/AMapNaviKit.h>
#import <MAMapKit/MAMapKit.h>
#import <AMapFoundationKit/AMapFoundationKit.h>
//#import <AMapSearchKit/AMapSearchKit.h>

2)左侧目录中选中工程名,在 TARGETS->Build Phases-> Swift Compiler - Code Generation -> Objective-C Briding Header 中输入桥接文件的路径,如下图所示:

配置高德Key

在 AppDelegate.swift 的 didFinishLaunchingWithOptions 方法的最前面配置高德 Key。示例代码如下:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        
        AMapServices.shared().apiKey = APIKey
        
        ……
    }

导航

下面以“模拟驾车导航”为场景进行介绍(已有起点和终点坐标)。步骤如下:

1、创建 AMapNaviDriveView

var driveView: AMapNaviDriveView!

func initDriveView() {
    driveView = AMapNaviDriveView(frame: view.bounds)
    driveView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    driveView.delegate = self
    
    view.addSubview(driveView)
}

2、创建 AMapNaviDriveManager

var driveManager: AMapNaviDriveManager!

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

3、进行路线规划

//为了方便展示,选择了固定的起终点
let startPoint = AMapNaviPoint.location(withLatitude: 39.99, longitude: 116.47)!
let endPoint = AMapNaviPoint.location(withLatitude: 39.901, longitude: 116.32)!

func calculateRoute() {
        //进行路径规划
        driveManager.calculateDriveRoute(withStart: [startPoint],
                                         end: [endPoint],
                                         wayPoints: nil,
                                         drivingStrategy: .singleDefault)
    }

4、开始模拟导航

func driveManager(onCalculateRouteSuccess driveManager: AMapNaviDriveManager) {
        NSLog("CalculateRouteSuccess")
        
        //算路成功后进行模拟导航
        driveManager.startEmulatorNavi()
    }

完整的导航 Swift 的 Demo 请参考 officialDemoNavi 。

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