免费开源的iOS开发学习平台

定位服务:5-CLGeocoder应用案例2

上一节的示例代码演示了使用CLGeocoder类进行地址到经纬度的转换,本节我们来完成从经纬度到地址的反向转换过程。

准备工作

新建一个Single View Application工程,并导入CoreLocation框架,操作方法参见前面章节。

在Storyboard中,搭建如下的界面,用于输入经纬度信息,并且可以显示对应的地址信息。建立控件与控制器类之间的连线,添加属性以及按钮的点击方法。

在控制器类中,添加一个CLGeocoder类的属性,并对其进行简单的初始化操作。

#import <CoreLocation/CoreLocation.h>
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *lngTextField;//经度
@property (weak, nonatomic) IBOutlet UITextField *latTextField;//纬度
@property (weak, nonatomic) IBOutlet UITextField *addressTextField;//地址
@property (weak, nonatomic) IBOutlet UITextField *nameTextField;//名称
@property (nonatomic,strong)CLGeocoder *geocoder;
@end
- (CLGeocoder *)geocoder {
    if (_geocoder == nil) {
        _geocoder = [[CLGeocoder alloc] init];
    }
    return _geocoder;
}

实现经纬度翻译功能

在【获取经纬度的地址名称】按钮的点击方法中,添加如下代码,实现根据用户输入的经纬度获取该经纬度对应的地址名称,并显示到界面上。

- (IBAction)reverseGeocode:(id)sender {
    double latitude  = [self.latTextField.text doubleValue];
    double longitude = [self.lngTextField.text doubleValue];
    CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
    [self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        if ([placemarks count] > 0) {
            //返回描述信息
            CLPlacemark *placemark = placemarks[0];
            //获取所需信息
            NSString *country = placemark.country;
            NSString *area = placemark.administrativeArea;
            NSString *city = placemark.locality;
            NSString *street = placemark.thoroughfare;
            //在textView上面显示
            self.addressTextField.text = [NSString stringWithFormat:@"%@ %@ %@ %@",country,area,city,street];
            self.nameTextField.text = placemark.name;
        }
    }];
}

运行效果如下所示,当我们输入经纬度信息后,点击按钮,即可显示该经纬度对应的地址信息。

示例代码

https://github.com/99ios/17.2.5