iOS学习笔记19 地图(一)定位CoreLocation
###一、定位介紹 現(xiàn)在很多社交、電商、團(tuán)購應(yīng)用都引入了地圖和定位功能,似乎地圖功能不再是地圖應(yīng)用和導(dǎo)航應(yīng)用所特有的。的確,有了地圖和定位功能確實(shí)讓我們的生活更加豐富多彩,極大的改變了我們的生活方式。要實(shí)現(xiàn)地圖、導(dǎo)航功能,往往需要先熟悉定位功能。 ######在iOS中通過CoreLocation框架進(jìn)行定位操作。
CoreLocation自身可以單獨(dú)使用,和地圖開發(fā)框架MapKit完全是獨(dú)立的,但是往往地圖開發(fā)要配合定位框架使用。
######CoreLocation可以實(shí)現(xiàn)的功能:
######2. 對象屬性:
- 定位精度desiredAccuracy: 枚舉類型:
- 位置信息更新最小距離distanceFilter: 浮點(diǎn)數(shù),默認(rèn)為kCLDistanceFilterNone,表示不進(jìn)行距離限制
######3. 對象方法:
-(void)startUpdatingLocation;/* 開始定位追蹤 */ -(void)stopUpdatingLocation;/* 停止定位追蹤 */ -(void)startUpdatingHeading;/* 開始導(dǎo)航方向追蹤 */ -(void)stopUpdatingHeading;/* 停止導(dǎo)航方向追蹤 */ -(void)startMonitoringForRegion:(CLRegion *)region;/* 開始對某個區(qū)域進(jìn)行定位追蹤 */ -(void)stopMonitoringForRegion:(CLRegion *)region;/* 停止對某個區(qū)域進(jìn)行定位追蹤 */ -(void)requestWhenInUseAuthorization;/* 請求獲得應(yīng)用前臺定位授權(quán) */ -(void)requestAlwaysAuthorization;/* 請求獲得應(yīng)用前后臺定位授權(quán) */ 復(fù)制代碼######4. 常用代理方法CLLocationManagerDelegate:
/* 位置發(fā)生改變后調(diào)用,第一次定位也會調(diào)用 */ -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations; /* 導(dǎo)航方向發(fā)生變化后調(diào)用 */ -(void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading; /* 進(jìn)入某個區(qū)域后調(diào)用 */ -(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region; /* 走出某個區(qū)域后調(diào)用 */ -(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region; /* 當(dāng)用戶授權(quán)狀態(tài)發(fā)生變化時調(diào)用 */ -(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status; 復(fù)制代碼###三、定位簡單使用 ######先要在項(xiàng)目導(dǎo)入CoreLocation框架,然后再導(dǎo)入頭文件:
復(fù)制代碼######iOS版本不同,使用也有一些區(qū)別,主要區(qū)分為:
#####1. iOS8.0之前的定位使用: ######1.1 前臺定位:
- (void)viewDidLoad{[super viewDidLoad];if (![CLLocationManager locationServicesEnabled]) {NSLog(@"定位服務(wù)當(dāng)前可能尚未打開,請?jiān)O(shè)置打開!");return;}[self initLocationManager];//調(diào)用方法,開始更新用戶位置信息[self.locationM startUpdatingLocation]; } //創(chuàng)建CLLocationManager并啟動定位 - (void)initLocationManager{//創(chuàng)建CLLocationManager對象并設(shè)置代理self.locationM = [[CLLocationManager alloc] init];self.locationM.delegate = self;//設(shè)置定位精度和位置更新最小距離self.locationM.distanceFilter = 100;self.locationM.desiredAccuracy = kCLLocationAccuracyBest; } //在對應(yīng)的代理方法中獲取位置信息 - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation*> *)locations {CLLocation *location = [locations firstObject];//取出第一個位置/* 使用位置前, 務(wù)必判斷當(dāng)前獲取的位置是否有效如果水平精確度小于零, 代表雖然可以獲取位置對象, 但是數(shù)據(jù)錯誤, 不可用*/if (location.horizontalAccuracy < 0)return;CLLocationCoordinate2D coordinate = location.coordinate;//位置坐標(biāo) CGFloat longitude = coordinate.longitude;//經(jīng)度CGFloat latitude = coordinate.latitude;//緯度CGFloat altitude = location.altitude;//海拔CGFloat course = location.course;//方向CGFloat speed = location.speed;//速度NSLog(@"經(jīng)度:%f,緯度:%f",longitude,latitude); NSLog(@"海拔:%f,方向:%f,速度:%f",altitude,course,speed);//如果不需要實(shí)時定位,使用完即使關(guān)閉定位服務(wù)[self.locationM stopUpdatingLocation]; } 復(fù)制代碼######1.2 后臺定位: 在前臺的基礎(chǔ)上,勾選后臺模式Location updates
#####2. iOS8之后的定位使用 ######iOS8開始,需要請求定位授權(quán):
- 前臺授權(quán): 在Info.plist文件中配置 NSLocationWhenInUseUsageDescription為YES
- 前后臺授權(quán): 在Info.plist文件中配置NSLocationAlwaysUsageDescription為YES
###四、地理編碼 定位服務(wù)中還包含CLGeocoder類,用于處理地理編碼和逆地理編碼功能。
- 地理編碼:根據(jù)給定的位置(通常是地名)確定地理坐標(biāo)(經(jīng)、緯度)。 【位置 -> 地理坐標(biāo)】
- 逆地理編碼:可以根據(jù)地理坐標(biāo)(經(jīng)、緯度)確定位置信息(街道、門牌等)。 【地理坐標(biāo) -> 位置】
######地標(biāo)類CLPlacemark還包含以下信息:
NSString *name = placemark.name;//地名 NSString *thoroughfare = placemark.thoroughfare;//街道 NSString *subThoroughfare = placemark.subThoroughfare; //街道相關(guān)信息,例如門牌等 NSString *locality = placemark.locality; // 城市 NSString *subLocality = placemark.subLocality; // 城市相關(guān)信息,例如標(biāo)志性建筑 NSString *administrativeArea = placemark.administrativeArea; // 州 NSString *subAdministrativeArea = placemark.subAdministrativeArea; //其他行政區(qū)域信息 NSString *postalCode = placemark.postalCode; //郵編 NSString *ISOcountryCode = placemark.ISOcountryCode; //國家編碼 NSString *country = placemark.country; //國家 NSString *inlandWater = placemark.inlandWater; //水源、湖泊 NSString *ocean = placemark.ocean; // 海洋 NSArray *areasOfInterest = placemark.areasOfInterest; //關(guān)聯(lián)的或利益相關(guān)的地標(biāo) 復(fù)制代碼######下一節(jié)我會寫地圖類MapKit的相關(guān)筆記,敬請期待吧!有什么問題可以在下方評論區(qū)提出,O(∩_∩)O哈!
轉(zhuǎn)載于:https://juejin.im/post/5b126da76fb9a01e492938cb
總結(jié)
以上是生活随笔為你收集整理的iOS学习笔记19 地图(一)定位CoreLocation的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS 6.9 搭建 Presto
- 下一篇: VTK使用矢量数据弯曲几何体