1. 程式人生 > >IOS 高德地圖導航

IOS 高德地圖導航

引言

高德地圖導航包還是淺顯易懂,筆者在這裡做點總結,實際操作一遍。
導航分為模擬導航和實時導航兩種,兩種導航都包括語音提示、停止導航、暫停或繼續導航功能。通過模擬導航,使用者可預先了解出行路線,直觀掌握沿途每一個特別路口的交通狀況,讓出行更從容。

算路成功後就可在導航檢視或HUD檢視下開始導航了,如下圖所示:
HUD檢視
標準檢視

1.配置工程
筆者是使用cocoapods自動部署導航SDK,如果更新了cocoa pods,現在編寫podfile檔案有點不一樣。以下例項:

platform :ios, ‘8.0’
use_frameworks!
target ‘約車’ do
pod ‘AMap3DMap’
pod ‘AMapSearch’
pod ‘AMapLocation’
pod ‘AMapNavi’
end

2.配置key
匯入工程之後,我們需要在高德地圖平臺申請應用的key作為唯一標識,可參見官方文件,關於配置key筆者在此就不贅述。

3.實施
配置好之後,在viewController中匯入

#import <AMapNaviKit/AMapNaviKit.h>
#import <AMapLocationKit/AMapLocationKit.h>

我們以標準導航檢視為例:
(1)

//配置地圖
- (void)configMap {

    locationManager = [[AMapLocationManager alloc] init];
    locationManager.delegate
= self; [locationManager startUpdatingLocation]; }
//獲取當前位置經緯度
- (void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location
{
    if (!flag) {
        myPosition = location.coordinate;
        [self routeCal];
    }
    flag = YES;
}
//設定駕車路線
- (void)routeCal
{
    //導航起始座標位置
AMapNaviPoint *startPoint = [AMapNaviPoint locationWithLatitude:myPosition.latitude longitude:myPosition.longitude]; //導航終點座標位置 AMapNaviPoint *endPoint = [AMapNaviPoint locationWithLatitude:myPosition.latitude+1 longitude:myPosition.longitude+1]; NSArray *startPoints = @[startPoint]; NSArray *endPoints = @[endPoint]; //駕車路徑規劃(未設定途經點、導航策略為速度優先) [self.driveManager calculateDriveRouteWithStartPoints:startPoints endPoints:endPoints wayPoints:nil drivingStrategy:0]; }

獲取自身位置不是必須的,我們可以使用高德地圖導航SDK中的另外一種方法規劃駕車路徑,不帶起點的路徑規劃(以自身位置為七點)。

- (BOOL)calculateDriveRouteWithEndPoints:(NSArray<AMapNaviPoint *> *)endPoints
                               wayPoints:(nullable NSArray<AMapNaviPoint *> *)wayPoints
                         drivingStrategy:(AMapNaviDrivingStrategy)strategy;
//初始化標準導航檢視
- (void)initNaviDriveView
{
    if (self.naviDriveView == nil)
    {
        self.naviDriveView = [[AMapNaviDriveView alloc] initWithFrame:CGRectMake(0, 64, CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame))];
        self.naviDriveView.delegate = self;
        //導航介面模式
        self.naviDriveView.showMode = AMapNaviDriveViewShowModeCarPositionLocked;
        //導航介面跟隨模式
        self.naviDriveView.trackingMode = AMapNaviViewTrackingModeCarNorth;

    }
}
/*標準導航檢視回撥方法*/
- (void)driveManagerOnCalculateRouteSuccess:(AMapNaviDriveManager *)driveManager
{
    //將naviDriveView新增到AMapNaviDriveManager中
    /**
     *  在這裡可以修改用哪個模式 標準或者HUD
     */
    [self.driveManager addDataRepresentative:self.naviDriveView];

    //將導航檢視新增到檢視層級中
    [self.view addSubview:self.naviDriveView];

    //開始實時導航
    [self.driveManager startGPSNavi];
}

- (void)initDriveManager
{
    if (self.driveManager == nil) {
        self.driveManager = [[AMapNaviDriveManager alloc] init];
        [self.driveManager setDelegate:self];
        //開啟智慧播報,包括路面電子眼,路障等等。。。
        [self.driveManager setDetectedMode:AMapNaviDetectedModeCameraAndSpecialRoad];
    }
}

//語音播報
-(void)driveManager:(AMapNaviDriveManager *)driveManager playNaviSoundString:(NSString *)soundString soundStringType:(AMapNaviSoundType)soundStringType
{
    if (soundStringType == AMapNaviSoundTypePassedReminder)
    {
        AudioServicesPlaySystemSound(1009);//播放系統“叮叮”提示音
    }
    else
    {
        [[SpeechSynthesizer sharedSpeechSynthesizer] speakString:soundString];
    }
}

SpeechSynthesizer 語音播報檔案可參考Demo

AudioServicesPlaySystemSound(1009);//播放系統“叮叮”提示音
需要匯入標頭檔案<AudioToolbox/AudioToolbox.h>

至此,標準導航檢視建立成功。如果你想使用HUD導航檢視,只需要

//初始化HUD導航檢視
- (void)initHudView
{
    if (self.hudView == nil)
    {
        self.hudView = [[AMapNaviHUDView alloc] initWithFrame:CGRectMake(0, 64, 375, 667)];
        self.hudView.delegate = self;
        self.hudView.isMirror = NO;//是否開啟映象
    }
}

只需要在下面這個回撥方法中將標準導航檢視設定成HUD檢視即可

- (void)driveManagerOnCalculateRouteSuccess:(AMapNaviDriveManager *)driveManager

以上來源於高德地圖導航SDK的一些歸納