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

定位服务:4-CLGeocoder应用案例1

CLGeocoder类是用于位置名称与地理位置相互转换的类,本节的代码我们首先演示一下从地理位置获取对应的经纬度操作。

准备工作

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

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

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

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

实现地址翻译功能

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

- (IBAction)geocodeAddress:(id)sender {
    //判断用户输入地址的有效性
    NSString *address  = self.addressTextField.text;
    if ([address length] == 0) {
        return;
    }
    [self.geocoder geocodeAddressString:self.addressTextField.text completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        //判断是否有返回信息
        if ([placemarks count] > 0) {
            // placemarks数组中第一个为地标信息
            CLPlacemark *placemark = placemarks[0];
            //获得相应的经纬度
            CLLocationCoordinate2D coordinate = placemark.location.coordinate;
            //显示到对应的label上面
            self.latTextField.text = [NSString stringWithFormat:@"%3.5f",coordinate.latitude];
            self.lngTextField.text = [NSString stringWithFormat:@"%3.5f",coordinate.longitude];
        }
    }];
}

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

示例代码

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