iOS 高德地圖SDK集成初試

前言

入職新公司后接手的新項目使用OC開發(fā)镀钓,項目主要功能里涉及地圖開發(fā)帮孔,技術選型上使用高德地圖服務,本篇博客主要記錄高德地圖SDK的集成以及相關使用泊碑。

環(huán)境配置

OC, Xcode 9.4.1

注冊

首先在高德開發(fā)平臺注冊一個賬號毯欣,注冊流程略馒过。注冊完成后,我們需要在控制臺“我的應用”里創(chuàng)建一個應用酗钞,根據(jù)使用的平臺創(chuàng)建相應的Key腹忽。

創(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)類似效果圖如下:

折線喘垂、標記點
圓甜刻、標記點

相關參考

高德地圖iOS SDK

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末绍撞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子得院,更是在濱河造成了極大的恐慌傻铣,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祥绞,死亡現(xiàn)場離奇詭異非洲,居然都是意外死亡,警方通過查閱死者的電腦和手機蜕径,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門两踏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人丧荐,你說我怎么就攤上這事缆瓣⌒希” “怎么了虹统?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長隧甚。 經常有香客問我车荔,道長,這世上最難降的妖魔是什么戚扳? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任忧便,我火速辦了婚禮,結果婚禮上帽借,老公的妹妹穿的比我還像新娘珠增。我一直安慰自己,他們只是感情好砍艾,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布蒂教。 她就那樣靜靜地躺著,像睡著了一般脆荷。 火紅的嫁衣襯著肌膚如雪凝垛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天蜓谋,我揣著相機與錄音梦皮,去河邊找鬼。 笑死桃焕,一個胖子當著我的面吹牛剑肯,可吹牛的內容都是我干的。 我是一名探鬼主播观堂,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼让网,長吁一口氣:“原來是場噩夢啊……” “哼岖妄!你這毒婦竟也來了踊跟?” 一聲冷哼從身側響起拐格,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎昌屉,沒想到半個月后丸凭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體福扬,經...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年惜犀,在試婚紗的時候發(fā)現(xiàn)自己被綠了铛碑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡虽界,死狀恐怖汽烦,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情莉御,我是刑警寧澤撇吞,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站礁叔,受9級特大地震影響牍颈,放射性物質發(fā)生泄漏。R本人自食惡果不足惜琅关,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一煮岁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涣易,春花似錦画机、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至账劲,卻和暖如春戳护,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瀑焦。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工腌且, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人榛瓮。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓铺董,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子精续,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內容