- (void)viewDidLoad

{

[super viewDidLoad];

// 创建地址解析器

self.geocoder = [[CLGeocoder alloc] init];

}

- (IBAction)encodeTapped:(id)sender

{

// 获取用户输入的地址字符串

NSString* addr = self.addrField.text;

if(addr != nil && addr.length > 0)

{

[self.geocoder geocodeAddressString:addr

completionHandler: ^(NSArray *placemarks, NSError *error)

{

// 如果解析结果的集合元素的个数大于1,表明解析得到了经度、纬度信息

if (placemarks.count > 0)

{

// 只处理第一个解析结果,实际项目中可使用列表让用户选择

CLPlacemark* placemark = placemarks[0];

CLLocation* location = placemark.location;

self.resultView.text = [NSString stringWithFormat:

@"%@的经度为:%g,纬度为:%g" , addr ,

location.coordinate.longitude ,

location.coordinate.latitude ];

}

// 没有得到解析结果。

else

{

// 使用UIAlertView提醒用户

[[[UIAlertView alloc] initWithTitle:@"提醒"

message:@"您输入的地址无法解析" delegate:nil

cancelButtonTitle:@"确定" otherButtonTitles: nil]

show];

}

}];

}

}

- (IBAction)reverseTapped:(id)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 = [[CLLocation alloc]

initWithLatitude:[latitudeStr floatValue]

longitude:[longitudeStr floatValue]];

[self.geocoder reverseGeocodeLocation:location completionHandler:

^(NSArray *placemarks, NSError *error)

{

// 如果解析结果的集合元素的个数大于1,表明解析得到了经度、纬度信息

if (placemarks.count > 0)

{

// 只处理第一个解析结果,实际项目可使用列表让用户选择

CLPlacemark* placemark = placemarks[0];

// 获取详细地址信息

NSArray* addrArray = [placemark.addressDictionary

objectForKey:@"FormattedAddressLines"];

// 将详细地址拼接成一个字符串

NSMutableString* addr = [[NSMutableString alloc] init];

for(int i = 0 ; i < addrArray.count ; i ++)

{

[addr appendString:addrArray[i]];

}

self.resultView.text = [NSString stringWithFormat:

@"经度:%g,纬度:%g的地址为:%@" ,

location.coordinate.longitude ,

location.coordinate.latitude , addr];

}

// 没有得到解析结果。

else

{

// 使用UIAlertView提醒用户

[[[UIAlertView alloc] initWithTitle:@"提醒"

message:@"您输入的地址无法解析" delegate:nil

cancelButtonTitle:@"确定" otherButtonTitles: nil]

show];

}

}];

}

}

iOS地址编码解析的更多相关文章

  1. iOS - JSON 数据解析

     iOS - JSON 数据解析 前言 NS_CLASS_AVAILABLE(10_7, 5_0) @interface NSJSONSerialization : NSObject @availab ...

  2. iOS面向编码|iOSVideoToolbox:读写解码回调函数CVImageBufferRef的YUV图像

    iOS面向编码|iOSVideoToolbox:读写解码回调函数CVImageBufferRef的YUV图像 本文档基于H.264的解码,介绍读写Video Toolbox解码回调函数参数CVImag ...

  3. iOS push全方位解析(二)【译文】"——生成OpenSSL证书,Provisioning Profile

    这是一篇来自raywenderlich的教程,内容翔实!结构简单透彻.讲解循序渐进.文章质量上乘!是一篇难的的博文!使用半瓶的英语水平翻译了一下: 1.[iOS push全方位解析](一) push的 ...

  4. iOS开发 XML解析和下拉刷新,上拉加载更多

    iOS开发 XML解析和下拉刷新,上拉加载更多 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示 ...

  5. 基于PHP的地址智能解析案例-快宝开放平台

    快宝地址智能解析,批量录入收件人.发件人最好的解决方案,广泛应用于快递行业,电商行业,ERP应用等. 一.对接前准备 注册快宝开放平台,获得开发者账号,查看如何注册. 二.对接联调 快宝开放平台支持多 ...

  6. 【安全开发】IOS安全编码规范

    申明:本文非笔者原创,原文转载自:https://github.com/SecurityPaper/SecurityPaper-web/blob/master/_posts/2.SDL%E8%A7%8 ...

  7. iOS使用TFHpple解析html

    iOS 开发中解析html 网上有很多写好的解析框架 今天就来讲一下如何用框架TFHpple来解析html 使用TFHpple解析html github地址:https://github.com/to ...

  8. ios 表情编码

    感受 :可以做自定义键盘时候用  很方便 还可以在textView里面看到 用户体验很好~ 但是要和服务器管理员协商好,做好解析转码工作,不然网页上是不显示的. ios表情编码 在ios中可以使用可爱 ...

  9. HTTP1.1中CHUNKED编码解析(转载)

    HTTP1.1中CHUNKED编码解析 一般HTTP通信时,会使用Content-Length头信息性来通知用户代理(通常意义上是浏览器)服务器发送的文档内容长度,该头信息定义于HTTP1.0协议RF ...

随机推荐

  1. 【WP之一】]独立存储

    介绍: 提供一个磁盘存储空间,他是一种虚拟的文件系统,能存储小量的数据:在默认的情况下,它只能存储1MB的文件.根据使用方式及功能的不同,独立存储空间又包含两部分:独立设置存储和独立文件存储.除非卸载 ...

  2. PLSQL_低效SQL的识别和查询汇总(案例)

    2014-12-18 Created By BaoXinjian

  3. SQL语句的Select部分只写必要的列

    如果Select部分包含不需要的列,这会强制DB2必须进入数据页来得到所请求的特定列,这就要求更多的I/O操作.另外,如果再对这个不需要的列进行排序,就需要创建和传递一个更大的排序文件,相应地会使排序 ...

  4. BarTender破解问题

    要使用BarTender 10.0的.net组件打印条码,就必须使用企业版的.在破解说明中会指出,BarTender破解过程要断开internet连接.在企业应用开发中,可能会遇到在局域网中给多个机器 ...

  5. 优化studio的速度

    随着Android Studio开发工具的逐渐成熟,越来越多的程序员选择这种IDE工具来进行开发,但是android studio在使用过程中有时候会出现卡顿问题.在赶项目的时候,遇到这类问题最是苦恼 ...

  6. 转载__直接拿来用!最火的Android开源项目(一)

    http://www.csdn.net/article/2013-05-03/2815127-Android-open-source-projects 已分类汇总到 https://github.co ...

  7. Java多线程之新类库中的构件PriorityBlockingQueue

    package concurrent2; import java.util.ArrayList; import java.util.List; import java.util.Queue; impo ...

  8. iOS获取电量方法

    ios简单的方法: [UIDevice currentDevice].batteryMonitoringEnabled = YES; double deviceLevel = [UIDevice cu ...

  9. DIY--主板跳线接法

    如下图:

  10. 20145305 《Java程序设计》第7周学习总结

    教材学习内容总结 1.只有Lambda表达式,参数的类型必须写出来,如果有目标类型,在编译程序可推断出类型的情况下,可以不写出 2.Lambda表达式本身是中性的,不代表任何类型的实例,可用来表示不同 ...