CLLocation之编码和反编码
2016-01-22 16:43
295 查看
编码:给地址,利用geocodeAddressString,获取到CLPlacemark数组
反编码:给经度纬度,利用reverseGeocodeLocation,获取到CLPlacemark数组
**注意:要获取到placemark中的信息并不是像解析JSON一样看打印的东西,而是看CLPlacemark里面的属性,可以试着打印每一个属性看看他是什么
addressDictionary这是一个字典,里面包含着国家省份城市区之类**
// 0.获取用户输入的位置 NSString *addressStr = self.addressField.text; if (addressStr == nil || addressStr.length == 0) { NSLog(@"请输入地址"); return; } // 1.创建地理编码对象 // 2.利用地理编码对象编码 // 根据传入的地址获取该地址对应的经纬度信息 [self.geocoder geocodeAddressString:addressStr completionHandler:^(NSArray *placemarks, NSError *error) { if (placemarks.count == 0 || error != nil) { return ; } // placemarks地标数组, 地标数组中存放着地标, 每一个地标包含了该位置的经纬度以及城市/区域/国家代码/邮编等等... // 获取数组中的第一个地标 CLPlacemark *placemark = [placemarks firstObject]; NSLog(@"%@",placemarks); // for (CLPlacemark *placemark in placemarks) { // NSLog(@"%@ %@ %f %f", placemark.name, placemark.addressDictionary, placemark.location.coordinate.latitude, placemark.location.coordinate.longitude); self.latitudeLabel.text = [NSString stringWithFormat:@"%f", placemark.location.coordinate.latitude]; self.longitudeLabel.text = [NSString stringWithFormat:@"%f", placemark.location.coordinate.longitude]; NSArray *address = placemark.addressDictionary[@"FormattedAddressLines"]; NSMutableString *strM = [NSMutableString string]; for (NSString *str in address) { [strM appendString:str]; } self.detailAddressLabel.text = strM; // } }];
反编码:给经度纬度,利用reverseGeocodeLocation,获取到CLPlacemark数组
// 1.获取用户输入的经纬度 NSString *longtitude = self.longtitudeField.text; NSString *latitude = self.latitudeField.text; if (longtitude.length == 0 || longtitude == nil || latitude.length == 0 || latitude == nil) { NSLog(@"请输入经纬度"); return; } // 2.根据用户输入的经纬度创建CLLocation对象 CLLocation *location = [[CLLocation alloc] initWithLatitude:[latitude doubleValue] longitude:[longtitude doubleValue]]; // 3.根据CLLocation对象获取对应的地标信息 [self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) { for (CLPlacemark *placemark in placemarks) { NSLog(@"%@ %@ %f %f", placemark.name, placemark.addressDictionary, placemark.location.coordinate.latitude, placemark.location.coordinate.longitude); self.reverseDetailAddressLabel.text = placemark.locality; } }];
**注意:要获取到placemark中的信息并不是像解析JSON一样看打印的东西,而是看CLPlacemark里面的属性,可以试着打印每一个属性看看他是什么
addressDictionary这是一个字典,里面包含着国家省份城市区之类**