地理编码及反编码
2017-03-23 本文已影响51人
陈水寒
苹果自带地理编码,通过名称搜索获得相应的经纬度信息,反编码就是通过搜索经纬度获得相应的地理名称
相应代码如下
// 初始化
CLGeocoder geocoder = [[CLGeocoder alloc] init];
- (IBAction)geocode:(id)sender {
NSString *address = self.addressTV.text;
if ([address length] == 0) return;
[self.geocoder geocodeAddressString:address completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
if (error) {
NSLog(@"发生错误");
return ;
}
// 遍历数组
[placemarks enumerateObjectsUsingBlock:^(CLPlacemark * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
// self.addressTV.text = obj.name;
self.latitudeTF.text = @(obj.location.coordinate.latitude).stringValue;
self.longitudeTF.text = @(obj.location.coordinate.longitude).stringValue;
}];
}];
}
- (IBAction)reverseGeocode:(id)sender {
if ([self.latitudeTF.text length] == 0) {
NSLog(@"请输入维度");
return;
}
if ([self.longitudeTF.text length] == 0) {
NSLog(@"请输入经度");
return;
}
double latitudeD = [self.latitudeTF.text doubleValue];
double longitudeD = [self.longitudeTF.text doubleValue];
CLLocation *location = [[CLLocation alloc] initWithLatitude:latitudeD longitude:longitudeD];
[self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
if (error) {
NSLog(@"发生错误");
return ;
}
// 遍历数组
[placemarks enumerateObjectsUsingBlock:^(CLPlacemark * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
self.addressTV.text = obj.name;
// self.latitudeTF.text = @(obj.location.coordinate.latitude).stringValue;
// self.longitudeTF.text = @(obj.location.coordinate.longitude).stringValue;
}];
}];
}
编码及反编码演示效果.gif