本文目录
地理编码
地名 -> 经纬度 等具体位置数据信息。根据给定的位置(通常是地名)确定地理坐标(经、纬度)。
反地理编码
经纬度 -> 地名。可以根据地理坐标(经、纬度)确定位置信息(街道、门牌等)。
配置
// 包含头文件 #import <CoreLocation/CoreLocation.h>
地理编码
// 声明 CLGeocoder 对象
@property (nonatomic, strong) CLGeocoder *geocoder;
// 实例化 CLGeocoder 对象
self.geocoder = [[CLGeocoder alloc] init];
// 开始编码
[self.geocoder geocodeAddressString:self.addressField.text
completionHandler:^(NSArray *placemarks, NSError *error) {
// 判断编码是否成功
if (error || 0 == placemarks.count) {
NSLog(@"erroe = %@, placemarks.count = %ld", error, placemarks.count);
self.detailAddressLabel.text = @"你输入的地址找不到,可能在火星上";
} else { // 编码成功(找到了具体的位置信息)
// 输出查询到的所有地标信息
for (CLPlacemark *placemark in placemarks) {
NSLog(@"name = %@, locality = %@, country = %@", placemark.name, placemark.locality, placemark.country);
}
// 显示最前面的地标信息
CLPlacemark *firstPlacemark = [placemarks firstObject];
self.longitudeLabel.text = [NSString stringWithFormat:@"%.2f", firstPlacemark.location.coordinate.longitude];
self.latitudeLabel.text = [NSString stringWithFormat:@"%.2f", firstPlacemark.location.coordinate.latitude];
self.detailAddressLabel.text = [NSString stringWithFormat:@"%@,%@,%@", firstPlacemark.name, firstPlacemark.locality, firstPlacemark.country];
}
}];
反地理编码
// 声明 CLGeocoder 对象
@property (nonatomic, strong)CLGeocoder *geocoder;
// 实例化 CLGeocoder 对象
self.geocoder = [[CLGeocoder alloc] init];
// 创建 CLLocation 对象
CLLocation *location = [[CLLocation alloc] initWithLatitude:[self.latitudeField.text doubleValue]
longitude:[self.longtitudeField.text doubleValue]];
// 开始反编码
[self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
// 判断反编码是否成功
if (error || 0 == placemarks.count) {
NSLog(@"erroe = %@, placemarks.count = %ld", error, placemarks.count);
self.reverseDetailAddressLabel.text = @"你输入的经纬度找不到,可能在火星上";
} else { // 反编码成功(找到了具体的位置信息)
// 输出查询到的所有地标信息
for (CLPlacemark *placemark in placemarks) {
NSLog(@"name=%@, locality=%@, country=%@", placemark.name, placemark.locality, placemark.country);
}
// 显示最前面的地标信息
CLPlacemark *firstPlacemark = [placemarks firstObject];
self.longtitudeField.text = [NSString stringWithFormat:@"%.2f", firstPlacemark.location.coordinate.longitude];
self.latitudeField.text = [NSString stringWithFormat:@"%.2f", firstPlacemark.location.coordinate.latitude];
self.reverseDetailAddressLabel.text = [NSString stringWithFormat:@"%@,%@,%@", firstPlacemark.name, firstPlacemark.locality, firstPlacemark.country];
}
}];
地理编码信息:
placemark.name, // 地名
placemark.thoroughfare, // 街道
placemark.subThoroughfare, // 街道相关信息,例如门牌等
placemark.locality, // 城市
placemark.subLocality, // 城市相关信息,//下一级城市名, 区
placemark.administrativeArea, // 州
placemark.subAdministrativeArea, // 其他行政区域信息
placemark.postalCode, // 邮编
placemark.ISOcountryCode, // 国家编码
placemark.country, // 国家
placemark.inlandWater, // 水源、湖泊
placemark.ocean, // 海洋
placemark.areasOfInterest // 关联的或利益相关的地标
placemark.addressDictionary[@"City"]]; // 城市
placemark.addressDictionary[@"Country"]]; // 国家
placemark.addressDictionary[@"CountryCode"]]; // 国家编码
placemark.addressDictionary[@"FormattedAddressLines"][0]]; // 街道
placemark.addressDictionary[@"Name"]]; // 地名
placemark.addressDictionary[@"State"]]; // 州
placemark.addressDictionary[@"SubLocality"]]; // 城市相关信息
网友评论