iOS 高德地圖開發(fā)詳解

一:基本地圖功能實(shí)現(xiàn)

1.申請(qǐng)密鑰流程

申請(qǐng)密鑰鏈接

申請(qǐng)密鑰1.png
申請(qǐng)密鑰2.png
申請(qǐng)密鑰3.png

2.配置環(huán)境(重點(diǎn))

高德地圖提供了兩種配置方式:

2.1手動(dòng)配置

2.1.1引入地圖庫

MAMapKit.framework 文件添加到工程中。

2.1.2引入AMap.bundle資源文件

AMap.bundle資源文件中存儲(chǔ)了定位、默認(rèn)大頭針標(biāo)注視圖等圖片,可利用這些資源圖片進(jìn)行開發(fā)。
左側(cè)目錄中選中工程名,在右鍵菜單中選擇Add Files to “工程名”…,從MAMapKit.framework->Resources文件中選擇AMap.bundle文件,并勾選“Copy items if needed”復(fù)選框,單擊“Add”按鈕,將資源文件添加到工程中。
資源文件不是必須的,可以自定義資源圖片。

2.1.3引入系統(tǒng)庫
1.  UIKit.framework 2D、3D、Search
2.  Foundation.framework    2D、3D、Search
3.  CoreGraphics.framework  2D、3D、Search
4.  QuartzCore.framework    2D、3D
5.  OpenGLES.framework  3D
6.  CoreLocation.framework  2D、3D
7.  CoreTelephony.framework 2D、3D、Search
8.  SystemConfiguration.framework   2D、3D、Search
9.  libz.dylib  2D、3D、Search
10. libstdc++6.09.dylib 2D、3D、Search
11. Security.framework  2D、3D
2.1.4環(huán)境配置

在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC。
V2.3.0(含)之前版本不支持arm64,需在 TARGETS->Build Settings->Architectures 點(diǎn)出選擇框,選擇 “Other”,將默認(rèn)值修改為 $(ARCHS_STANDARD_32_BIT)。

2.2自動(dòng)配置,(使用 CocoaPods 安裝 SDK)

為 高德 iOS 地圖 SDK 創(chuàng)建一個(gè) Podfile,并使用它來安裝 SDK。

2.2.1創(chuàng)建Podfile文件

在您當(dāng)前工程文件(.xcodeproj)所在文件夾下創(chuàng)建一個(gè)名為 Podfile 的文件。如果您尚未創(chuàng)建 Xcode 項(xiàng)目,請(qǐng)立即創(chuàng)建一個(gè)并將其保存到您的本地計(jì)算機(jī)。 (如果您第一次接觸 iOS 開發(fā),請(qǐng)創(chuàng)建一個(gè)Single View Application。)

$ touch Podfile
2.2.2編輯 Podfile 文件

Podfile文件內(nèi)容如下:

platform :ios, '7.0' #手機(jī)的系統(tǒng) target 'YourProjectTarget' do pod 'AMap3DMap' #3D地圖SDK #pod 'AMap2DMap' #2D地圖SDK (2D和3D不能同時(shí)使用) pod 'AMapSearch' #搜索功能 end
編輯 Podfile 文件
2.2.3運(yùn)行 pod install 命令安裝SDK
$pod install --repo-update

1.1.0版本的pod,運(yùn)行pod install 不會(huì)自動(dòng)更新repo,如果下載的不是最新版,可使用pod install —repo-update 更新 或 先運(yùn)行 pod repo update.

2.2.4更新 SDK

如果您安裝的SDK不是最新版,請(qǐng)執(zhí)行下面的代碼進(jìn)行更新。

pod repo update
2.2.5重啟 Xcode

關(guān)閉Xcode,然后打開(雙擊)您項(xiàng)目的 .xcworkspace 文件以啟動(dòng) Xcode。 從此刻開始,您必須使用 .xcworkspace 文件打開項(xiàng)目。

3.地圖的使用

3.1配置Info.plist 文件

iOS9為了增強(qiáng)數(shù)據(jù)訪問安全,將所有的http請(qǐng)求都改為了https,為了能夠在iOS9中正常使用地圖SDK,請(qǐng)?jiān)?Info.plist"中進(jìn)行如下配置,否則影響SDK的使用。

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true></true>
</dict>

3.2配置高德Key至AppDelegate.m文件

#import <AMapFoundationKit/AMapFoundationKit.h>
//需要引入AMapFoundationKit.h頭文件
……

 (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{  
    [AMapServices sharedServices].apiKey = @"您的Key";
     
    ……
}

3.3加載地圖

在ViewController.m文件相應(yīng)的方法中進(jìn)行地圖初始化,初始化的步驟:

1.import MAMapKit.h 頭文件;
2.構(gòu)造MAMapView對(duì)象;
3.將MAMapView添加到Subview中。

對(duì)于3D矢量地圖,在 viewDidLoad 方法中添加代碼:

#import <MAMapKit/MAMapKit.h>

-(void) viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

///初始化地圖
MAMapView *_mapView = [[MAMapView alloc] initWithFrame:self.view.bounds];
    
///把地圖添加至view
    [self.view addSubview:_mapView];
}

到此地圖的基本功能就完成了
Demo地址 如果有所幫助記得關(guān)注,點(diǎn)Star
demo中添加了查看路況功能,如果不需要,可以刪除。

二:自定義地圖功能

在上面功能的基礎(chǔ)上我們可以針對(duì)需求,自定義地圖功能,下面我就列舉出常用功能設(shè)置方法:

1.地圖Logo

默認(rèn)的Logo為藍(lán)色字樣的“高德地圖”,顯示在地圖的左下方。地圖Logo不能移除,但可通過MAMapView.logoCenter屬性來調(diào)整Logo的顯示位置。在ViewController.m的viewDidLoad方法添加如下如下:

_mapView.logoCenter = CGPointMake(CGRectGetWidth(self.view.bounds)-55, 450);

2.指南針

指南針默認(rèn)是開啟狀態(tài),顯示在地圖的右上角。
通過MAMapView的showsCompass屬性用來控制指南針的可見性。compassOrigin屬性可改變指南針的顯示位置。在ViewController.m的viewDidLoad方法添加如下如下:

_mapView.showsCompass= YES; // 設(shè)置成NO表示關(guān)閉指南針;YES表示顯示指南針
_mapView.compassOrigin= CGPointMake(_mapView.compassOrigin.x, 22); //設(shè)置指南針位置

3.比例尺

比例尺表示地圖上兩點(diǎn)間距離與實(shí)際與之對(duì)應(yīng)的兩點(diǎn)距離的比,在不同的縮放級(jí)別下,比例尺代表的長度也是不同的。
在iOS SDK中,比例尺默認(rèn)顯示在地圖的左上角。MAMapView的showScale屬性用來控制比例尺的可見性,scaleOrigin屬性用來改變比例尺的顯示位置。在ViewController.m的viewDidLoad方法添加如下代碼:

_mapView.showScale= YES;  //設(shè)置成NO表示不顯示比例尺;YES表示顯示比例尺
_mapView.scaleOrigin= CGPointMake(_mapView.scaleOrigin.x, 22);  //設(shè)置比例尺位置

4.手勢(shì)控制

//縮放手勢(shì)
_mapView.zoomEnabled = NO;    //NO表示禁用縮放手勢(shì),YES表示開啟
//平移(滑動(dòng))手勢(shì)
_mapView.scrollEnabled = NO;    //NO表示禁用滑動(dòng)手勢(shì),YES表示開啟
//旋轉(zhuǎn)手勢(shì)(3D)
_mapView.rotateEnabled= NO;    //NO表示禁用旋轉(zhuǎn)手勢(shì),YES表示開啟
//傾斜手勢(shì)(3D)
_mapView.rotateCameraEnabled= NO;    //NO表示禁用傾斜手勢(shì),YES表示開啟

5.地圖操作

地圖縮放
地圖的縮放級(jí)別的范圍是[3-19],調(diào)用MAMapView的setZoomLevel方法設(shè)置地圖的縮放級(jí)別,用來縮放地圖。示例代碼如下:

[_mapView setZoomLevel:17.5 animated:YES];

地圖平移

[_mapView setCenterCoordinate:center animated:YES];

地圖旋轉(zhuǎn)(3D)
旋轉(zhuǎn)角度的范圍是[0.f 360.f],以逆時(shí)針為正向。示例代碼如下:

[_mapView setRotationDegree:60.f animated:YES duration:0.5];

地圖傾斜(3D)
傾斜角度范圍為[0.f, 45.f],示例代碼如下:

[_mapView setCameraDegree:30.f animated:YES duration:0.5];

6.地圖截屏

CGRect inRect = CGRectMake(80,142,160,284);
UIImage *screenshotImage = [_mapView takeSnapshotInRect:inRect] ;

7.衛(wèi)星圖

//顯示衛(wèi)星地圖
_mapView.mapType = MAMapTypeSatellite;

說明:地圖類型切換只需將地圖類型設(shè)置成相應(yīng)的類型

8. 實(shí)時(shí)交通圖

顯示實(shí)時(shí)交通路況的代碼如下:

_mapView.showTraffic= YES;

9.定位功能

9.1開啟定位

_mapView.showsUserLocation = YES; //YES 為打開定位,NO為關(guān)閉定位
當(dāng)位置更新時(shí),會(huì)進(jìn)定位回調(diào),通過回調(diào)函數(shù),能獲取到定位點(diǎn)的經(jīng)緯度坐標(biāo):

-(void)mapView:(MAMapView*)mapView didUpdateUserLocation: (MAUserLocation*)userLocation updatingLocation:(BOOL)updatingLocation
9.2后臺(tái)定位

app退到后臺(tái),且位置不變動(dòng)時(shí),也不會(huì)被系統(tǒng)掛起,可持久記錄位置信息。
1.添加代碼

_mapView.pausesLocationUpdatesAutomatically = NO;

2.工程配置
1)左側(cè)目錄中選中工程名,開啟 TARGETS->Capabilities->Background Modes
2)在 Background Modes中勾選 Location updates

10.大頭針標(biāo)注

地圖標(biāo)注在開發(fā)中經(jīng)常使用,并且地圖標(biāo)注樣式靈活,需要著重注意。
在地圖的基礎(chǔ),添加地圖標(biāo)注,需要兩步

  1. 創(chuàng)建地圖標(biāo)注MAPointAnnotation,添加地圖標(biāo)注[_mapView addAnnotation:annotation];
  2. mapView:viewForAnnotation:回調(diào)函數(shù),設(shè)置標(biāo)注樣式。
    這里添加標(biāo)注的代理方法,也可以把當(dāng)前位置當(dāng)做標(biāo)注一樣去顯示出來,比較靈活。

11.自定義標(biāo)注

自定義標(biāo)注圖標(biāo)(基于大頭針標(biāo)注,可以自定義樣式)

(1) 添加標(biāo)注數(shù)據(jù)對(duì)象,可參考大頭針標(biāo)注的步驟(1)。
(2) 導(dǎo)入標(biāo)記圖片文件到工程中。這里我們導(dǎo)入一個(gè)名為restauant.png的圖片文件。
(3) 在 協(xié)議的回調(diào)函數(shù)mapView:viewForAnnotation:中修改MAAnnotationView對(duì)應(yīng)的標(biāo)注圖片。
關(guān)鍵代碼:

annotationView.image = [UIImage imageNamed:@"restaurant"];
//設(shè)置中?心點(diǎn)偏移,使得標(biāo)注底部中間點(diǎn)成為經(jīng)緯度對(duì)應(yīng)點(diǎn)
annotationView.centerOffset = CGPointMake(0, -18);

詳見官方文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容