//联系人:石虎 QQ: 1224614774昵称:嗡嘛呢叭咪哄
/**
注意点: 1.看 GIF 效果图.
2.看连线视图的效果图.
3.看实现代码(直接复制实现效果).
*/
一、GIF 效果图:
二、连线视图的效果图:
图1:
三、实现代码:
=========================
===================================================
==========================
/**
注意点: 在视图上面输入经纬度-->不能超出一下范围
1.纬度为 南纬90-0-北纬90
2.经度为 西经180-本出子午线(0度)-东经180
3.高德地图存在偏差,解析的经纬度不准确
4.UIAlertView(提示框)不能高于 iOS9.0,否则报黄
*/
控制器1:
//
// ViewController.m
// AddressResolution(地址解析)
//
// Created by 石虎 on 2017/7/5.
// Copyright © 2017年 shihu. All rights reserved.
//
#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>
@interface ViewController ()
//地址输入框
@property (weak,nonatomic)IBOutletUITextField *addrField;
//经度
@property (weak,nonatomic)IBOutletUITextField *longitudeField;
//纬度
@property (weak,nonatomic)IBOutletUITextField *latitudeField;
//显示内容框
@property (weak,nonatomic)IBOutletUITextView *resultView;
//解析地址
- (IBAction)encodeTapped:(UIButton *)sender;
//反方向解析
- (IBAction)reverseTapped:(UIButton *)sender;
//地理编码
@property (strong,nonatomic)CLGeocoder *geocoder;
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
// 创建地址解析器
self.geocoder = [[CLGeocoderalloc]init];
}
#pragma mark -解析地址
- (IBAction)encodeTapped:(UIButton *)sender
{
//获取用户输入的地址字符串
NSString *addr =self.addrField.text;
if(addr !=nil && addr.length >0)
{
[self.geocodergeocodeAddressString:@"北京八维研修学院"
completionHandler: ^(NSArray *placemarks,NSError *error)
{
//如果解析结果的集合元素的个数大于1,表明解析得到了经度、纬度信息
if (placemarks.count >0)
{
//只处理第一个解析结果,实际项目中可使用列表让用户选择
CLPlacemark *placemark = placemarks[0];
CLLocation* location = placemark.location;
self.resultView.text = [NSStringstringWithFormat:
@"%@的经度为:%g,纬度为:%g" , addr ,
location.coordinate.longitude ,
location.coordinate.latitude ];
}else//没有得到解析结果。
{
// 使用UIAlertView提醒用户
[[[UIAlertViewalloc]initWithTitle:@"提醒"message:@"您输入的地址无法解析"delegate:nilcancelButtonTitle:@"确定"otherButtonTitles:nil]
show];
}
}];
}
}
#pragma mark -反方向解析
- (IBAction)reverseTapped:(UIButton *)sender
{
NSString* longitudeStr =self.longitudeField.text;
NSString* latitudeStr =self.latitudeField.text;
if(longitudeStr !=nil && longitudeStr.length >0
&& latitudeStr != nil && latitudeStr.length >0)
{
// 将用户输入的经度、纬度封装成CLLocation对象
CLLocation* location = [[CLLocationalloc]
initWithLatitude:[latitudeStrfloatValue]
longitude:[longitudeStrfloatValue]];
[self.geocoderreverseGeocodeLocation:locationcompletionHandler:
^(NSArray *placemarks,NSError *error)
{
//如果解析结果的集合元素的个数大于1,表明解析得到了经度、纬度信息
if (placemarks.count >0)
{
//只处理第一个解析结果,实际项目可使用列表让用户选择
CLPlacemark* placemark = placemarks[0];
// 获取详细地址信息
NSArray* addrArray = [placemark.addressDictionary
objectForKey:@"FormattedAddressLines"];
// 将详细地址拼接成一个字符串
NSMutableString* addr = [[NSMutableStringalloc]init];
for(int i =0 ; i < addrArray.count ; i ++)
{
[addr appendString:addrArray[i]];
}
self.resultView.text = [NSStringstringWithFormat:
@"经度:%g,纬度:%g的地址为:%@" ,
location.coordinate.longitude ,
location.coordinate.latitude , addr];
}else{//没有得到解析结果。
// 使用UIAlertView提醒用户
[[[UIAlertViewalloc]initWithTitle:@"提醒"message:@"您输入的地址无法解析"delegate:nilcancelButtonTitle:@"确定"otherButtonTitles:nil]
show];
}
}];
}
}
@end
谢谢!!!