介紹
高德地圖主要分為地圖開發、導航開發、定位開發、室內地圖、室內定位。總結一下在專案中用到的地圖開發。
Demo地址 DEMO比較簡單,整合了3d地圖和搜尋sdk,可以根據自己的需求新增功能。
一:基本地圖功能實現
1.申請金鑰流程
2.配置環境(重點)
高德地圖提供了兩種配置方式:
2.1手動配置
2.1.1 引入地相簿
MAMapKit.framework 檔案新增到工程中。
2.1.2 引入AMap.bundle資原始檔
AMap.bundle資原始檔中儲存了定位、預設大頭針標註檢視等圖片,可利用這些資源圖片進行開發。
左側目錄中選中工程名,在右鍵選單中選擇Add Files to “工程名”…,從MAMapKit.framework->Resources檔案中選擇AMap.bundle檔案,並勾選“Copy items if needed”核取方塊,單擊“Add”按鈕,將資原始檔新增到工程中。
資原始檔不是必須的,可以自定義資源圖片。
2.1.3引入系統庫
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 環境配置
在TARGETS->Build Settings->Other Linker Flags 中新增-ObjC。
V2.3.0(含)之前版本不支援arm64,需在 TARGETS->Build Settings->Architectures 點出選擇框,選擇 “Other”,將預設值修改為 $(ARCHS_STANDARD_32_BIT)。
2.2自動配置,(使用 CocoaPods 安裝 SDK)
為 高德 iOS 地圖 SDK 建立一個 Podfile,並使用它來安裝 SDK。
2.2.1 建立Podfile檔案
在您當前工程檔案(.xcodeproj)所在資料夾下建立一個名為 Podfile 的檔案。如果您尚未建立 Xcode 專案,請立即建立一個並將其儲存到您的本地計算機。 (如果您第一次接觸 iOS 開發,請建立一個Single View Application。)
$ touch Podfile
複製程式碼
2.2.2 編輯 Podfile 檔案
Podfile檔案內容如下:
platform :ios, `7.0` #手機的系統 target `YourProjectTarget` do pod `AMap3DMap` #3D地圖SDK #pod `AMap2DMap` #2D地圖SDK (2D和3D不能同時使用) pod `AMapSearch` #搜尋功能 end
複製程式碼
2.2.3 執行 pod install 命令安裝SDK
$pod install --repo-update
複製程式碼
1.1.0版本的pod,執行pod install 不會自動更新repo,如果下載的不是最新版,可使用pod install —repo-update 更新 或 先執行 pod repo update.
2.2.4 更新 SDK
如果您安裝的SDK不是最新版,請執行下面的程式碼進行更新。
pod repo update
複製程式碼
2.2.5 重啟 Xcode
關閉Xcode,然後開啟(雙擊)您專案的 .xcworkspace 檔案以啟動 Xcode。 從此刻開始,您必須使用 .xcworkspace 檔案開啟專案。
3.地圖的使用
3.1配置Info.plist 檔案
iOS9為了增強資料訪問安全,將所有的http請求都改為了https,為了能夠在iOS9中正常使用地圖SDK,請在”Info.plist”中進行如下配置,否則影響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檔案相應的方法中進行地圖初始化,初始化的步驟:
- 1.import MAMapKit.h 標頭檔案;
- 2.構造MAMapView物件;
- 3.將MAMapView新增到Subview中。
對於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地址 如果有所幫助記得關注,點Star
demo中新增了檢視路況功能,如果不需要,可以刪除。
二:自定義地圖功能
在上面功能的基礎上我們可以針對需求,自定義地圖功能,下面我就列舉出常用功能設定方法:
1.地圖Logo
預設的Logo為藍色字樣的“高德地圖”,顯示在地圖的左下方。地圖Logo不能移除,但可通過MAMapView.logoCenter屬性來調整Logo的顯示位置。在ViewController.m的viewDidLoad方法新增如下如下:
_mapView.logoCenter = CGPointMake(CGRectGetWidth(self.view.bounds)-55, 450);
複製程式碼
2.指南針
指南針預設是開啟狀態,顯示在地圖的右上角。
通過MAMapView的showsCompass屬性用來控制指南針的可見性。compassOrigin屬性可改變指南針的顯示位置。在ViewController.m的viewDidLoad方法新增如下如下:
_mapView.showsCompass= YES; // 設定成NO表示關閉指南針;YES表示顯示指南針
_mapView.compassOrigin= CGPointMake(_mapView.compassOrigin.x, 22); //設定指南針位置
複製程式碼
3.比例尺
比例尺表示地圖上兩點間距離與實際與之對應的兩點距離的比,在不同的縮放級別下,比例尺代表的長度也是不同的。
在iOS SDK中,比例尺預設顯示在地圖的左上角。MAMapView的showScale屬性用來控制比例尺的可見性,scaleOrigin屬性用來改變比例尺的顯示位置。在ViewController.m的viewDidLoad方法新增如下程式碼:
_mapView.showScale= YES; //設定成NO表示不顯示比例尺;YES表示顯示比例尺
_mapView.scaleOrigin= CGPointMake(_mapView.scaleOrigin.x, 22); //設定比例尺位置
複製程式碼
4.手勢控制
//縮放手勢
_mapView.zoomEnabled = NO; //NO表示禁用縮放手勢,YES表示開啟
//平移(滑動)手勢
_mapView.scrollEnabled = NO; //NO表示禁用滑動手勢,YES表示開啟
//旋轉手勢(3D)
_mapView.rotateEnabled= NO; //NO表示禁用旋轉手勢,YES表示開啟
//傾斜手勢(3D)
_mapView.rotateCameraEnabled= NO; //NO表示禁用傾斜手勢,YES表示開啟
複製程式碼
5.地圖操作
地圖縮放
地圖的縮放級別的範圍是[3-19],呼叫MAMapView的setZoomLevel方法設定地圖的縮放級別,用來縮放地圖。示例程式碼如下:
[_mapView setZoomLevel:17.5 animated:YES];
複製程式碼
地圖平移
[_mapView setCenterCoordinate:center animated:YES];
複製程式碼
地圖旋轉(3D)
旋轉角度的範圍是[0.f 360.f],以逆時針為正向。示例程式碼如下:
[_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.衛星圖
//顯示衛星地圖
_mapView.mapType = MAMapTypeSatellite;
複製程式碼
說明:地圖型別切換隻需將地圖型別設定成相應的型別
8. 實時交通圖
顯示實時交通路況的程式碼如下:
_mapView.showTraffic= YES;
複製程式碼
9.定位功能
9.1 開啟定位
_mapView.showsUserLocation = YES; //YES 為開啟定位,NO為關閉定位
當位置更新時,會進定位回撥,通過回撥函式,能獲取到定位點的經緯度座標:
-(void)mapView:(MAMapView*)mapView didUpdateUserLocation: (MAUserLocation*)userLocation updatingLocation:(BOOL)updatingLocation
複製程式碼
9.2 後臺定位
app退到後臺,且位置不變動時,也不會被系統掛起,可持久記錄位置資訊。
1.新增程式碼
_mapView.pausesLocationUpdatesAutomatically = NO;
複製程式碼
2.工程配置
-
左側目錄中選中工程名,開啟 TARGETS->Capabilities->Background Modes
-
在 Background Modes中勾選 Location updates
10.大頭針標註
地圖示註在開發中經常使用,並且地圖示註樣式靈活,需要著重注意。
在地圖的基礎,新增地圖示註,需要兩步
- 建立地圖示註MAPointAnnotation,新增地圖示註[_mapView addAnnotation:annotation];
- mapView:viewForAnnotation:回撥函式,設定標註樣式。
這裡新增標註的代理方法,也可以把當前位置當做標註一樣去顯示出來,比較靈活。
11.自定義標註
自定義標註圖示(基於大頭針標註,可以自定義樣式)
(1) 新增標註資料物件,可參考大頭針標註的步驟(1)。
(2) 匯入標記圖片檔案到工程中。這裡我們匯入一個名為restauant.png的圖片檔案。
(3) 在 協議的回撥函式mapView:viewForAnnotation:中修改MAAnnotationView對應的標註圖片。
關鍵程式碼:
annotationView.image = [UIImage imageNamed:@"restaurant"];
//設定中⼼心點偏移,使得標註底部中間點成為經緯度對應點
annotationView.centerOffset = CGPointMake(0, -18);
複製程式碼
希望可以幫助大家,如有問題可加QQ群: 668562416 交流
如果哪裡有什麼不對或者不足的地方,還望讀者多多提意見或建議
如需轉載請聯絡我,經過授權方可轉載,謝謝