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