iOS开发拓展篇—CoreLocation地理编码
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文件
- //
- // YYViewController.m
- // 19-地理编码
- //
- // Created by apple on 14-8-11.
- // Copyright (c) 2014年 yangyong. All rights reserved.
- //
- #import "YYViewController.h"
- #import <CoreLocation/CoreLocation.h>
- @interface YYViewController ()
- @property(nonatomic,strong)CLGeocoder *geocoder;
- #pragma mark-地理编码
- - (IBAction)geocode;
- @property (weak, nonatomic) IBOutlet UITextField *addressField;
- @property (weak, nonatomic) IBOutlet UILabel *longitudeLabel;
- @property (weak, nonatomic) IBOutlet UILabel *latitudeLabel;
- @property (weak, nonatomic) IBOutlet UILabel *detailAddressLabel;
- #pragma mark-反地理编码
- - (IBAction)reverseGeocode;
- @property (weak, nonatomic) IBOutlet UITextField *longitudeField;
- @property (weak, nonatomic) IBOutlet UITextField *latitudeField;
- @property (weak, nonatomic) IBOutlet UILabel *reverdeDetailAddressLabel;
- @end
- @implementation YYViewController
- #pragma mark-懒加载
- -(CLGeocoder *)geocoder
- {
- if (_geocoder==nil) {
- _geocoder=[[CLGeocoder alloc]init];
- }
- return _geocoder;
- }
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- }
- /**
- * 地理编码:地名—>经纬度坐标
- */
- - (IBAction)geocode {
- //1.获得输入的地址
- NSString *address=self.addressField.text;
- if (address.length==) return;
- //2.开始地理编码
- //说明:调用下面的方法开始编码,不管编码是成功还是失败都会调用block中的方法
- [self.geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
- //如果有错误信息,或者是数组中获取的地名元素数量为0,那么说明没有找到
- if (error || placemarks.count==) {
- self.detailAddressLabel.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];
- //详细地址名称
- self.detailAddressLabel.text=firstPlacemark.name;
- //纬度
- CLLocationDegrees latitude=firstPlacemark.location.coordinate.latitude;
- //经度
- CLLocationDegrees longitude=firstPlacemark.location.coordinate.longitude;
- self.latitudeLabel.text=[NSString stringWithFormat:@"%.2f",latitude];
- self.longitudeLabel.text=[NSString stringWithFormat:@"%.2f",longitude];
- }
- }];
- }
- /**
- * 反地理编码:经纬度坐标—>地名
- */
- - (IBAction)reverseGeocode {
- //1.获得输入的经纬度
- NSString *longtitudeText=self.longitudeField.text;
- NSString *latitudeText=self.latitudeField.text;
- if (longtitudeText.length==||latitudeText.length==) 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==) {
- self.reverdeDetailAddressLabel.text=@"你输入的地址没找到,可能在月球上";
- }else//编码成功
- {
- //显示最前面的地标信息
- CLPlacemark *firstPlacemark=[placemarks firstObject];
- self.reverdeDetailAddressLabel.text=firstPlacemark.name;
- //经纬度
- CLLocationDegrees latitude=firstPlacemark.location.coordinate.latitude;
- CLLocationDegrees longitude=firstPlacemark.location.coordinate.longitude;
- self.latitudeField.text=[NSString stringWithFormat:@"%.2f",latitude];
- self.longitudeField.text=[NSString stringWithFormat:@"%.2f",longitude];
- }
- }];
- }
- -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- {
- [self.view endEditing:YES];
- }
- @end
实现效果:
(1)地理编码:(地名->经纬度坐标)
打印输出:
(2)反地理编码:(经纬度—>地名)
(3)注意:调整键盘
点击经纬度textField进行输入的时候,弹出的键盘如下
(4)注意:搜索的所有结果都是在中国境内的,因为苹果在中国的地图服务商是高德地图。
iOS开发拓展篇—CoreLocation地理编码的更多相关文章
- iOS开发拓展篇—CoreLocation简单介绍
iOS开发拓展篇—CoreLocation简单介绍 一.简介 1.在移动互联网时代,移动app能解决用户的很多生活琐事,比如 (1)导航:去任意陌生的地方 (2)周边:找餐馆.找酒店.找银行.找电影院 ...
- iOS开发拓展篇—CoreLocation定位服务
iOS开发拓展篇—CoreLocation定位服务 一.简单说明 1.CLLocationManager CLLocationManager的常用操作和属性 开始用户定位- (void)startUp ...
- iOS开发拓展篇—静态库
iOS开发拓展篇—静态库 一.简单介绍 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的分类 根据源代码的公开情况,库可以分为2种类型 (1)开源库 公开源代码,能看到具体实现 ...
- iOS开发拓展篇—UIDynamic(简单介绍)
iOS开发拓展篇—UIDynamic(简单介绍) 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟 ...
- iOS开发拓展篇—UIDynamic(重力行为+碰撞检测)
iOS开发拓展篇—UIDynamic(重力行为+碰撞检测) 一.重力行为 说明:给定重力方向.加速度,让物体朝着重力方向掉落 1.方法 (1)UIGravityBehavior的初始化 - (inst ...
- iOS开发拓展篇—UIDynamic(捕捉行为)
iOS开发拓展篇—UIDynamic(捕捉行为) 一.简介 可以让物体迅速冲到某个位置(捕捉位置),捕捉到位置之后会带有一定的震动 UISnapBehavior的初始化 - (instancetype ...
- iOS开发拓展篇—音效的播放
iOS开发拓展篇—音效的播放 一.简单介绍 简单来说,音频可以分为2种 (1)音效 又称“短音频”,通常在程序中的播放时长为1~2秒 在应用程序中起到点缀效果,提升整体用户体验 (2)音乐 比如游戏中 ...
- iOS开发拓展篇—音乐的播放
iOS开发拓展篇—音乐的播放 一.简单说明 音乐播放用到一个叫做AVAudioPlayer的类,这个类可以用于播放手机本地的音乐文件. 注意: (1)该类(AVAudioPlayer)只能用于播放本地 ...
- iOS开发拓展篇—封装音频文件播放工具类
iOS开发拓展篇—封装音频文件播放工具类 一.简单说明 1.关于音乐播放的简单说明 (1)音乐播放用到一个叫做AVAudioPlayer的类 (2)AVAudioPlayer常用方法 加载音乐文件 - ...
随机推荐
- 利用Java进行MySql数据库的导入和导出
利用Java来进行Mysql数据库的导入和导出的总体思想是通过Java来调用命令窗口执行相应的命令. MySql导出数据库的命令如下: mysqldump -uusername -ppassword ...
- 折纸问题java实现
/** * 折纸问题 这段代码写的太low了 本人水平有限 哎... 全是字符串了 * @param n * @return * @date 2016-10-7 * @author shaobn */ ...
- Qt之qt4.7 和qt 4.8.4 交叉实践
开发机环境搭建: 测试环境:CentOs7.1 Ubuntu 12.0.4 操作流程: 一.编译Qt4.7.0 1)CentOS上实践 1.tar xzvf qt-everywhere-openso ...
- 【svn】一个设置,少写几个字
以下场景仅适用于修改bug的时候,在提交代码的时候少写几个字,嘿嘿: 1.打开[SVN 属性],在代码目录右键 2.打开BUG跟踪设置窗口 3.输入BUG的URL前缀以及%BUGID%,如 复选框,建 ...
- JQ 操作 radio、checkbox 、select
MXS&Vincene ─╄OvЁ &0000026─╄OvЁ MXS&Vincene MXS&Vincene ─╄OvЁ:今天很残酷,明天更残酷,后天很美好, ...
- echo(),print(),print_r(),var_dump的区别?
常见的输出语句 echo()可以一次输出多个值,多个值之间用逗号分隔.echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用. print()函 ...
- UnicodeDecodeError: 'utf8' codec can't decode byte 0xce in position 47: invalid continuation byte
- 初试“七牛云”--零基础运用七牛云配合UEditor实现图片的上传和浏览(.NET篇)
(注册和建立存储空间就不介绍了,网上一把一把的资料,自己试着点点也能明白) 作为一个成熟的菜鸟,如果遇到一个新问题,第一步当然是先百度一下... 看了N个关于七牛云的使用的帖子,表示还是蒙圈的,看懂了 ...
- 【web必知必会】——图解HTTP(上)
本篇总结关于http的相关知识,主要内容参考如下导图: 主要讲解的内容有: 1 URL与URI的区别. 2 请求报文与相应报文的内容. 3 GET与POST的区别. 4 http的cookie.持久化 ...
- 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 ...