@interface ViewController ()
@property(nonatomic,strong)CLGeocoder *geocoder
///地理编码
@property (nonatomic, strong) UIButton *geoCodeSurebutton
@property (nonatomic, strong) UILabel *geoCodeTitleLabel
@property (nonatomic, strong) UILabel *geoCodeTipLabel
@property (nonatomic, strong) UITextField *geoCodeTextField
@property (nonatomic, strong) UILabel *geoCodeDetailLable
///反地理编码
@property (nonatomic, strong) UIButton *geoDecodeSurebutton
@property (nonatomic, strong) UILabel *geoDecodeTitleLabel
@property (nonatomic, strong) UILabel *geoDecodeLongLabel
@property (nonatomic, strong) UITextField *geoDecodeLongTextField
@property (nonatomic, strong) UILabel *geoDecodeLatLabel
@property (nonatomic, strong) UITextField *geoDecodeLatTextField
@property (nonatomic, strong) UILabel *geoDecodeDetailLable
@end
@implementation ViewController
- (CLGeocoder *)geocoder {
if (!_geocoder){
_geocoder=[[CLGeocoder alloc] init]
}
return _geocoder
}
- (void)viewDidLoad {
[super viewDidLoad]
[self setupView]
}
- (void)geoCodeSurebuttonTouchUpInside:(UIButton *)sender {
//1.获得输入的地址
NSString *address = self.geoCodeTextField.text
if (address.length == 0) return
//2.开始地理编码
//说明:调用下面的方法开始编码,不管编码是成功还是失败都会调用block中的方法
[self.geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
//如果有错误信息,或者是数组中获取的地名元素数量为0,那么说明没有找到
if (error || placemarks.count==0) {
self.geoCodeDetailLable.text=@"你输入的地址没找到,可能在月球上";
}else{
// 编码成功,找到了具体的位置信息
//打印查看找到的所有的位置信息
/*
name:名称
locality:城市
country:国家
postalCode:邮政编码
*/
for (CLPlacemark *placemark in placemarks) {
NSLog(@"name=%@ locality=%@ country=%@ postalCode=%@",placemark.name,placemark.locality,placemark.country,placemark.postalCode);
}
//取出获取的地理信息数组中的第一个显示在界面上
CLPlacemark *firstPlacemark = [placemarks firstObject]
//纬度
CLLocationDegrees latitude = firstPlacemark.location.coordinate.latitude
//经度
CLLocationDegrees longitude = firstPlacemark.location.coordinate.longitude
//详细地址名称
self.geoCodeDetailLable.text = [NSString stringWithFormat:@"详细地址:%@ 纬度:%@ 经度:%@",firstPlacemark.name,[NSString stringWithFormat:@"%.2f",latitude],[NSString stringWithFormat:@"%.2f",longitude]]
}
}]
}
- (void)geoDecodeSurebuttonTouchUpInside:(UIButton *)sender {
//1.获得输入的经纬度
NSString *longtitudeText = self.geoDecodeLongTextField.text
NSString *latitudeText = self.geoDecodeLatTextField.text
if (longtitudeText.length == 0 || latitudeText.length == 0) return
CLLocationDegrees latitude = [latitudeText doubleValue]
CLLocationDegrees longitude = [longtitudeText doubleValue]
CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude]
//2.反地理编码
[self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
if (error || placemarks.count == 0) {
self.geoDecodeDetailLable.text = @"你输入的地址没找到,可能在月球上";
}else{//编码成功
//显示最前面的地标信息
CLPlacemark *firstPlacemark = [placemarks firstObject]
self.geoDecodeDetailLable.text = firstPlacemark.name
//经纬度
CLLocationDegrees latitude = firstPlacemark.location.coordinate.latitude
CLLocationDegrees longitude = firstPlacemark.location.coordinate.longitude
self.geoDecodeLatTextField.text = [NSString stringWithFormat:@"%.2f",latitude]
self.geoDecodeLongTextField.text = [NSString stringWithFormat:@"%.2f",longitude]
}
}]
}
- (void)setupView {
///地理编码
[self.view addSubview:self.geoCodeTitleLabel]
[self.view addSubview:self.geoCodeSurebutton]
[self.view addSubview:self.geoCodeTipLabel]
[self.view addSubview:self.geoCodeTextField]
[self.view addSubview:self.geoCodeDetailLable]
///反地理编码
[self.view addSubview:self.geoDecodeTitleLabel]
[self.view addSubview:self.geoDecodeSurebutton]
[self.view addSubview:self.geoDecodeLongLabel]
[self.view addSubview:self.geoDecodeLongTextField]
[self.view addSubview:self.geoDecodeLatLabel]
[self.view addSubview:self.geoDecodeLatTextField]
[self.view addSubview:self.geoDecodeDetailLable]
[self p_addMasonry]
}
- (void)p_addMasonry {
///地理编码
[self.geoCodeTitleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(100);
make.left.mas_equalTo(0);
make.right.mas_equalTo(-100);
make.height.mas_equalTo(26);
}]
[self.geoCodeSurebutton mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.geoCodeTitleLabel.mas_top);
make.width.mas_equalTo(80);
make.right.mas_equalTo(-10);
make.height.mas_equalTo(26);
}]
[self.geoCodeTipLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.geoCodeTitleLabel.mas_bottom).mas_offset(10);
make.left.mas_equalTo(10);
make.width.mas_equalTo(60);
make.height.mas_equalTo(26);
}]
[self.geoCodeTextField mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.geoCodeTitleLabel.mas_bottom).mas_offset(10);
make.left.mas_equalTo(self.geoCodeTipLabel.mas_right).mas_offset(10);
make.right.mas_equalTo(-10);
make.height.mas_equalTo(26);
}]
[self.geoCodeDetailLable mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.geoCodeTextField.mas_bottom).mas_offset(10);
make.left.mas_equalTo(10);
make.right.mas_equalTo(-10);
}]
///反地理编码
[self.geoDecodeTitleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.geoCodeDetailLable.mas_bottom).mas_offset(10);
make.left.mas_equalTo(0);
make.right.mas_equalTo(-100);
make.height.mas_equalTo(26);
}]
[self.geoDecodeSurebutton mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.geoDecodeTitleLabel.mas_top);
make.width.mas_equalTo(80);
make.right.mas_equalTo(-10);
make.height.mas_equalTo(26);
}]
[self.geoDecodeLongLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.geoDecodeTitleLabel.mas_bottom).mas_offset(10);
make.left.mas_equalTo(10);
make.width.mas_equalTo(60);
make.height.mas_equalTo(26);
}]
[self.geoDecodeLongTextField mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.geoDecodeLongLabel.mas_top);
make.left.mas_equalTo(self.geoDecodeLongLabel.mas_right).mas_offset(10);
make.width.mas_equalTo(60);
make.height.mas_equalTo(26);
}]
[self.geoDecodeLatLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.geoDecodeLongLabel.mas_top);
make.left.mas_equalTo(self.geoDecodeLongTextField.mas_right).mas_offset(10);
make.width.mas_equalTo(60);
make.height.mas_equalTo(26);
}]
[self.geoDecodeLatTextField mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.geoDecodeLongLabel.mas_top);
make.left.mas_equalTo(self.geoDecodeLatLabel.mas_right).mas_offset(10);
make.width.mas_equalTo(60);
make.height.mas_equalTo(26);
}]
[self.geoDecodeDetailLable mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.geoDecodeLongLabel.mas_bottom).mas_offset(10);
make.left.mas_equalTo(10);
make.right.mas_equalTo(-10);
}]
}
- (UILabel *)geoCodeTitleLabel {
if (!_geoCodeTitleLabel) {
_geoCodeTitleLabel = [[UILabel alloc] init]
_geoCodeTitleLabel.font = [UIFont systemFontOfSize:18.0f weight:UIFontWeightMedium]
_geoCodeTitleLabel.text = @"\u3000\u3000\u3000\u3000地理编码"
}
return _geoCodeTitleLabel
}
- (UIButton *)geoCodeSurebutton {
if (!_geoCodeSurebutton) {
_geoCodeSurebutton = [[UIButton alloc] init]
[_geoCodeSurebutton addTarget:self action:@selector(geoCodeSurebuttonTouchUpInside:) forControlEvents:UIControlEventTouchUpInside]
_geoCodeSurebutton.layer.cornerRadius = 13.0f
_geoCodeSurebutton.layer.masksToBounds = YES
_geoCodeSurebutton.backgroundColor = [[UIColor redColor] colorWithAlphaComponent:0.1]
[_geoCodeSurebutton setTitle:@"确定" forState:UIControlStateNormal]
}
return _geoCodeSurebutton
}
- (UILabel *)geoCodeTipLabel {
if (!_geoCodeTipLabel) {
_geoCodeTipLabel = [[UILabel alloc] init]
_geoCodeTipLabel.font = [UIFont systemFontOfSize:16.0f weight:UIFontWeightMedium]
_geoCodeTipLabel.text = @"地址"
_geoCodeTipLabel.textAlignment = NSTextAlignmentCenter
}
return _geoCodeTipLabel
}
- (UITextField *)geoCodeTextField {
if (!_geoCodeTextField) {
_geoCodeTextField = [[UITextField alloc] init]
_geoCodeTextField.layer.borderWidth = 1.0f
_geoCodeTextField.layer.borderColor = [UIColor orangeColor].CGColor
_geoCodeTextField.layer.cornerRadius = 3.0f
_geoCodeTextField.layer.masksToBounds = YES
}
return _geoCodeTextField
}
- (UILabel *)geoCodeDetailLable {
if (!_geoCodeDetailLable) {
_geoCodeDetailLable = [[UILabel alloc] init]
_geoCodeDetailLable.backgroundColor = [[UIColor orangeColor] colorWithAlphaComponent:0.1]
_geoCodeDetailLable.textAlignment = NSTextAlignmentCenter
_geoCodeDetailLable.numberOfLines = 0
}
return _geoCodeDetailLable
}
- (UILabel *)geoDecodeTitleLabel {
if (!_geoDecodeTitleLabel) {
_geoDecodeTitleLabel = [[UILabel alloc] init]
_geoDecodeTitleLabel.font = [UIFont systemFontOfSize:18.0f weight:UIFontWeightMedium]
_geoDecodeTitleLabel.text = @"\u3000\u3000\u3000\u3000反地理编码"
}
return _geoDecodeTitleLabel
}
- (UIButton *)geoDecodeSurebutton {
if (!_geoDecodeSurebutton) {
_geoDecodeSurebutton = [[UIButton alloc] init]
[_geoDecodeSurebutton addTarget:self action:@selector(geoDecodeSurebuttonTouchUpInside:) forControlEvents:UIControlEventTouchUpInside]
_geoDecodeSurebutton.layer.cornerRadius = 13.0f
_geoDecodeSurebutton.layer.masksToBounds = YES
_geoDecodeSurebutton.backgroundColor = [[UIColor redColor] colorWithAlphaComponent:0.1]
[_geoDecodeSurebutton setTitle:@"确定" forState:UIControlStateNormal]
}
return _geoDecodeSurebutton
}
- (UILabel *)geoDecodeLongLabel {
if (!_geoDecodeLongLabel) {
_geoDecodeLongLabel = [[UILabel alloc] init]
_geoDecodeLongLabel.font = [UIFont systemFontOfSize:16.0f weight:UIFontWeightMedium]
_geoDecodeLongLabel.text = @"经度:"
_geoDecodeLongLabel.textAlignment = NSTextAlignmentCenter
}
return _geoDecodeLongLabel
}
- (UITextField *)geoDecodeLongTextField {
if (!_geoDecodeLongTextField) {
_geoDecodeLongTextField = [[UITextField alloc] init]
_geoDecodeLongTextField.layer.borderWidth = 1.0f
_geoDecodeLongTextField.layer.borderColor = [UIColor orangeColor].CGColor
_geoDecodeLongTextField.layer.cornerRadius = 3.0f
_geoDecodeLongTextField.layer.masksToBounds = YES
}
return _geoDecodeLongTextField
}
- (UILabel *)geoDecodeLatLabel {
if (!_geoDecodeLatLabel) {
_geoDecodeLatLabel = [[UILabel alloc] init]
_geoDecodeLatLabel.font = [UIFont systemFontOfSize:16.0f weight:UIFontWeightMedium]
_geoDecodeLatLabel.text = @"纬度:"
_geoDecodeLatLabel.textAlignment = NSTextAlignmentCenter
}
return _geoDecodeLatLabel
}
- (UITextField *)geoDecodeLatTextField {
if (!_geoDecodeLatTextField) {
_geoDecodeLatTextField = [[UITextField alloc] init]
_geoDecodeLatTextField.layer.borderWidth = 1.0f
_geoDecodeLatTextField.layer.borderColor = [UIColor orangeColor].CGColor
_geoDecodeLatTextField.layer.cornerRadius = 3.0f
_geoDecodeLatTextField.layer.masksToBounds = YES
}
return _geoDecodeLatTextField
}
- (UILabel *)geoDecodeDetailLable {
if (!_geoDecodeDetailLable) {
_geoDecodeDetailLable = [[UILabel alloc] init]
_geoDecodeDetailLable.backgroundColor = [[UIColor orangeColor] colorWithAlphaComponent:0.1]
_geoDecodeDetailLable.textAlignment = NSTextAlignmentCenter
_geoDecodeDetailLable.numberOfLines = 0
}
return _geoDecodeDetailLable
}
@end
