iOS 定位 基础
来源:互联网 发布:韩信点兵 算法1和算法2 编辑:程序博客网 时间:2024/05/22 00:26
原文 : http://blog.csdn.net/csj1987/article/details/6658895
http://blog.csdn.net/csj1987/article/details/6658895
iOS只是没把“卫星定位”和“基站定位”这两个开关分开,实际上是有基站定位的能力的。//ios 6还需要单独安装 google地图,才能使用原 来的 app,是否还需要进行更多设置,而不是 一个 mapvendor属性搞定的 ? 在需求中 需要说明支持的 定位平台
IOS中的core location提供了定位功能,能定位装置的当前坐标,同时能得到装置移动信息。因为对定位装置的轮询是很耗电的,所以最好只在非常必要的前提下启动。
其中,最重要的类是CLLocationManager,定位管理。
其定位有3种方式:
1,GPS,最精确的定位方式,貌似iphone1是不支持的。
2,蜂窝基站三角定位,这种定位在信号基站比较秘籍的城市比较准确。
3,Wifi,这种方式貌似是通过网络运营商的数据库得到的数据,在3种定位种最不精确
使用方式:
1,引入CoreLocation的包,一般的默认模板里是没有的,所以需要手动导入。
2,通过启动CLLocationManager来启动定位服务,因为定位信息是需要轮询的,而且对于程序来说是需要一定时间才会得到的,所以翠玉lcationManager的操作大多都给委托来完成。
加载locationManager的代码:
- CLLocationManager *locationManager = [[CLLocationManager alloc] init];//创建位置管理器
- locationManager.delegate=self;
- locationManager.desiredAccuracy=kCLLocationAccuracyBest;
- locationManager.distanceFilter=1000.0f;
- //启动位置更新
- [locationManager startUpdatingLocation];
distanceFilter是距离过滤器,为了减少对定位装置的轮询次数,位置的改变不会每次都去通知委托,而是在移动了足够的距离时才通知委托程序,它的单位是米,这里设置为至少移动1000再通知委托处理更新。
startUpdatingLocation就是启动定位管理了,一般来说,在不需要更新定位时最好关闭它,用stopUpdatingLocation,可以节省电量。
对于委托CLLocationManagerDelegate,最常用的方法是:
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation;
这个方法即定位改变时委托会执行的方法。
可以得到新位置,旧位置,CLLocation里面有经度纬度的坐标值,
同时CLLocation还有个属性horizontalAccuracy,用来得到水平上的精确度,它的大小就是定位精度的半径,单位为米。
如果值为-1,则说明此定位不可信。
另外委托还有一个常用方法是
- (void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error ;
当定位出现错误时就会调用这个方法。
地址翻译问题 :
CoreLocation中得到的定位信息都是以经度和纬度等表示的地理信息,很多时候我们需要把它反向编码成普通人能读懂的地理位置描述如:X国XX市XXX区XXX街道XX号,这就需要用到MapKit中的一个地理位置反向编码工具:MKReverseGeocoder,
用法:
1,首先要实现协议MKReverseGeocoderDelegate,因为将坐标信息发到服务器再反回来需要一定的时间,所以为了防止阻塞,发出信息后并不知到什么时候会返回信息,信息返回时会通知委托方法。这里实现这个类主要时为了实现2个方法如下:
- - (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error{
- NSLog(@"MKReverseGeocoder has failed.");
- }
- - (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark{
- NSLog(@"当前地理信息为:%@",placemark);
- }
2,然后可以init一个反向编码器,然后发出请求了:
- MKReverseGeocoder *reverseGeocoder =[[MKReverseGeocoder alloc] initWithCoordinate:coordinate];
- NSLog(@"%g",coordinate.latitude);
- NSLog(@"%g",coordinate.longitude);
- reverseGeocoder.delegate = self;
- [reverseGeocoder start];
- iOS 定位 基础
- iOS 定位 基础
- iOS系统定位基础使用
- iOS 地图SDK的使用 -- 定位基础
- iOS开发基础篇-CoreLocation定位服务
- iOS关于地图定位基础(一)
- iOS关于地图定位基础(二)
- iOS开发基础之系统定位
- 定位基础
- IOS定位
- IOS定位
- IOS 定位
- iOS定位
- ios 定位
- IOS 定位
- iOS 定位
- ios定位
- iOS定位
- PLSQL Developer V9/V8注册码
- makefile 中的 wildcard,foreach 与 patsubst 函数
- 建议所有软件工程直接使用UNICODE
- keil RTOS RTX full 定时不准???
- mx53 linux gpio控制led
- iOS 定位 基础
- 编程的思想、数据结构、算法
- 【解决】win7桌面上的“计算机”图标双击打开的是“库”,改成双击打开是“计算机”
- POJ3087《Shuffle'm Up》方法:模拟
- 简单Java验证码识别算法
- JS提交表单
- MYECLIPSE注册机
- Android Read-only file system”的错误
- Struts2 的Result编写