iOS中编码反编码(经纬度和地名之间相互转换)
第一步:在工程中Info.plist文件中加入一段代码,控制弹窗是否允许定位:NSLocationWhenInUseUsageDescription,如下图:
第二步:引入文件,创建编码与反编码的类
#import <CoreLocation/CoreLocation.h>
// 编码与反编码的类 @property (nonatomic, strong) CLGeocoder *geocoder;
第三步:初始化对象,创建方法,注意两个方法不要同时运行,运行时请注释一个,不想注释的话可以通过按钮点击事件来实现。
// 初始化对象 self.geocoder = [[CLGeocoder alloc] init]; // 根据地名获取经纬度 [self getCoordinataByAddress:@"北京"]; // 根据经纬度反编码取出地名 [self getAddressByLongitude:116 Latitude:40];
第四步:实现方法:根据地名获取经纬度
#pragma mark - 根据地名经纬度 - (void)getCoordinateByAddress:(NSString *)address { // 编码方法 [_geocoder geocodeAddressString:address completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) { // 根据返回的坐标,取出第一个位置(坐标的位置很多) CLPlacemark *mark = placemarks.firstObject; // 根据坐标得到location CLLocation *location = mark.location; // 根据mark获取区域 CLRegion *region = mark.region; // 获取地理位置字典信息 NSDictionary *addressDict = mark.addressDictionary; NSLog(@"地理位置:%@, 区域:%@, 地理位置信息:%@", location, region, addressDict); }]; /* NSString *name=placemark.name;//地名 NSString *thoroughfare=placemark.thoroughfare;//街道 NSString *subThoroughfare=placemark.subThoroughfare; //街道相关信息,例如门牌等 NSString *locality=placemark.locality; // 城市 NSString *subLocality=placemark.subLocality; // 城市相关信息,例如标志性建筑 NSString *administrativeArea=placemark.administrativeArea; // 州 NSString *subAdministrativeArea=placemark.subAdministrativeArea; //其他行政区域信息 NSString *postalCode=placemark.postalCode; //邮编 NSString *ISOcountryCode=placemark.ISOcountryCode; //国家编码 NSString *country=placemark.country; //国家 NSString *inlandWater=placemark.inlandWater; //水源、湖泊 NSString *ocean=placemark.ocean; // 海洋 NSArray *areasOfInterest=placemark.areasOfInterest; //关联的或利益相关的地标 */ }
实现方法:通过经纬度查找地名
#pragma mark - 通过经纬度查找地名 - (void)getAddressByLongitude:(CLLocationDegrees)longitude Latitude:(CLLocationDegrees)latitude { // 反编码 // 创建CLLocation CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude]; [_geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) { NSDictionary *dict = placemarks.firstObject.addressDictionary; NSLog(@"反编码地理位置:%@", dict); }]; }

浙公网安备 33010602011771号