IOS-地圖之CLLocation的使用

簡述

  • 1.在移動互聯(lián)網(wǎng)時代,移動app能解決用戶的很多生活瑣事,比如
    ● 周邊:找餐館、找KTV碉纳、找電影院等等
    ● 導航:根據(jù)用戶設定的起點和終點,進行路線規(guī)劃,并指引用戶如何到達
    ● 在上述應用中,都用到了定位和地圖功能,在iOS開發(fā)中,要想加入這2大功能,必須基于2個框架進行開發(fā)
    ● CoreLocation :用于地理定位,地理編碼,區(qū)域監(jiān)聽等(著重功能實現(xiàn))
    ● MapKit :用于地圖展示,例如大頭針,路線梅忌、覆蓋層展示等(著重界面展
    示)

  • 2個熱門專業(yè)術語
    ● LBS :Location Based Service
    ● SoLoMo :Social Local Mobile(索羅門)

1 CoreLocation框架的使用

導入主頭文件
#import <CoreLocation/CoreLocation.h>

● CoreLocation框架使用須知
● CoreLocation框架中所有數(shù)據(jù)類型的前綴都是CL
● CoreLocation中使用CLLocationManager對象來做用戶定位

2 CLLocationManager

CLLocationManager的常用操作
 //開始更新用戶位置
 - (void)startUpdatingLocation;
 //停止更新用戶位置
 - (void) stopUpdatingLocation;
// 當調用了startUpdatingLocation方法后,就開始不斷地請求、刷新用戶的位置,一旦請求到用戶位置就會調用代理的下面方法
 - (void)locationManager:(CLLocationManager *)managerdidUpdateLocations:(NSArray *)locations;
// locations參數(shù)里面裝著CLLocation對象
為了嚴謹起見,最好在使用定位功能之前判斷當前應用的定位功能是否可用
//CLLocationManager有個類方法可以判斷當前應用的定位功能是否可用
+ (BOOL)locationServicesEnabled;
@property(assign, nonatomic) CLLocationDistance
 distanceFilter;
//每隔多少米定位一次
@property(assign, nonatomic) CLLocationAccuracy
 desiredAccuracy;
//定位精確度(越精確就越耗電)

3 CLLocation

CLLocation用來表示某個位置的地理信息,比如經(jīng)緯度饲握、海拔等等@property(readonly,nonatomic)CLLocationCoordinate2D
coordinate;
// 經(jīng)緯度
@property(readonly,nonatomic)CLLocationDistancealtitude;
//海拔 
@property(readonly,nonatomic)CLLocationDirectioncourse;
//路線,航向(取值范圍是0.0°~359.9°,0.0°代表真北方向) @property(readonly,nonatomic)CLLocationSpeedspeed;
// 移動速度(單位是m/s)

4 iOS8以后的定位適配

問題:iOS 8.0開始,蘋果進一步加強了對用戶隱私的保護痕惋。
當APP想訪問用戶的隱私信息時,系統(tǒng)不再自動彈出一個對話框讓用戶授權
解決方法:
(1)調用iOS 8.0的API,主動請求用戶授權
● - (void)requestAlwaysAuthorization // 請求允許在前后臺都能獲取用戶位置的授權
● - (void)requestWhenInUseAuthorization // 請求允許在前臺獲取用戶位置的授權

(2)務必在info.plist文件中配置對應的鍵值, 否則以上請求授權的方法不生效
● NSLocationAlwaysUsageDescription : 允許在前后臺獲取GPS的描述
● NSLocationWhenInUseDescription : 允許在前臺獲取GPS的描述

5 iOS 9.0 定位補充

iOS 9.0 如果當前處于前臺授權狀態(tài),默認是不可以后臺獲取用戶位置卷谈。但可以設置以下屬性為YES,就可以繼續(xù)獲取后臺位置,但是會出現(xiàn)藍條
解決:allowsBackgroundLocationUpdates屬性設置為YES
使用注意:必須設置對應的后臺模式:location updates

1 iOS 9.0 可以單次請求用戶位置

  • (void)requestLocation
    -(void)locationManager:(nonnull CLLocationManager *)manager
    didUpdateLocations:(nonnull NSArray<CLLocation *> *)locations // 成功調用

-(void)locationManager:(nonnull CLLocationManager *)manager
didFailWithError:(nonnullNSError *)error // 失敗調用

6 CLLocationCoordinate2D

CLLocationCoordinate2D是一個用來表示經(jīng)緯度的結構體,定義如下
typedef struct {
CLLocationDegrees latitude; // 緯度
CLLocationDegrees longitude; // 經(jīng)度
} CLLocationCoordinate2D;
● 一般用CLLocationCoordinate2DMake函數(shù)來創(chuàng)建CLLocationCoordinate2D

my gold ! forget save,just store a little data.

7 經(jīng)緯度

屏幕快照 2016-09-04 下午12.04.29.png
](http://upload-images.jianshu.io/upload_images/2471265-d6d8c767633377a8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

8 天朝經(jīng)緯度

天朝經(jīng)緯度

9 模擬位置

  • 如果是模擬器,需要設置模擬位置(經(jīng)緯度)
  • 天朝帝都的經(jīng)緯度是:北緯40°,東經(jīng)116°
設置模擬器經(jīng)緯度模式

10 CLGeocoder

1.使用CLGeocoder可以完成“地理編碼”和“反地理編碼”
2.地理編碼:根據(jù)給定的地名,獲得具體的位置信息(比如經(jīng)緯度杯拐、地址的全稱等)
3.反地理編碼:根據(jù)給定的經(jīng)緯度,獲得具體的位置信息

  • 地理編碼方法:
    -(void)geocodeAddressString:(NSString*)addressStringcompletionHandler:(CLGeocodeCompletionHandler)completionHandler;
  • 反地理編碼方法
    -(void)reverseGeocodeLocation:(CLLocation*)locationcompletionHandler:(CLGeocodeCompletionHandler)completionHandler;

11 CLGeocodeCompletionHandler

● 當?shù)乩韁反地理編碼完成時,就會調用CLGeocodeCompletionHandler
● typedef void (^CLGeocodeCompletionHandler)(NSArray
*placemarks, NSError *error);
● 這個block傳遞2個參數(shù)
? error :當編碼出錯時(比如編碼不出具體的信息)有值? placemarks :里面裝著CLPlacemark對象

12 CLPlacemark

● CLPlacemark的字面意思是地標,封裝詳細的地址位置信息
●@property(nonatomic,readonly)CLLocationlocation;
? 地理位置
●@property(nonatomic,readonly)CLRegion
region;
? 區(qū)域
●@property(nonatomic,readonly)NSDictionaryaddressDictionary;
? 詳細的地址信息
● @property(nonatomic,readonly)NSString
name;
? 地址名稱
●@property(nonatomic,readonly)NSString*locality;? 城市

CLPlacemark和CLLocation關系圖

代碼例子:
practice1
practice2

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市世蔗,隨后出現(xiàn)的幾起案子端逼,更是在濱河造成了極大的恐慌,老刑警劉巖污淋,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件顶滩,死亡現(xiàn)場離奇詭異,居然都是意外死亡寸爆,警方通過查閱死者的電腦和手機礁鲁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赁豆,“玉大人仅醇,你說我怎么就攤上這事∧е郑” “怎么了析二?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長节预。 經(jīng)常有香客問我叶摄,道長,這世上最難降的妖魔是什么安拟? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任蛤吓,我火速辦了婚禮,結果婚禮上糠赦,老公的妹妹穿的比我還像新娘会傲。我一直安慰自己锅棕,他們只是感情好,可當我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布淌山。 她就那樣靜靜地躺著哲戚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪艾岂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天朋其,我揣著相機與錄音王浴,去河邊找鬼。 笑死梅猿,一個胖子當著我的面吹牛氓辣,可吹牛的內容都是我干的。 我是一名探鬼主播袱蚓,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼钞啸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了喇潘?” 一聲冷哼從身側響起体斩,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颖低,沒想到半個月后絮吵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡忱屑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年蹬敲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莺戒。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡伴嗡,死狀恐怖,靈堂內的尸體忽然破棺而出从铲,到底是詐尸還是另有隱情瘪校,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布食店,位于F島的核電站渣淤,受9級特大地震影響,放射性物質發(fā)生泄漏吉嫩。R本人自食惡果不足惜价认,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望自娩。 院中可真熱鬧用踩,春花似錦渠退、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惠奸,卻和暖如春梅誓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背佛南。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工梗掰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嗅回。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓及穗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親绵载。 傳聞我的和親對象是個殘疾皇子埂陆,可洞房花燭夜當晚...
    茶點故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內容