iOS开发拓展篇—CoreLocation地理编码

一、简单说明

CLGeocoder:地理编码器,其中Geo是地理的英文单词Geography的简写。

1.使用CLGeocoder可以完成“地理编码”和“反地理编码”

地理编码:根据给定的地名,获得具体的位置信息(比如经纬度、地址的全称等)

反地理编码:根据给定的经纬度,获得具体的位置信息

(1)地理编码方法

  - (void)geocodeAddressString:(NSString *)addressString completionHandler:(CLGeocodeCompletionHandler)completionHandler;

(2)反地理编码方法

  - (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;

2.CLGeocodeCompletionHandler

  当地理\反地理编码完成时,就会调用CLGeocodeCompletionHandler

  

这个block传递2个参数

error :当编码出错时(比如编码不出具体的信息)有值

placemarks :里面装着CLPlacemark对象

3.CLPlacemark

说明:CLPlacemark的字面意思是地标,封装详细的地址位置信息

地理位置     @property (nonatomic, readonly) CLLocation *location;  

区域       @property (nonatomic, readonly) CLRegion *region;

详细的地址信息   @property (nonatomic, readonly) NSDictionary *addressDictionary;

地址名称    @property (nonatomic, readonly) NSString *name;

城市      @property (nonatomic, readonly) NSString *locality;

二、代码示例:

在storyboard中搭建界面如下:

  

实现代码:

  YYViewController.m文件

  1. //
  2. // YYViewController.m
  3. // 19-地理编码
  4. //
  5. // Created by apple on 14-8-11.
  6. // Copyright (c) 2014年 yangyong. All rights reserved.
  7. //
  8.  
  9. #import "YYViewController.h"
  10. #import <CoreLocation/CoreLocation.h>
  11.  
  12. @interface YYViewController ()
  13. @property(nonatomic,strong)CLGeocoder *geocoder;
  14. #pragma mark-地理编码
  15. - (IBAction)geocode;
  16. @property (weak, nonatomic) IBOutlet UITextField *addressField;
  17. @property (weak, nonatomic) IBOutlet UILabel *longitudeLabel;
  18. @property (weak, nonatomic) IBOutlet UILabel *latitudeLabel;
  19. @property (weak, nonatomic) IBOutlet UILabel *detailAddressLabel;
  20.  
  21. #pragma mark-反地理编码
  22.  
  23. - (IBAction)reverseGeocode;
  24. @property (weak, nonatomic) IBOutlet UITextField *longitudeField;
  25. @property (weak, nonatomic) IBOutlet UITextField *latitudeField;
  26. @property (weak, nonatomic) IBOutlet UILabel *reverdeDetailAddressLabel;
  27. @end
  28.  
  29. @implementation YYViewController
  30.  
  31. #pragma mark-懒加载
  32. -(CLGeocoder *)geocoder
  33. {
  34. if (_geocoder==nil) {
  35. _geocoder=[[CLGeocoder alloc]init];
  36. }
  37. return _geocoder;
  38. }
  39. - (void)viewDidLoad
  40. {
  41. [super viewDidLoad];
  42. }
  43. /**
  44. * 地理编码:地名—>经纬度坐标
  45. */
  46. - (IBAction)geocode {
  47. //1.获得输入的地址
  48. NSString *address=self.addressField.text;
  49. if (address.length==) return;
  50.  
  51. //2.开始地理编码
  52. //说明:调用下面的方法开始编码,不管编码是成功还是失败都会调用block中的方法
  53. [self.geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
  54. //如果有错误信息,或者是数组中获取的地名元素数量为0,那么说明没有找到
  55. if (error || placemarks.count==) {
  56. self.detailAddressLabel.text=@"你输入的地址没找到,可能在月球上";
  57. }else // 编码成功,找到了具体的位置信息
  58. {
  59. //打印查看找到的所有的位置信息
  60. /*
  61. name:名称
  62. locality:城市
  63. country:国家
  64. postalCode:邮政编码
  65. */
  66. for (CLPlacemark *placemark in placemarks) {
  67. NSLog(@"name=%@ locality=%@ country=%@ postalCode=%@",placemark.name,placemark.locality,placemark.country,placemark.postalCode);
  68. }
  69.  
  70. //取出获取的地理信息数组中的第一个显示在界面上
  71. CLPlacemark *firstPlacemark=[placemarks firstObject];
  72. //详细地址名称
  73. self.detailAddressLabel.text=firstPlacemark.name;
  74. //纬度
  75. CLLocationDegrees latitude=firstPlacemark.location.coordinate.latitude;
  76. //经度
  77. CLLocationDegrees longitude=firstPlacemark.location.coordinate.longitude;
  78. self.latitudeLabel.text=[NSString stringWithFormat:@"%.2f",latitude];
  79. self.longitudeLabel.text=[NSString stringWithFormat:@"%.2f",longitude];
  80. }
  81. }];
  82. }
  83.  
  84. /**
  85. * 反地理编码:经纬度坐标—>地名
  86. */
  87. - (IBAction)reverseGeocode {
  88. //1.获得输入的经纬度
  89. NSString *longtitudeText=self.longitudeField.text;
  90. NSString *latitudeText=self.latitudeField.text;
  91. if (longtitudeText.length==||latitudeText.length==) return;
  92.  
  93. CLLocationDegrees latitude=[latitudeText doubleValue];
  94. CLLocationDegrees longitude=[longtitudeText doubleValue];
  95.  
  96. CLLocation *location=[[CLLocation alloc]initWithLatitude:latitude longitude:longitude];
  97. //2.反地理编码
  98. [self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
  99. if (error||placemarks.count==) {
  100. self.reverdeDetailAddressLabel.text=@"你输入的地址没找到,可能在月球上";
  101. }else//编码成功
  102. {
  103. //显示最前面的地标信息
  104. CLPlacemark *firstPlacemark=[placemarks firstObject];
  105. self.reverdeDetailAddressLabel.text=firstPlacemark.name;
  106. //经纬度
  107. CLLocationDegrees latitude=firstPlacemark.location.coordinate.latitude;
  108. CLLocationDegrees longitude=firstPlacemark.location.coordinate.longitude;
  109. self.latitudeField.text=[NSString stringWithFormat:@"%.2f",latitude];
  110. self.longitudeField.text=[NSString stringWithFormat:@"%.2f",longitude];
  111. }
  112. }];
  113. }
  114.  
  115. -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
  116. {
  117. [self.view endEditing:YES];
  118. }
  119. @end

实现效果:

(1)地理编码:(地名->经纬度坐标)

  

打印输出:

  

(2)反地理编码:(经纬度—>地名)

   

(3)注意:调整键盘

  

  点击经纬度textField进行输入的时候,弹出的键盘如下

  

(4)注意:搜索的所有结果都是在中国境内的,因为苹果在中国的地图服务商是高德地图。

iOS开发拓展篇—CoreLocation地理编码的更多相关文章

  1. iOS开发拓展篇—CoreLocation简单介绍

    iOS开发拓展篇—CoreLocation简单介绍 一.简介 1.在移动互联网时代,移动app能解决用户的很多生活琐事,比如 (1)导航:去任意陌生的地方 (2)周边:找餐馆.找酒店.找银行.找电影院 ...

  2. iOS开发拓展篇—CoreLocation定位服务

    iOS开发拓展篇—CoreLocation定位服务 一.简单说明 1.CLLocationManager CLLocationManager的常用操作和属性 开始用户定位- (void)startUp ...

  3. iOS开发拓展篇—静态库

    iOS开发拓展篇—静态库 一.简单介绍 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的分类 根据源代码的公开情况,库可以分为2种类型 (1)开源库 公开源代码,能看到具体实现 ...

  4. iOS开发拓展篇—UIDynamic(简单介绍)

    iOS开发拓展篇—UIDynamic(简单介绍) 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟 ...

  5. iOS开发拓展篇—UIDynamic(重力行为+碰撞检测)

    iOS开发拓展篇—UIDynamic(重力行为+碰撞检测) 一.重力行为 说明:给定重力方向.加速度,让物体朝着重力方向掉落 1.方法 (1)UIGravityBehavior的初始化 - (inst ...

  6. iOS开发拓展篇—UIDynamic(捕捉行为)

    iOS开发拓展篇—UIDynamic(捕捉行为) 一.简介 可以让物体迅速冲到某个位置(捕捉位置),捕捉到位置之后会带有一定的震动 UISnapBehavior的初始化 - (instancetype ...

  7. iOS开发拓展篇—音效的播放

    iOS开发拓展篇—音效的播放 一.简单介绍 简单来说,音频可以分为2种 (1)音效 又称“短音频”,通常在程序中的播放时长为1~2秒 在应用程序中起到点缀效果,提升整体用户体验 (2)音乐 比如游戏中 ...

  8. iOS开发拓展篇—音乐的播放

    iOS开发拓展篇—音乐的播放 一.简单说明 音乐播放用到一个叫做AVAudioPlayer的类,这个类可以用于播放手机本地的音乐文件. 注意: (1)该类(AVAudioPlayer)只能用于播放本地 ...

  9. iOS开发拓展篇—封装音频文件播放工具类

    iOS开发拓展篇—封装音频文件播放工具类 一.简单说明 1.关于音乐播放的简单说明 (1)音乐播放用到一个叫做AVAudioPlayer的类 (2)AVAudioPlayer常用方法 加载音乐文件 - ...

随机推荐

  1. 利用Java进行MySql数据库的导入和导出

    利用Java来进行Mysql数据库的导入和导出的总体思想是通过Java来调用命令窗口执行相应的命令. MySql导出数据库的命令如下: mysqldump -uusername -ppassword  ...

  2. 折纸问题java实现

    /** * 折纸问题 这段代码写的太low了 本人水平有限 哎... 全是字符串了 * @param n * @return * @date 2016-10-7 * @author shaobn */ ...

  3. Qt之qt4.7 和qt 4.8.4 交叉实践

    开发机环境搭建: 测试环境:CentOs7.1  Ubuntu 12.0.4 操作流程: 一.编译Qt4.7.0 1)CentOS上实践 1.tar xzvf qt-everywhere-openso ...

  4. 【svn】一个设置,少写几个字

    以下场景仅适用于修改bug的时候,在提交代码的时候少写几个字,嘿嘿: 1.打开[SVN 属性],在代码目录右键 2.打开BUG跟踪设置窗口 3.输入BUG的URL前缀以及%BUGID%,如 复选框,建 ...

  5. JQ 操作 radio、checkbox 、select

    MXS&Vincene  ─╄OvЁ  &0000026─╄OvЁ  MXS&Vincene MXS&Vincene  ─╄OvЁ:今天很残酷,明天更残酷,后天很美好, ...

  6. echo(),print(),print_r(),var_dump的区别?

    常见的输出语句 echo()可以一次输出多个值,多个值之间用逗号分隔.echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用. print()函 ...

  7. UnicodeDecodeError: 'utf8' codec can't decode byte 0xce in position 47: invalid continuation byte

  8. 初试“七牛云”--零基础运用七牛云配合UEditor实现图片的上传和浏览(.NET篇)

    (注册和建立存储空间就不介绍了,网上一把一把的资料,自己试着点点也能明白) 作为一个成熟的菜鸟,如果遇到一个新问题,第一步当然是先百度一下... 看了N个关于七牛云的使用的帖子,表示还是蒙圈的,看懂了 ...

  9. 【web必知必会】——图解HTTP(上)

    本篇总结关于http的相关知识,主要内容参考如下导图: 主要讲解的内容有: 1 URL与URI的区别. 2 请求报文与相应报文的内容. 3 GET与POST的区别. 4 http的cookie.持久化 ...

  10. ATI Radeon HD 5450 with full QE/CI Support ( 转载 )

    ATI Radeon HD 5450 with full QE/CI Support - DSDT (Contains HDMI Audio Edit Too) & AGPM included ...