使用系统的CoreLocation定位
生活随笔
收集整理的這篇文章主要介紹了
使用系统的CoreLocation定位
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//
//? ViewController.m
//? LBS
//
//? Created by tonnyhuang on 15/8/28.
//? Copyright (c) 2015年 tonnyhuang. All rights reserved.
//
#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>
//首先,我們需要在工程中導入CoreLocation系統框架。然后在我們的控制器中引入頭文件。
//然后,聲明一個CLLocationManager對象作為成員變量,用于定位獲取經緯度坐標,并遵守協議CLLocationManager的協議。
@interface ViewController ()<CLLocationManagerDelegate>
{
??? CLLocationManager *_locationManager;
}
@end
@implementation ViewController
//實現其中的代理方法
#pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager
??? didUpdateToLocation:(CLLocation *)newLocation
?????????? fromLocation:(CLLocation *)oldLocation {
??? //獲取經度
??? NSLog(@"經度 == %lf", newLocation.coordinate.longitude);
??? //獲取緯度
??? NSLog(@"緯度 == %lf", newLocation.coordinate.latitude);
??? //獲取當前所在的城市名
??? CLGeocoder *geocoder = [[CLGeocoder alloc] init];
??? //根據經緯度反向地理編碼出地址信息
??? [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {
??????? CLPlacemark *placemark = [placemarks objectAtIndex:0];
??????? NSLog(@"%@", placemark.name);
??????? //獲取城市
??????? NSString *city = placemark.locality;
???????
??????? //四大直轄市的城市信息無法通過locality獲得,只能通過獲取省份的方法來獲得(如果city為空,則可知為直轄市
???????
??????? if (!city) {
??????????? city = placemark.administrativeArea;
??????? } else if (error == nil && [placemarks count] == 0){
??????????? NSLog(@"no result were returned");
??????? } else if (error != nil) {
??????????? NSLog(@"error = %@", error);
??????? }
??????? NSLog(@"city = %@", city);
??? }];
??? //系統會一直更新數據,直到選擇停止更新,因為我們只需要獲得一次經緯度即可,所以獲取之后就停止更新
}
//最后在viewDidLoad中初始化定位管理器。
- (void)viewDidLoad {
??? [super viewDidLoad];
??? [self initializeLocationService];
}
- (void)initializeLocationService {
??? //初始化定位管理器
??? _locationManager = [[CLLocationManager alloc] init];
??? //設置代理
??? _locationManager.delegate = self;
??? //設置定位精確度到米
??? _locationManager.desiredAccuracy = kCLLocationAccuracyBest;
??? //設置過濾器為無
??? _locationManager.distanceFilter = kCLDistanceFilterNone;
??? //開始定位
??? [_locationManager requestAlwaysAuthorization];
??? //取得定位權限,有兩個方法,取決于你的定位使用情況
??? [_locationManager startUpdatingLocation];
}
//如果需要正常定位,相對iOS7而言,iOS8需要額外處理兩個地方。
//1. 工程的plist文件里面添加兩個字段:NSLocationAlwaysUsageDescription, //NSLocationWhenInUseUsageDescription,type類型均為string,值可以根據你的需要填寫(也可以不填),填寫的內容會展示在APP提示用戶是否允許定位的alert內容里面,具體效果可以自行測試,這里就不額外截圖。 這兒的位置不要錯誤 ?在上邊的info.plist中添加字段 //2. 調用定位方法之前需要額外調用一個函數,直接在上面iOS7初始化定位服務的方法里面修改即可,具體如下:
// 開始定位
// 取得定位權限,有兩個方法,取決于你的定位使用情況
// 一個是requestAlwaysAuthorization,一個是requestWhenInUseAuthorization
//[_locationManager requestAlwaysAuthorization];//這句話ios8以上版本使用。
//[_locationManager startUpdatingLocation];
- (void)didReceiveMemoryWarning {
??? [super didReceiveMemoryWarning];
??? // Dispose of any resources that can be recreated.
}
@end
//? ViewController.m
//? LBS
//
//? Created by tonnyhuang on 15/8/28.
//? Copyright (c) 2015年 tonnyhuang. All rights reserved.
//
#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>
//首先,我們需要在工程中導入CoreLocation系統框架。然后在我們的控制器中引入頭文件。
//然后,聲明一個CLLocationManager對象作為成員變量,用于定位獲取經緯度坐標,并遵守協議CLLocationManager的協議。
@interface ViewController ()<CLLocationManagerDelegate>
{
??? CLLocationManager *_locationManager;
}
@end
@implementation ViewController
//實現其中的代理方法
#pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager
??? didUpdateToLocation:(CLLocation *)newLocation
?????????? fromLocation:(CLLocation *)oldLocation {
??? //獲取經度
??? NSLog(@"經度 == %lf", newLocation.coordinate.longitude);
??? //獲取緯度
??? NSLog(@"緯度 == %lf", newLocation.coordinate.latitude);
??? //獲取當前所在的城市名
??? CLGeocoder *geocoder = [[CLGeocoder alloc] init];
??? //根據經緯度反向地理編碼出地址信息
??? [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {
??????? CLPlacemark *placemark = [placemarks objectAtIndex:0];
??????? NSLog(@"%@", placemark.name);
??????? //獲取城市
??????? NSString *city = placemark.locality;
???????
??????? //四大直轄市的城市信息無法通過locality獲得,只能通過獲取省份的方法來獲得(如果city為空,則可知為直轄市
???????
??????? if (!city) {
??????????? city = placemark.administrativeArea;
??????? } else if (error == nil && [placemarks count] == 0){
??????????? NSLog(@"no result were returned");
??????? } else if (error != nil) {
??????????? NSLog(@"error = %@", error);
??????? }
??????? NSLog(@"city = %@", city);
??? }];
??? //系統會一直更新數據,直到選擇停止更新,因為我們只需要獲得一次經緯度即可,所以獲取之后就停止更新
}
//最后在viewDidLoad中初始化定位管理器。
- (void)viewDidLoad {
??? [super viewDidLoad];
??? [self initializeLocationService];
}
- (void)initializeLocationService {
??? //初始化定位管理器
??? _locationManager = [[CLLocationManager alloc] init];
??? //設置代理
??? _locationManager.delegate = self;
??? //設置定位精確度到米
??? _locationManager.desiredAccuracy = kCLLocationAccuracyBest;
??? //設置過濾器為無
??? _locationManager.distanceFilter = kCLDistanceFilterNone;
??? //開始定位
??? [_locationManager requestAlwaysAuthorization];
??? //取得定位權限,有兩個方法,取決于你的定位使用情況
??? [_locationManager startUpdatingLocation];
}
//如果需要正常定位,相對iOS7而言,iOS8需要額外處理兩個地方。
//1. 工程的plist文件里面添加兩個字段:NSLocationAlwaysUsageDescription, //NSLocationWhenInUseUsageDescription,type類型均為string,值可以根據你的需要填寫(也可以不填),填寫的內容會展示在APP提示用戶是否允許定位的alert內容里面,具體效果可以自行測試,這里就不額外截圖。 這兒的位置不要錯誤 ?在上邊的info.plist中添加字段 //2. 調用定位方法之前需要額外調用一個函數,直接在上面iOS7初始化定位服務的方法里面修改即可,具體如下:
// 開始定位
// 取得定位權限,有兩個方法,取決于你的定位使用情況
// 一個是requestAlwaysAuthorization,一個是requestWhenInUseAuthorization
//[_locationManager requestAlwaysAuthorization];//這句話ios8以上版本使用。
//[_locationManager startUpdatingLocation];
- (void)didReceiveMemoryWarning {
??? [super didReceiveMemoryWarning];
??? // Dispose of any resources that can be recreated.
}
@end
轉載于:https://www.cnblogs.com/tian-sun/p/5019975.html
總結
以上是生活随笔為你收集整理的使用系统的CoreLocation定位的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 钉钉 ISV 应用开发的一些心得
- 下一篇: 寻找水王(2)