ios 定位获取当前位置信息
啊,倦怠的人生啊~~
什么事情都没做一眨眼就2点半了啊!!赶紧爬起来写博客啊。
诸位看官会鄙视我么,表示我真心不是把这当技术文章写的啊。
啊,下午我们来第二篇。获取地理位置信息。嗯嗯,秘籍上说叫逆向地理编码,其实就是由坐标位置获取当前所在地的文字信息啦。
至于什么速率怎么算,距离怎么取,那个看文档吧,筒子们。
获取当前所在地的地理位置信息需要使用一个新的类,MKReverseGeocoder。这个类在MapKit.framework中。我们把框架加进来,并将头文件导入就可以用了。
敲了一会代码,结果发现这个类iOS5.0就不用了。真是的。为了照顾兼容性,我们先研究MKReverseGeocoder,等下再来研究这个新类,恩,名字叫做CLGeocoder,恩,没拼错。在CoreLocation里面。
先说MKReverseGeocoder的用法。(忍不住出来吐个槽,一般看见被划掉的红线,一边敲回车,还真是说不出来的违和啊。)
。。。。。。。。。。。。。。。
表示测试完成了,IOS的网络总是假死,一假死,各种需要使用网络的的功能,就不怎好用了。桑心。
MKReverseGeocoder的初始化,很简单。
MKReverseGeocoder *geocoder = [[MKReverseGeocoder alloc] initWithCoordinate:currentCoordinate2D];
geocoder.delegate = self;
[geocoder start];
调用以上代码后呢,会自动调用反向地址编码的API。我们这边使用代理来接收。至于代理方法么,我们要实现两个。
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark {
}
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error{
}
第一个方法是获取反向编码的。第二个是当反向编码失败时,处理错误使用的。
我们主要讨论第一个方法。
placemark(MKPlacemark类的对象)其实是geocoder(MKReverseGeocoder类的对象)的一个属性。从geocoder里面取placemark这个和直接取placemark这个其实区别不大。而我们需要的信息主要就在这个里面了。
// 这个字典存放基础数据
@property (nonatomic, readonly) NSDictionary *addressDictionary;
让我们试试看,能从这个字典里面倒出来些什么东西。
以下是我用这个addressDictionary属性倒出来的字典。我们分析看看。
{
City = "\U897f\U5b89\U5e02";// 城市名字
Country = "\U4e2d\U56fd";// 国家名字
CountryCode = CN;// 国家编码
FormattedAddressLines = (
"\U4e2d\U56fd",
"\U9655\U897f\U7701\U897f\U5b89\U5e02\U96c1\U5854\U533a",
"\U9ad8\U65b0\U516d\U8def34\U53f7"
); // 这个应该是格式化后的地址了
State = "\U9655\U897f\U7701"; // 省
Street = "\U9ad8\U65b0\U516d\U8def 34\U53f7";// 街道完整名称
SubLocality = "\U96c1\U5854\U533a";//区名
SubThoroughfare = "34\U53f7";//具体地址
Thoroughfare = "\U9ad8\U65b0\U516d\U8def";//街道名称
}
注意:上面的这个字典是可以直接转化为联系人的字典的,通过这个ABCreateStringWithAddressDictionary属性。
以下是placemark的其他属性。大家可以随意取用。
// address dictionary properties
@property (nonatomic, readonly) NSString *name; // eg. Apple Inc.
@property (nonatomic, readonly) NSString *thoroughfare; // street address, eg. 1 Infinite Loop
@property (nonatomic, readonly) NSString *subThoroughfare; // eg. 1
@property (nonatomic, readonly) NSString *locality; // city, eg. Cupertino
@property (nonatomic, readonly) NSString *subLocality; // neighborhood, common name, eg. Mission District
@property (nonatomic, readonly) NSString *administrativeArea; // state, eg. CA
@property (nonatomic, readonly) NSString *subAdministrativeArea; // county, eg. Santa Clara
@property (nonatomic, readonly) NSString *postalCode; // zip code, eg. 95014
@property (nonatomic, readonly) NSString *ISOcountryCode; // eg. US
@property (nonatomic, readonly) NSString *country; // eg. United States
@property (nonatomic, readonly) NSString *inlandWater; // eg. Lake Tahoe
@property (nonatomic, readonly) NSString *ocean; // eg. Pacific Ocean
@property (nonatomic, readonly) NSArray *areasOfInterest; // eg. Golden Gate Park
注意:我在使用的过程中发现,如果网络假死,则有可能较长时间无法获得逆向的结果。这一点可能需要大家注意。
哎呀呀呀,差点忘了,IOS5下不推荐使用我上面讲的一大堆。我们需要用这个CLGeocoder类。
使用方法也很简单。参照如下步骤:
首先创建一个CLGeocoder对象,然后调用他的- (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;方法。按照需要的参数类型传参。有的筒子会问这个CLGeocodeCompletionHandler东西怎么写?这个其实是IOS4之后就被官方大力推荐使用的BLOCK,不会用的同学快去看文档吧。
CLGeocodeCompletionHandler的定义就是这样的。typedef void(^CLGeocodeCompletionHandler)(NSArray *placemarks, NSError *error); 我们只要写好一个block对象传进去就好了。
以下是使用CLGeocoder的参考代码。不用代理了是不是很开心呢?
CLGeocoder* geocoder = [[CLGeocoder alloc] init];
[geocoder reverseGeocodeLocation:newLocation completionHandler:
^(NSArray* placemarks, NSError* error){
NSLog(@"%@",placemarks);
}];
表示定位部分的内容就介绍到这里,至于什么正向编码,什么前面提到的速率,距离之类的,大家参看文档就好了。勤看文档的筒子才是好筒子嘛
ios 定位获取当前位置信息的更多相关文章
- 定位 - CoreLocation - 打印位置信息
1. 导入框架 <CoreLocation.framework>, 引入头文件 import <CoreLocation/CoreLocation.h>; 2. 创建管理者对象 ...
- 关于微信小程序获取当前位置信息
小程序开发---获取当前位置信息 一.获取用户地理位置信息 1.配置app.json文件 { "pages": ["pages/index/index"], & ...
- html5定位获取当前位置并在百度地图上显示
用html5的地理定位功能通过手机定位获取当前位置并在地图上居中显示出来,下面是百度地图API的使用过程,有需要的朋友可以参考下 在开发移动端 web 或者webapp时,使用百度地图 API 的过程 ...
- iOS项目开发实战——使用CoreLocation获取当前位置信息
随着基于位置服务LBS和移动互联网的兴起,你的位置是越来越重要的一个信息.位置服务已经是当前的热门应用如微信.陌陌等社交应用的杀手锏.而在iOS开发中,苹果已经给我们提供了一个位置接口.CoreLoc ...
- 在Android Studio中使用BaiduMap SDK实时获取当地位置信息
配置BaiduMap 环境 1.在百度API中新建自己的一个APP包名和APP名需要注意和自己Android Studio 中的包名和APP名保持一致: 2.百度地图中还需要填写一个SHA1 数字签名 ...
- Android初级教程获取手机位置信息GPS与动态获取最佳方式
简单介绍一下gps定位的操作. 主要是靠locationmanger这个api完成的一些操作:通过获取这个实例,然后调用它的requestLocationUpdates方法进行注册.传入的参数分别有以 ...
- 获取元素位置信息和所占空间大小(via:js&jquery)
工作中有一个很常见的需求,hover或者click某元素后,在该元素旁边出现弹框,主要就是获取该元素的位置坐标以及元素所占区块的大小.最近工作中就遇到了,发现js和jquery的实现方法有很大的区别, ...
- android GPS 定位,取位置信息
现在很多app ,需要取位置信息,所以我也做了一个模块用来取位置信息: 加入位置服务所需的权限: <uses-permission android:name="android.pe ...
- Android GPS获取当前位置信息
package com.example.gpstest; import org.apache.http.util.LangUtils; import android.content.Context; ...
随机推荐
- 手机如何解散QQ讨论组
手机如何解散QQ讨论组 讨论组可以方便一群人的聊天,一般都是一段时间的问题.过了这一段时间,大家都是不需要再在讨论组里面发言了,那么手机如何解散QQ讨论组呢? 1 我们登录自己的 QQ之后 ...
- java程序设计单一原则
在我的程序设计中一般一个类就负责一个职责 ex: class Animal{ public void brether(String animal){ System.out.println(animal ...
- 百度web前端面试2015.10.18
邮件里通知的周日下午两点参加百度校招面试,我13:10分就到了,前台先让我拿了个面试资格单(上面是我的信息),然后在web前端面试入口排队,面试在百度食堂举行的,等了大概1个小时,放我去面试.都是一对 ...
- otl插入数据不成功
原因是:void rlogon(...); 没有设置auto_commit为1,otl不会自动提交. 注意:static int otl_initialize (const int threaded_ ...
- JavaWeb学习总结(六)—HttpServletResponse
Response概述: response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse.在客户端发出每个请求时,服务 ...
- C/C++中static关键字作用总结
来来来,来看这篇文章: http://www.cnblogs.com/biyeymyhjob/archive/2012/07/19/2598815.html 总结一下: 1.先来介绍它的第一条也是最重 ...
- [js] 跨域
原文链接:http://www.cnblogs.com/scottckt/archive/2011/11/12/2246531.html 什么是跨域? 首先什么是跨域,简单地理解就是因为JavaScr ...
- python和shell变量互相传递的几种方法
python -> shell: 1.环境变量 复制代码代码如下: import os var=123或var='123'os.environ['var']=str(var) #enviro ...
- MapReduce工作原理
第一部分:MapReduce工作原理 MapReduce 角色•Client :作业提交发起者.•JobTracker: 初始化作业,分配作业,与TaskTracker通信,协调整个作业.•Tas ...
- C# Web中Session的使用
1. 关于使用之前要注意的: 在使用session之前,一定要注意继承自System.Web.UI.Page,或在使用session时加上System.Web.HttpContext.Current: ...