//联系人:石虎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
@interfaceViewController()
//地址输入框
@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
@implementationViewController
- (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(inti =0; i < addrArray.count; i ++)
{
[addrappendString: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
谢谢!!!