高德地圖地圖的使用
前期準備
導入高德地圖”AMap3DMap/AMap2DMap SDK”(導入可以分為手動導入和自動導入兩種方式:
a.手動導入:在高德開發(fā)者平臺下載SDK并添加到項目中;
b.自動導入:在終端配置cocoapods工具,輸入” $ sudo gem install cocoapods”,具體了解請參閱cocopods入門指南,并在Xcode工程中創(chuàng)建podfile文件,在文件中pod ‘AMap3DMap’ #3D地圖, pod ‘AMap2Map’ #2D地圖
(注:手動導入后需在工程中添加必要的依賴庫)
申請iOS Key:
請到高德開放平臺控制臺申請;
配置Info.plist文件
iOS9為了增強數(shù)據(jù)訪問安全,將所有的http請求都改為了https,為了能夠在iOS9中能夠正常的使用地圖,請在Info.plist中進行一下配置,否則影響SDK的使用.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true></true>
</dict>
配置完成后將之前申請的Key值至工程中的Appdelegate.m文件中.具體代碼如下:
地圖的展示
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
///地圖需要v4.5.0及以上版本才必須要打開此選項(v4.5.0以下版本,需要手動配置info.plist)
[AMapServices sharedServices].enableHTTPS = YES;
///初始化地圖
MAMapView *_mapView = [[MAMapView alloc] initWithFrame:self.view.bounds];
///把地圖添加至view
[self.view addSubview:_mapView];
}
顯示定位藍點
首先需要配置頭文件:在需要顯示地圖的控制器中導入:
import <MAMapKit/MAMapKit.h>
import <AMapFoundationKit/AMapFoundationKit.h>
創(chuàng)建地圖對象代碼如下:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
///地圖需要v4.5.0及以上版本才必須要打開此選項(v4.5.0以下版本二驰,需要手動配置info.plist)
[AMapServices sharedServices].enableHTTPS = YES;
///初始化地圖
MAMapView *_mapView = [[MAMapView alloc] initWithFrame:self.view.bounds];
///把地圖添加至view
[self.view addSubview:_mapView];
///如果您需要進入地圖就顯示定位小藍點抱婉,則需要下面兩行代碼
_mapView.showsUserLocation = YES;
_mapView.userTrackingMode = MAUserTrackingModeFollow;
}
配置定位權限
在Info.plist中配置定位權限,如下圖所示:
定位權限有三種,可根據(jù)項目需求自行選擇:
切換地圖圖層
iOS地圖SDK提供了幾種預置的地圖圖層.包括:衛(wèi)星圖,白晝地圖,黑夜地圖,導航地圖,路況圖.修改枚舉類型進行設置.
切換代碼如下:
- (void)setupMapView
{
self.mapView = [[MAMapView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:self.mapView];
//設置底圖種類為衛(wèi)星圖
[self.mapView setMapType:MAMapTypeSatellite];
}
地圖控件交互:
a.地圖logo”高德地圖”默認是顯示的并不能隱藏,但是我們可以通過修改logo通過調整logo的位置來做到隱藏的目的,代碼如下:
_mapView.logoCenter = CGPointMake(CGRectGetWidth(self.view.bounds) – 55, 60);
b.指南針控件
通過修改showscompass屬性來控制是否顯示指南針(YES顯示,NO不顯示):
_mapView.showscompass = YES;
通過修改compassOrigin來改變指南針的默認位置:
_mapView.compassOrigin = CGPointMake(x, y);
c.比例尺控件
通過修改showScale來控制比例尺的顯示與隱藏,YES為顯示,NO為不顯示.
_mapView.showScale = YES;
通過修改scaleOrigin來修改比例尺默認顯示的位置:
_mapView.scaleOrigin = CGPointMake(x, y);
手勢交互
手勢列表:
可以通過MAMapView的scrollEnabled屬性可以禁止或者啟用手勢,YES為開啟,NO為禁止;
a. 可以通過修改MAMapView的setZoomLevel方法設置地圖的縮放級別(縮放級別的范圍為3到19):代碼如下:
[_mapView setZoomLevel:17.5 animated:YES];
b. 拖動手勢
拖動地圖的時候可以通過改變地圖中心點的位置來移動地圖,代碼如下:
[_mapView setCenterCoordinate:center animated:YES];
c. 旋轉手勢
通過修改MAMapView的rotateEnable屬性禁止過開啟旋轉手勢(YES:開啟, NO:禁止)
調用MAMapView的setRotationDegress方法設置地圖的旋轉角度(旋轉角度的范圍為[0.0f – 360.0f]);代碼如下;
[_mapView setRotationDress:60.0f animated:YES duration:0.5];
d. 傾斜手勢:
通過修改MAMapView的rotateCameraEnabled屬性禁止或啟用傾斜手勢(YES:開啟, NO:禁止)
調用MAMapView說我setCameraDeress方法設置地圖的傾斜角度(傾斜范圍為[0.f – 45.f]);代碼如下:
[_mapView setCameraDress:20.f animated:YES duration:0.5];
方法交互
限制地圖的顯示范圍:
使用場景:針對需要展示部分固定范圍的地圖;代碼如下:
_boundary = MACoordinateRegionMake(CLLocationCoordinate2DMake(40, 116), MACoordinateSpanMake(2, 2));
MAMapRect mapRect = MAMapRectForCoordinateRegion(_boundary);
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
//注意呛凶,不要viewWillAppear里設置
[self.mapView setLimitRegion:self.boundary];
}
地圖截屏功能
iOS SDK支持對選定的屏幕地圖區(qū)域(CGRect)進行截屏,截屏內容包括:地圖,覆蓋物,彈出的氣泡;
說明:地圖截屏功能依賴于地圖顯示,即只有內容先顯示在地圖上,才能進行截屏.
使用MAMapView中的takeSnapshortInRect方法進行截屏,該方法返回UIImage對象,代碼如下:
__block UIImage *screenshotImage = nil;
__block NSInteger resState = 0;
[self.mapView takeSnapshotInRect:inRect withCompletionBlock:^(UIImage *resultImage, NSInteger state) {
screenshotImage = resultImage;
resState = state; // state表示地圖此時是否完整布近,0-不完整玲献,1-完整
}];
iOS地圖導航SDK
iOS 導航 SDK 是一款針對在線導航的產(chǎn)品港庄,產(chǎn)品功能涵蓋路徑規(guī)劃甸祭、模擬導航、GPS 定位善已、自定義導航界面灼捂、獲取導航播報信息等。此外雕拼,該產(chǎn)品的導航路徑計算與實時交通信息相結合纵东,力求為用戶提供更加合理、準確啥寇、人性化的導航服務偎球。
實時導航代碼如下:
第一步:創(chuàng)建AMapNaviDriveView
- (void)initDriveView
{
if (self.driveView == nil)
{
self.driveView = [[AMapNaviDriveView alloc] initWithFrame:self.view.bounds];
self.driveView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
[self.driveView setDelegate:self];
[self.view addSubview:self.driveView];
}
}
第二步:創(chuàng)建AMapNaviDriveManager
- (void)initDriveManager
{
if (self.driveManager == nil)
{
self.driveManager = [[AMapNaviDriveManager alloc] init];
[self.driveManager setDelegate:self];
//將driveView添加為導航數(shù)據(jù)的Representative,使其可以接收到導航誘導數(shù)據(jù)
[self.driveManager addDataRepresentative:self.driveView];
}
}
第三步:進行路線規(guī)劃
a:初始化
- 初始化導航的起點和終點坐標
- (void)initProperties
{
self.startPoint = [AMapNaviPoint locationWithLatitude:39.99 longitude:116.47];
self.endPoint = [AMapNaviPoint locationWithLatitude:39.90 longitude:116.32];
}
- 初始化MAMapView
- (void)initMapView
{
if (self.mapView == nil)
{
self.mapView = [[MAMapView alloc] initWithFrame:CGRectMake(0, kRoutePlanInfoViewHeight,
self.view.bounds.size.width,
self.view.bounds.size.height - kRoutePlanInfoViewHeight)];
[self.mapView setDelegate:self];
[self.view addSubview:self.mapView];
}
}
- 初始化AMapNaviDriveManager
- (void)initDriveManager
{
if (self.driveManager == nil)
{
self.driveManager = [[AMapNaviDriveManager alloc] init];
[self.driveManager setDelegate:self];
}
}
b:計算駕車規(guī)劃路線
[self.driveManager calculateDriveRouteWithStartPoints:@[self.startPoint]
endPoints:@[self.endPoint]
wayPoints:nil
drivingStrategy:17];
c:處理結果
- (void)driveManagerOnCalculateRouteSuccess:(AMapNaviDriveManager *)driveManager
{
NSLog(@"onCalculateRouteSuccess");
//顯示路徑或開啟導航
}
第四步:開始實時導航
- (void)driveManagerOnCalculateRouteSuccess:(AMapNaviDriveManager *)driveManager
{
NSLog(@"onCalculateRouteSuccess");
//算路成功后開始GPS導航
[self.driveManager startGPSNavi];
}