地图
一、iOS系统自带定位,用CLLocationManager就可以轻松的实现定位的操作,获得的是一组经纬度。
1、导入CoreLocation.framework框架
2、定义属性 CLLocationManager *_locationManager
3、@property(assign, nonatomic) id<CLLocationManagerDelegate> delegate;
4、@property(assign, nonatomic) CLLocationDistance distanceFilter;
设置过滤器的距离
5、@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;
设置精确度,位置服务大量消耗电池电量,下面罗列优先级别从上而下:
6、ios8.0之后请求授权,需要在plist文件中添加字段
NSLocationWhenInUseUsageDescription 值为YES请求定位的用户授权
requestWhenInUseAuthorization 只有应用在使用的时候允许授权
requestAlwaysAuthorization 在任何时候都需要授权,如果要在后台定位,需要有一个明确的提示,告诉用户,你的应用会在后台定位,电池会加快消耗
[_locationManager requestWhenInUseAuthorization];
7、- (void)startUpdatingLocation;
开启位置服务
8、-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;
当位置发生变化时调用这个方法
9 、-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
当定位失败的时候调用这个方法
CLLocation的属性CLLocationCoordinate2D中包含了经度longitude 纬度latitude
二、根据上面得到的经纬度可以获取相应的身份、城市、街道等信息。
1、CLGeocoder *geocoder=[[CLGeocoder alloc]init];
CLGeocoder类中有几个方法,一个是把经纬度转化成大家能看懂的信息,比如:city,county,街道等等
2、- (void)reverseGeocodeLocation:(CLLocation *)location completionHandler:(CLGeocodeCompletionHandler)completionHandler;
根据经纬度反向地理编译出地址信息
CLPlacemark有很多属性,thoroughfare获取街道,locality获取城市,administrativeArea,获取省(直辖市).......
测试地址:经度:121.487237,纬度:31.380998