前言
入職新公司后接手的新項目使用OC開發(fā)镀钓,項目主要功能里涉及地圖開發(fā)帮孔,技術選型上使用高德地圖服務,本篇博客主要記錄高德地圖SDK的集成以及相關使用泊碑。
環(huán)境配置
OC, Xcode 9.4.1
注冊
首先在高德開發(fā)平臺注冊一個賬號毯欣,注冊流程略馒过。注冊完成后,我們需要在控制臺“我的應用”里創(chuàng)建一個應用酗钞,根據(jù)使用的平臺創(chuàng)建相應的Key腹忽。
引入SDK
這里我們使用CocoaPods來管理高德地圖的SDK来累。在項目的podfile里根據(jù)需要添加以下SDK。
pod 'AMap2DMap' #高德2D地圖SDK
pod 'AMap3DMap' #高德3D地圖SDK
pod 'AMapLocation' #高德定位SDK
pod 'AMapSearch' #高德地圖搜索SDK
pod 'AMapTrack' #高德獵鷹SDK
注意:高德2D地圖和3D地圖SDK不能同時引入窘奏,其主要差別在于:2D地圖是柵格地圖嘹锁,采用切片的方式顯示地圖,3D地圖為矢量地圖着裹,采用終端繪制地圖的方式领猾,地圖功能更加豐富。
功能使用
啟動SDK
在引入頭文件#import<AMapFoundationKit/AMapFoundationKit.h>后骇扇,調用以下方法配置高德服務的key摔竿。
[AMapServices sharedServices].apiKey =@"您的key";
顯示地圖
實例化一個地圖,添加到控制器的view上少孝。我們讓控制器持有一個地圖屬性继低,在該屬性的get方法里配置地圖的功能。
- (MAMapView *)mapView {
if (!_mapView) {
_mapView = [[MAMapView alloc] initWithFrame: self.view.bounds];
// 顯示比例尺
_mapView.showsScale = NO;
// 顯示指南針
_mapView.showsCompass = NO;
// 顯示定位藍點
_mapView.showsUserLocation = YES;
// 用戶定位模式
_mapView.userTrackingMode = MAUserTrackingModeFollow;
// 設置縮放級別
[_mapView setZoomLevel:15];
// 設置當前地圖的中心點:例如默認地圖中心顯示坐標為(39.9088230000, 116.3974700000)
_mapView.centerCoordinate = CLLocationCoordinate2DMake(39.9088230000, 116.3974700000);
}
return _mapView;
}
繪制標記點稍走、折線袁翁、面
通過實現(xiàn)MAMapViewDelegate的相關代理方法實現(xiàn)地圖繪制。
標記點
/**
* @brief 根據(jù)anntation生成對應的View
* @param mapView 地圖View
* @param annotation 指定的標注
* @return 生成的標注View
*/
- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id<MAAnnotation>)annotation {
if ([annotation isKindOfClass:[MAPointAnnotation class]]) {
static NSString *reuseIndetifier = @"annotationReuseIndetifier";
MAAnnotationView *annotationView = (MAAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:reuseIndetifier];
if (annotationView == nil) {
annotationView = [[MAAnnotationView alloc] initWithAnnotation:annotation
reuseIdentifier:reuseIndetifier];
}
// 設置標記點的圖片
// annotationView.image = ;
// 設置中心點偏移婿脸,使得標注底部中間點成為經緯度對應點
// annotationView.centerOffse =
return annotationView;
}
return nil;
}
標注可以精確表示用戶需要展示的位置信息粱胜,高德地圖SDK提供的標注功能允許用戶自定義圖標和信息窗,同時提供了標注的點擊狐树、拖動事件的回調焙压。SDK 提供的地圖標注為MAAnnotation類,不同的標記可以根據(jù)圖標和改變信息窗的樣式和內容加以區(qū)分褪迟。
iOS SDK提供的大頭針標注MAPinAnnotationView冗恨,通過它可以設置大頭針顏色、是否顯示動畫味赃、是否支持長按后拖拽大頭針改變坐標等掀抹。
通過以下方法添加標注。
// 1 實例化MAPointAnnotation類
MAPointAnnotation *pointAnnotation = [[MAPointAnnotation alloc] init];
// 2 設置標注點的坐標
pointAnnotation.coordinate = CLLocationCoordinate2DMake(coordinate.latitude, coordinate.longitude);
// 3 調用地圖的addAnnotation方法將標注點添加到地圖上
[self.mapView addAnnotation:pointAnnotation];
折線心俗、面
/**
* @brief 根據(jù)overlay生成對應的Renderer
* @param mapView 地圖View
* @param overlay 指定的overlay
* @return 生成的覆蓋物Renderer
*/
- (MAOverlayRenderer *)mapView:(MAMapView *)mapView rendererForOverlay:(id <MAOverlay>)overlay
{
// 線
if ([overlay isKindOfClass:[MAPolyline class]]) {
MAPolylineRenderer *polylineRenderer = [[MAPolylineRenderer alloc] initWithPolyline:overlay];
// 線寬
polylineRenderer.lineWidth = 3.f;
// 顏色
polylineRenderer.strokeColor = [self markColor];
return polylineRenderer;
}
// 圓形
if ([overlay isKindOfClass:[MACircle class]]) {
MACircleRenderer *circleRenderer = [[MACircleRenderer alloc] initWithCircle:overlay];
circleRenderer.lineWidth = 0;
circleRenderer.strokeColor = [[self markColor] colorWithAlphaComponent:0.2];
circleRenderer.fillColor = [[self markColor] colorWithAlphaComponent:0.2];
return circleRenderer;
}
return nil;
}
折線類為 MAPolyline傲武,由一組經緯度坐標組成,并以有序序列形式建立一系列的線段城榛。iOS SDK支持在3D矢量地圖上繪制帶箭頭或有紋理等樣式的折線揪利,同時可設置折線端點和連接點的類型,以滿足各種繪制線的場景狠持。
//構造折線數(shù)據(jù)對象
CLLocationCoordinate2D commonPolylineCoords[4];
commonPolylineCoords[0].latitude = 39.832136;
commonPolylineCoords[0].longitude = 116.34095;
commonPolylineCoords[1].latitude = 39.832136;
commonPolylineCoords[1].longitude = 116.42095;
commonPolylineCoords[2].latitude = 39.902136;
commonPolylineCoords[2].longitude = 116.42095;
commonPolylineCoords[3].latitude = 39.902136;
commonPolylineCoords[3].longitude = 116.44095;
//構造折線對象
MAPolyline *commonPolyline = [MAPolyline polylineWithCoordinates:commonPolylineCoords count:4];
//在地圖上添加折線對象
[_mapView addOverlay: commonPolyline];
通過MACircle類繪制圓疟位,圓是由中心點(經緯度)和半徑(米)構成。
//構造圓
MACircle *circle = [MACircle circleWithCenterCoordinate:CLLocationCoordinate2DMake(39.952136, 116.50095) radius:5000];
//在地圖上添加圓
[_mapView addOverlay: circle];
可實現(xiàn)類似效果圖如下: