iOS之获取经纬度并通过反向地理编码获取详细地址

时间:2023-03-08 21:32:43

_locationManager = [[CLLocationManager alloc] init];

//期望的经度

_locationManager.desiredAccuracy = kCLLocationAccuracyBest;

//大约变化100米更新一次

_locationManager.distanceFilter = 100;

//认证NSLocationAlwaysUsageDescription

if ([[UIDevice currentDevice] systemVersion].doubleValue > 8.0) {//如果iOS是8.0以上版本

if ([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {//位置管理对象中有requestAlwaysAuthorization这个方法

//运行

[_locationManager requestAlwaysAuthorization];

}

}

_locationManager.delegate = self;

[_locationManager startUpdatingLocation];

//获取经纬度和详细地址

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {

CLLocation *location = [locations lastObject];

NSLog(@"latitude === %g  longitude === %g",location.coordinate.latitude, location.coordinate.longitude);

//反向地理编码

CLGeocoder *clGeoCoder = [[CLGeocoder alloc] init];

CLLocation *cl = [[CLLocation alloc] initWithLatitude:location.coordinate.latitude longitude:location.coordinate.longitude];

[clGeoCoder reverseGeocodeLocation:cl completionHandler: ^(NSArray *placemarks,NSError *error) {

for (CLPlacemark *placeMark in placemarks) {

NSDictionary *addressDic = placeMark.addressDictionary;

NSString *state=[addressDic objectForKey:@"State"];

NSString *city=[addressDic objectForKey:@"City"];

NSString *subLocality=[addressDic objectForKey:@"SubLocality"];

NSString *street=[addressDic objectForKey:@"Street"];

NSLog(@"所在城市====%@ %@ %@ %@", state, city, subLocality, street);

[_locationManager stopUpdatingLocation];

}

}];

}