常用的类
CLLocationManager:定位服务管理类,开启/关闭定位服务,配置定位精度,距离等等。
CLGeocoder:地理位置编码类, 根据经纬度获取地理位置信息,根据地名获取位置信息。
CLLocation:地理位置信息类,经纬度、海拔、速度、时间、国家等相关位置信息。
CLLocationCoordinate2D:结构体只包含经纬度信息。
需要遵守CLLocationManagerDeletage
可参见帮助文档获取更多信息
iOS8定位服务设置
设置info.plist文件增加:
NSLocationAlwaysUsageDescription, 允许获取地理位置描述
NSLocationWhenInUseDescription, 允许获取地理位置描述
1
2
请求位置授权
[_locationMananer requestAlwaysAuthorization];
1
遵守协议
_locationManger.delegate=self
1
实现协议相关方法。
//定位信息获取后调用的方法-(void)locationManager:didUpdateLocations:
1
2
启动定位服务
_locationManager startUpatingLocation];
1
停止定位服务
locationManager stopUpatingLocation];
1
#import"ViewController.h"@import CoreLocation;@interfaceViewController() @property(strong,nonatomic) CLLocationManager *locationManager;@end@implementationViewController- (void)viewDidLoad {
[superviewDidLoad];
_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate=self;//请求授权[_locationManager requestAlwaysAuthorization];//定位精度_locationManager.desiredAccuracy= kCLLocationAccuracyNearestTenMeters;//发生事件的最小距离间隔_locationManager.distanceFilter=1000.0f;
[_locationManager startUpdatingLocation];//启动定位服务.//根据输入的位置信息进行定位,输出相应的位置信息[[[CLGeocoder alloc] init] geocodeAddressString:@"北京"completionHandler:^(NSArray * _Nullable placemarks,NSError* _Nullable error) {NSLog(@"geocode placemark count:%d", (int)placemarks.count);for(CLPlacemark *placemark in placemarks) {NSLog(@"%@\n", placemark.location);
}
}];
}#pragma mark - CLLocationManagerDelegate- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
CLLocation *location = [locations lastObject];/*当定位成功后,如果horizontalAccuracy大于0,说明定位有效
horizontalAccuracy,该位置的纬度和经度确定的圆的中心,并且这个值表示圆的半径。负值表示该位置的纬度和经度是无效的。
*/NSLog(@"lat:%.3f, log:%.3f", location.coordinate.latitude, location.coordinate.longitude);if(location.horizontalAccuracy>0){//定位数据有效CLGeocoder *geocoder = [[CLGeocoder alloc] init];//反地理位置编码[geocoder reverseGeocodeLocation:location
completionHandler:^(NSArray * _Nullable placemarks,NSError* _Nullable error) {NSLog(@"placemark count:%d", (int)placemarks.count);for(CLPlacemark *placemark in placemarks) {NSLog(@"%@", placemark.addressDictionary);
}
}];
[manager stopUpdatingLocation];//结束定位服务}
}