一:基本地圖功能實作
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.工程配置 1)左側目錄中選中工程名,開啟 TARGETS->Capabilities->Background Modes 2)在 Background Modes中勾選 Location updates
10.大頭針标注
地圖示注在開發中經常使用,并且地圖示注樣式靈活,需要着重注意。 在地圖的基礎,添加地圖示注,需要兩步 1. 建立地圖示注MAPointAnnotation,添加地圖示注[_mapView addAnnotation:annotation]; 2. mapView:viewForAnnotation:回調函數,設定标注樣式。 這裡添加标注的代理方法,也可以把目前位置當做标注一樣去顯示出來,比較靈活。
11.自定義标注
自定義标注圖示(基于大頭針标注,可以自定義樣式)
(1) 添加标注資料對象,可參考大頭針标注的步驟(1)。 (2) 導入标記圖檔檔案到工程中。這裡我們導入一個名為restauant.png的圖檔檔案。 (3) 在 協定的回調函數mapView:viewForAnnotation:中修改MAAnnotationView對應的标注圖檔。 關鍵代碼:
annotationView.image = [UIImage imageNamed:@"restaurant"];
//設定中⼼心點偏移,使得标注底部中間點成為經緯度對應點
annotationView.centerOffset = CGPointMake(0, -18);
詳見官方文檔
希望可以幫助大家 如果哪裡有什麼不對或者不足的地方,還望讀者多多提意見或建議 iOS技術交流群:668562416
源碼Demo擷取方法
關注「網羅開發」公衆号 ,有iOS demo、RN 視訊以及demo、Android demo等你領取。
http://weixin.qq.com/r/ry6guGjEODVHrSzb93u9 (二維碼自動識别)
小專欄:https://xiaozhuanlan.com/u/fanbaoying