iOS 高德地圖的使用

iOS:高德地圖的使用

本人花了點(diǎn)時(shí)間集成了高德地圖的幾乎所有的功能荐操,包含:地圖的顯示骡澈、地圖的繪制票髓、地圖的定位攀涵、地圖的POI數(shù)據(jù)檢索、地圖的線路規(guī)劃洽沟、地圖導(dǎo)航等下載地址如下https://github.com/xiayuanquan/AliMapKit.git,覺(jué)得有用就點(diǎn)個(gè)star吧R怨省!裆操!

一怒详、介紹

地圖定位技術(shù)越來(lái)越成熟,包括定位(地理編碼和反編碼)踪区、跟蹤(圍欄和區(qū)域)昆烁、POI檢索、導(dǎo)航缎岗、路線規(guī)劃(出行)等等静尼,極大的方便了人們的衣食住行。當(dāng)然密强,做地圖SDK的公司不在少數(shù)茅郎。其中最出名的當(dāng)屬百度的百度地圖蜗元、阿里的高德地圖或渤,他們的SDK都做的很不錯(cuò),封裝性高奕扣,集成簡(jiǎn)單薪鹦。做過(guò)百度地圖,現(xiàn)在來(lái)搞搞高德地圖惯豆,據(jù)說(shuō)更靈敏性池磁。

二、準(zhǔn)備

(1)去高德地圖開(kāi)發(fā)網(wǎng)站注冊(cè)賬號(hào)并登陸:http://lbs.amap.com

(2)去控制臺(tái)創(chuàng)建應(yīng)用楷兽,獲取AppKey地熄,在代碼中需要使用它激活SDK

(3)去開(kāi)發(fā)文檔中,找到iOS這塊的地圖相關(guān)技術(shù)芯杀,點(diǎn)進(jìn)行按照文檔步驟一步步集成即可(包含各種功能端考,絕對(duì)夠你用)

三雅潭、在plist配置字段

定位權(quán)限

NSLocationAlwaysUsageDescription:一直定位

NSLocationWhenInUseUsageDescription:需要時(shí)定位

ATS設(shè)置:Https協(xié)議

四、下載SDK却特,開(kāi)始集成

建議使用pod集成扶供,安全快速,它會(huì)自動(dòng)幫你添加各種依賴(lài)庫(kù)

Podfile

platform :ios,'8.0'#手機(jī)的系統(tǒng)

target'YourProjectTarget'do#工程名字

pod'AMapLocation'#定位 SDKend

teminal終端安裝

$pod install//安裝

五裂明、開(kāi)始使用(文檔寫(xiě)的相當(dāng)具體椿浓,使用過(guò)程都差不多,手賤隨便寫(xiě)了一個(gè)過(guò)程闽晦,看文檔看文檔扳碍。。尼荆。左腔。。捅儒。液样。)

<1>單次定位(app啟動(dòng)后只會(huì)定位一次)

引入頭文件

//引入AMapFoundationKit.h和AMapLocationKit.h這兩個(gè)頭文件:#import#import

配置Key

//在調(diào)用定位時(shí),需要添加Key巧还,需要注意的是請(qǐng)?jiān)?SDK 任何類(lèi)的初始化以及方法調(diào)用之前設(shè)置正確的 Key鞭莽。//如果您使用的是定位SDK v2.x版本需要引入基礎(chǔ) SDK AMapLocationKit.framework ,設(shè)置apiKey的方式如下://iOS 定位SDK v2.x版本設(shè)置 Key:[AMapServices sharedServices].apiKey=@"您的key";//如果您使用的是定位SDK v1.x版本麸祷,請(qǐng)您盡快更新澎怒。//iOS 定位SDK v1.x版本設(shè)置 Key:[AMapLocationServices sharedServices].apiKey =@"您的key";

設(shè)置期望定位精度

//由于蘋(píng)果系統(tǒng)的首次定位結(jié)果為粗定位,其可能無(wú)法滿(mǎn)足需要高精度定位的場(chǎng)景阶牍。//所以喷面,高德提供了 kCLLocationAccuracyBest 參數(shù),設(shè)置該參數(shù)可以獲取到精度在10m左右的定位結(jié)果走孽,但是相應(yīng)的需要付出比較長(zhǎng)的時(shí)間(10s左右)惧辈,越高的精度需要持續(xù)定位時(shí)間越長(zhǎng)。

//推薦:kCLLocationAccuracyHundredMeters磕瓷,一次還不錯(cuò)的定位盒齿,偏差在百米左右,超時(shí)時(shí)間設(shè)置在2s-3s左右即可困食。

//高精度:kCLLocationAccuracyBest边翁,可以獲取精度很高的一次定位,偏差在十米左右硕盹,超時(shí)時(shí)間請(qǐng)?jiān)O(shè)置到10s符匾,如果到達(dá)10s時(shí)沒(méi)有獲取到足夠精度的定位結(jié)果,會(huì)回調(diào)當(dāng)前精度最高的結(jié)果瘩例。

//帶逆地理信息的一次定位(返回坐標(biāo)和地址信息)[self.locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters];

//定位超時(shí)時(shí)間啊胶,最低2s芒澜,此處設(shè)置為2sself.locationManager.locationTimeout =2;

//逆地理請(qǐng)求超時(shí)時(shí)間,最低2s创淡,此處設(shè)置為2sself.locationManager.reGeocodeTimeout =2;

//帶逆地理信息的一次定位(返回坐標(biāo)和地址信息)[self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];

//定位超時(shí)時(shí)間痴晦,最低2s,此處設(shè)置為10sself.locationManager.locationTimeout =10;

//逆地理請(qǐng)求超時(shí)時(shí)間琳彩,最低2s誊酌,此處設(shè)置為10sself.locationManager.reGeocodeTimeout =10;

請(qǐng)求定位并拿到結(jié)果

//調(diào)用 AMapLocationManager 的 requestLocationWithReGeocode:completionBlock: 方法,請(qǐng)求一次定位露乏。//您可以選擇在一次定位時(shí)是否返回地址信息(需要聯(lián)網(wǎng))碧浊。以下是請(qǐng)求帶逆地理信息的一次定位,代碼如下://帶逆地理(返回坐標(biāo)和地址信息)瘟仿。將下面代碼中的 YES 改成 NO 箱锐,則不會(huì)返回地址信息。[self.locationManager requestLocationWithReGeocode:YES completionBlock:^(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error) {if(error)

{

NSLog(@"locError:{%ld - %@};", (long)error.code, error.localizedDescription);if(error.code ==AMapLocationErrorLocateFailed)

{return;

}

}

NSLog(@"location:%@", location);if(regeocode)

{

NSLog(@"reGeocode:%@", regeocode);

}

}];

<2>后臺(tái)定位(app在后臺(tái)進(jìn)行定位)

文檔鏈接:http://lbs.amap.com/api/ios-location-sdk/guide/get-location/backgroundlocation/#header-file

<3>持續(xù)定位(app啟動(dòng)后會(huì)一直定位)

文檔鏈接:http://lbs.amap.com/api/ios-location-sdk/guide/get-location/seriallocation/

<4>地理圍欄(當(dāng)設(shè)備進(jìn)入劳较、離開(kāi)該區(qū)域時(shí)驹止,可以接收到消息通知)

文檔鏈接:http://lbs.amap.com/api/ios-location-sdk/guide/additional-func/local-geofence/

<5>位置區(qū)域判斷(判斷是否在大陸或以外區(qū)域)

文檔鏈接:http://lbs.amap.com/api/ios-location-sdk/guide/additional-func/amap-calculate-tool/

...........

...........

...........等等

六、SDK中幾個(gè)重要的頭文件介紹

注意1:這里面介紹的POI是使用高德地圖App自己的功能观蜗,在plist配置后臊恋,真機(jī)測(cè)試時(shí)會(huì)自動(dòng)打開(kāi)該app

注意2:這里面介紹的POI是自定義檢索(一般都是用這個(gè))

注意3:這里面介紹的是導(dǎo)航所用全部類(lèi)文件

七、我在項(xiàng)目中用到的定位

給AppDelete創(chuàng)建了一個(gè)分類(lèi)墓捻,運(yùn)行時(shí)綁定屬性抖仅。app啟動(dòng)后可以在需要的地方啟動(dòng)定位,然后通過(guò)block可以回傳到任何需要經(jīng)緯度位置的控制器中

.h文件

////AppDelegate+DDLocation.h//BiaoJiePay////Created by 夏遠(yuǎn)全 on 16/11/21.//Copyright ? 2016年 廣州東德科技. All rights reserved.//#import"AppDelegate.h"/**

*? 聲明block,傳遞經(jīng)緯度砖第、反編碼撤卢、定位是否成功、顯示框*/typedefvoid(^LocationPosition)(CLLocation *currentLocation,AMapLocationReGeocode *regeocode,BOOL isLocationSuccess,MBProgressHUD *hud);@interfaceAppDelegate (DDLocation)

@property (copy,nonatomic)LocationPosition locationBlock;//定位到位置的block@property (strong,nonatomic)AMapLocationManager *locationManager;//管理者//啟動(dòng)定位服務(wù)-(void)startLocation;//接收位置block-(void)receiveLocationBlock:(LocationPosition)block;@end

.m文件

////AppDelegate+DDLocation.m//BiaoJiePay////Created by 夏遠(yuǎn)全 on 16/11/21.//Copyright ? 2016年 廣州東德科技. All rights reserved.//#import"AppDelegate+DDLocation.h"staticconstNSString *locationBlockKey? =@"locationBlockKey";staticconstNSString *locationManagerKey =@"locationManagerKey";@implementationAppDelegate (DDLocation)/**

*? 動(dòng)態(tài)關(guān)聯(lián)屬性*/-(void)setLocationBlock:(LocationPosition)locationBlock{

objc_setAssociatedObject(self,&locationBlockKey , locationBlock, OBJC_ASSOCIATION_RETAIN);

}-(LocationPosition)locationBlock{returnobjc_getAssociatedObject(self, &locationBlockKey);

}-(void)setLocationManager:(AMapLocationManager *)locationManager{

objc_setAssociatedObject(self,&locationManagerKey , locationManager, OBJC_ASSOCIATION_RETAIN);

}-(AMapLocationManager *)locationManager{returnobjc_getAssociatedObject(self, &locationManagerKey);

}/**

*? 啟動(dòng)定位服務(wù)*/-(void)startLocation{//1梧兼、注冊(cè)高德地圖APPKey[AMapServices sharedServices].apiKey =@"ff223cc0xxxxxxxxxxxx";//2放吩、設(shè)置定位精度self.locationManager =[[AMapLocationManager alloc] init];//帶逆地理信息的一次定位(返回坐標(biāo)和地址信息)[self.locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters];//定位超時(shí)時(shí)間,最低2s袱院,此處設(shè)置為2sself.locationManager.locationTimeout =2;//逆地理請(qǐng)求超時(shí)時(shí)間屎慢,最低2s瞭稼,此處設(shè)置為2sself.locationManager.reGeocodeTimeout =2;//3.創(chuàng)建定位管理者//帶逆地理(返回坐標(biāo)和地址信息忽洛。將下面代碼中的 YES改成NO,則不會(huì)返回地址信息。MBProgressHUD *hud = [MBProgressHUD showMessage:@"正在定位"];[self.locationManager requestLocationWithReGeocode:YES completionBlock:^(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error) {if(error){if(error.code ==AMapLocationErrorLocateFailed){

self.locationBlock(nil, nil, NO, nil);return;

}

}

NSDDLog(@"經(jīng)度longitude:%f",location.coordinate.longitude);//經(jīng)度NSLog(@"緯度latitude:%f",location.coordinate.latitude);//緯度//逆向編碼环肘、傳值(定位成功)NSLog(@"位置:%@",regeocode);

if(regeocode){ self.locationBlock(location, regeocode, YES, nil); }

}];

}//接收block-(void)receiveLocationBlock:(LocationPosition)block{if(block) {

self.locationBlock=[block copy];

}

}@end

在控制器獲取位置

//獲取當(dāng)前城市和經(jīng)緯度[appdelegate receiveLocationBlock:^(CLLocation *currentLocation, AMapLocationReGeocode *regeocode, BOOL isLocationSuccess, XYQProgressHUD *hud) {

[hud hide:YES];if(isLocationSuccess) {

[MBProgressHUD showSuccess:@"定位成功"];if(regeocode.city){

[_leftItem setPulicTitle:[regeocode.city substringToIndex:2]];//顯示當(dāng)前城市}

}else{

[MBProgressHUD showError:@"定位失敗"];//顯示默認(rèn)城市}

self.currentLocation=currentLocation;

self.currentCity=[regeocode.city copy];

}];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末欲虚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子悔雹,更是在濱河造成了極大的恐慌复哆,老刑警劉巖欣喧,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異梯找,居然都是意外死亡唆阿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)锈锤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)驯鳖,“玉大人,你說(shuō)我怎么就攤上這事久免∏痴蓿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵阎姥,是天一觀的道長(zhǎng)记舆。 經(jīng)常有香客問(wèn)我,道長(zhǎng)呼巴,這世上最難降的妖魔是什么泽腮? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮衣赶,結(jié)果婚禮上盛正,老公的妹妹穿的比我還像新娘。我一直安慰自己屑埋,他們只是感情好豪筝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著摘能,像睡著了一般续崖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上团搞,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天严望,我揣著相機(jī)與錄音,去河邊找鬼逻恐。 笑死像吻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的复隆。 我是一名探鬼主播拨匆,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼挽拂!你這毒婦竟也來(lái)了惭每?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤亏栈,失蹤者是張志新(化名)和其女友劉穎台腥,沒(méi)想到半個(gè)月后宏赘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡黎侈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年察署,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片峻汉。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡箕母,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出俱济,到底是詐尸還是另有隱情嘶是,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布蛛碌,位于F島的核電站聂喇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蔚携。R本人自食惡果不足惜希太,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望酝蜒。 院中可真熱鬧誊辉,春花似錦、人聲如沸亡脑。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)霉咨。三九已至蛙紫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間途戒,已是汗流浹背坑傅。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留喷斋,地道東北人唁毒。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像星爪,于是被迫代替她去往敵國(guó)和親浆西。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容