高德地圖主要分爲地圖開發、導航開發、定位開發、室內地圖、室內定位。總結一下在項目中用到的地圖開發。 Demo地址 DEMO比較簡單,集成了3d地圖和搜索sdk,能夠根據本身的需求添加功能。ios
申請密鑰連接c++
高德地圖提供了兩種配置方式:git
2.1.1 引入地圖庫github
MAMapKit.framework 文件添加到工程中。api
2.1.2 引入AMap.bundle資源文件xcode
AMap.bundle資源文件中存儲了定位、默認大頭針標註視圖等圖片,可利用這些資源圖片進行開發。 左側目錄中選中工程名,在右鍵菜單中選擇Add Files to 「工程名」…,從MAMapKit.framework->Resources文件中選擇AMap.bundle文件,並勾選「Copy items if needed」複選框,單擊「Add」按鈕,將資源文件添加到工程中。 資源文件不是必須的,能夠自定義資源圖片。安全
2.1.3引入系統庫bash
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 環境配置app
在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC。 V2.3.0(含)以前版本不支持arm64,需在 TARGETS->Build Settings->Architectures 點出選擇框,選擇 「Other」,將默認值修改成 $(ARCHS_STANDARD_32_BIT)。函數
爲 高德 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 文件打開項目。
iOS9爲了加強數據訪問安全,將全部的http請求都改成了https,爲了可以在iOS9中正常使用地圖SDK,請在"Info.plist"中進行以下配置,不然影響SDK的使用。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true></true>
</dict>
複製代碼
#import <AMapFoundationKit/AMapFoundationKit.h>
//須要引入AMapFoundationKit.h頭文件
……
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[AMapServices sharedServices].apiKey = @"您的Key";
……
}
複製代碼
在ViewController.m文件相應的方法中進行地圖初始化,初始化的步驟:
#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中添加了查看路況功能,若是不須要,能夠刪除。
在上面功能的基礎上咱們能夠針對需求,自定義地圖功能,下面我就列舉出經常使用功能設置方法:
默認的Logo爲藍色字樣的「高德地圖」,顯示在地圖的左下方。地圖Logo不能移除,但可經過MAMapView.logoCenter屬性來調整Logo的顯示位置。在ViewController.m的viewDidLoad方法添加以下以下:
_mapView.logoCenter = CGPointMake(CGRectGetWidth(self.view.bounds)-55, 450);
複製代碼
指南針默認是開啓狀態,顯示在地圖的右上角。 經過MAMapView的showsCompass屬性用來控制指南針的可見性。compassOrigin屬性可改變指南針的顯示位置。在ViewController.m的viewDidLoad方法添加以下以下:
_mapView.showsCompass= YES; // 設置成NO表示關閉指南針;YES表示顯示指南針
_mapView.compassOrigin= CGPointMake(_mapView.compassOrigin.x, 22); //設置指南針位置
複製代碼
比例尺表示地圖上兩點間距離與實際與之對應的兩點距離的比,在不一樣的縮放級別下,比例尺表明的長度也是不一樣的。 在iOS SDK中,比例尺默認顯示在地圖的左上角。MAMapView的showScale屬性用來控制比例尺的可見性,scaleOrigin屬性用來改變比例尺的顯示位置。在ViewController.m的viewDidLoad方法添加以下代碼:
_mapView.showScale= YES; //設置成NO表示不顯示比例尺;YES表示顯示比例尺
_mapView.scaleOrigin= CGPointMake(_mapView.scaleOrigin.x, 22); //設置比例尺位置
複製代碼
//縮放手勢
_mapView.zoomEnabled = NO; //NO表示禁用縮放手勢,YES表示開啓
//平移(滑動)手勢
_mapView.scrollEnabled = NO; //NO表示禁用滑動手勢,YES表示開啓
//旋轉手勢(3D)
_mapView.rotateEnabled= NO; //NO表示禁用旋轉手勢,YES表示開啓
//傾斜手勢(3D)
_mapView.rotateCameraEnabled= NO; //NO表示禁用傾斜手勢,YES表示開啓
複製代碼
地圖縮放 地圖的縮放級別的範圍是[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];
複製代碼
CGRect inRect = CGRectMake(80,142,160,284);
UIImage *screenshotImage = [_mapView takeSnapshotInRect:inRect] ;
複製代碼
//顯示衛星地圖
_mapView.mapType = MAMapTypeSatellite;
複製代碼
說明:地圖類型切換隻需將地圖類型設置成相應的類型
顯示實時交通路況的代碼以下:
_mapView.showTraffic= YES;
複製代碼
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
地圖標註在開發中常常使用,而且地圖標註樣式靈活,須要着重注意。 在地圖的基礎,添加地圖標註,須要兩步
自定義標註圖標(基於大頭針標註,能夠自定義樣式)
(1) 添加標註數據對象,可參考大頭針標註的步驟(1)。
(2) 導入標記圖片文件到工程中。這裏咱們導入一個名爲restauant.png的圖片文件。
(3) 在 協議的回調函數mapView:viewForAnnotation:中修改MAAnnotationView對應的標註圖片。 關鍵代碼:
annotationView.image = [UIImage imageNamed:@"restaurant"];
//設置中⼼心點偏移,使得標註底部中間點成爲經緯度對應點
annotationView.centerOffset = CGPointMake(0, -18);
複製代碼
但願能夠幫助你們,若有問題可加QQ羣: 668562416 交流
若是哪裏有什麼不對或者不足的地方,還望讀者多多提意見或建議
如需轉載請聯繫我,通過受權方可轉載,謝謝