定位
2016-01-11 本文已影响129人
方同学哈
前言
请求用户权限,需要在info.plist中添加两个值
NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription
1.定位
@property (nonatomic,strong) CLLocationManager *manger;
// 定位管理者
- (CLLocationManager *)manger
{
if (_manger == nil) {
_manger = [[CLLocationManager alloc]init];
[_manger requestWhenInUseAuthorization];
[_manger setDesiredAccuracy:kCLLocationAccuracyBest];
[_manger setDistanceFilter:1000];
}
return _manger;
}
// 判断当前设备是否支持定位服务
if (![CLLocationManager locationServicesEnabled]) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"温馨提示" message:@"该设备不支持定位" delegate:nil cancelButtonTitle:@"知道了" otherButtonTitles:nil, nil];
[alert show];
}
self.manger.delegate = self;
[self.manger startUpdatingLocation];
#pragma mark - 定位协议方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
// 获取当前位置的经纬度
CLLocation *location = [locations lastObject];
NSLog(@"经度:%.2f 纬度:%.2f",location.coordinate.latitude,location.coordinate.longitude);
// 如果只需获取一次,则获取到后就可以停止定位
[self.manger stopUpdatingLocation];
}
// 定位失败
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog(@"error:%@",[error localizedDescription]);
}
2.根据经纬度获取地名
@property (nonatomic, strong) CLGeocoder *geocoder;
// 地理编码
- (CLGeocoder *)geocoder
{
if (!_geocoder) {
_geocoder = [[CLGeocoder alloc]init];
}
return _geocoder;
}
CGFloat next = 29.608435;
CGFloat top = 106.505997;
CLLocation *loca = [[CLLocation alloc]initWithLatitude:next longitude:top];
// 强制转换成简体中文
[[NSUserDefaults
standardUserDefaults] setObject:[NSArray arrayWithObjects:@"zh-hans",
nil, nil] forKey:@"AppleLanguages"];
[self.geocoder reverseGeocodeLocation:loca completionHandler:^(NSArray *placemarks, NSError *error) {
for (CLPlacemark *placemark in placemarks){
NSLog(@"\n name:%@\n country:%@\n postalCode:%@\n ISOcountryCode:%@\n ocean:%@\n inlandWater:%@\n locality:%@\n subLocality:%@\n administrativeArea:%@\n subAdministrativeArea:%@\n thoroughfare:%@\n subThoroughfare:%@\n",
placemark.name,
placemark.country,
placemark.postalCode,
placemark.ISOcountryCode,
placemark.ocean,
placemark.inlandWater,
placemark.administrativeArea,
placemark.subAdministrativeArea,
placemark.locality,
placemark.subLocality,
placemark.thoroughfare,
placemark.subThoroughfare
);
}
}];