Corelocation及地图控件学习笔记

Corelocation基本使用

在地图章节的学习中,首先要学的便是用户位置定位,因此我们首先要掌握Corelocation的使用。(在IOS8以前可以系统会直接请求授权,现在需要我们自己调用方式通知系统请求授权)

首先设置一个Corelocation属性并实现懒加载设置代理,此对象需要自己调用方法startUpdatingLocation及stopUpdatingLocation来开始和结束位置获取

1 //定位管理者
2 @property (nonatomic , strong ) CLLocationManager *manager;
3 - (CLLocationManager *)manager{
4     if (_manager == nil) {
5         //创建CoreLocation管理者
6         _manager = [[CLLocationManager alloc] init];7         _manager.delegate = self;
8     }
9     return _manager;
10 }

设置好定位管理者对象后就对其属性进行一些常用的属性配置

 1 //配置定位精度
 2 /*
 3 导航级别:     kCLLocationAccuracyBestForNavigation;
 4 最优:        kCLLocationAccuracyBest;
 5 精确到10米:   kCLLocationAccuracyNearestTenMeters;
 6 精确到100米:  kCLLocationAccuracyHundredMeters;
 7 精确到1000米: kCLLocationAccuracyKilometer;
 8 精确到3000米: kCLLocationAccuracyThreeKilometers;
 9 */
10 self.manager.desiredAccuracy = kCLLocationAccuracyBest;
11 //设置超过范围后更新数据,如不设置数据会一直不间断更新
12 self.manager.distanceFilter = 100;

若使用[self.manager requestAlwaysAuthorization]方法需要添加NSLocationAlwaysUsageDescription为key

 1 //判断系统IOS版本
 2     if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
 3         NSLog(@"IOS8");
 4         //注意:IOS8后需要验证授权,在Info.plist文件还要加上NSLocationWhenInUseUsageDescription这个key,Value可以为空,并调用此方法
 5         [self.manager requestWhenInUseAuthorization];
 6         [self.manager startUpdatingLocation];
 7     }else{
 8         NSLog(@"IOS7");
 9         //开始获取用户位置
10         [self.manager startUpdatingLocation];
11     }

接下来便需要实现一些代理方法来方便我们获取用户位置,以下为常用的部分代理协议

1.用户授权状态改变后调用

1 //在此判断授权状态并进行相对应的操作
2 - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{
3     if (status == kCLAuthorizationStatusAuthorizedAlways ||
4         status == kCLAuthorizationStatusAuthorizedWhenInUse) {
5         NSLog(@"授权成功");
6         //授权成功后开始监听 获取位置
7         [self.manager startUpdatingLocation];
8     }
9 }

2.在更新用户位置时调用的方法

 1 //可以在这里进行反地理编码获取位置信息
 2 - (void)locationManager:(CLLocationManager *)managerdidUpdateLocations:(NSArray *)locations{
 3     //反地理编码使用位置信息反编码
 4     CLGeocoder *geocoder = [[CLGeocoder alloc] init];
 5     CLLocation *newLocation = [locations lastObject];
 6     [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {
 7         for (CLPlacemark *place in placemarks) {
 8             //通过CLPlacemark可以输出用户位置信息
 9             NSLog(@"%@ %@ %lf %lf",place.name, place.addressDictionary, place.location.coordinate.latitude,place.location.coordinate.longitude);
10         }
11     }];
12 }

3.用户手机头部方向改变时调用的方法

1 //在更新用户头部方向时调用,适用方向指定操作
2 - (void)locationManager:(CLLocationManager *)managerdidUpdateHeading:(CLHeading *)newHeading

至此Corelocation的配置就已完成,接下来是关于地图配置的方法

地图控件的基本使用

首先要导入地图框架 #import <MapKit/MapKit.h>

设置地图控件属性,并懒加载实现及其属性配置

 1 //地图控件,其中region属性个人觉得在代理中设置比较合适
 2 @property (nonatomic, strong) MKMapView *mapView;
 3 - (MKMapView *)mapView{
 4     if (_mapView == nil) {
 5         _mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
 6         _mapView.delegate = self;
 7         /*
 8          MKUserTrackingModeNone = 0 默认不跟踪
 9          MKUserTrackingModeFollow,  追踪位置
10          MKUserTrackingModeFollowWithHeading 追踪位置及其头部指向
11          */
12         //用户追踪模型,如不设置将无法追踪用户
13         _mapView.userTrackingMode = MKUserTrackingModeFollowWithHeading;
14         /*
15          MKMapTypeStandard = 0,普通模式(默认模式)
16          MKMapTypeSatellite,   卫星模式
17          MKMapTypeHybrid       混合模式
18          */
19         _mapView.mapType = MKMapTypeStandard;
20     }
21     return _mapView;
22 }

最后将_mapView添加进self.view中,整个地图相当于就可以加载完成了。下面介绍MKMapView的一部分代理方法及其调用时机

 1 #pragma mark - MKMapViewDelegate 代理方法
 2 /**
 3  *  更新用户位置是调用
 4  *
 5  *  @param mapView      题图
 6  *  @param userLocation 用户位置
 7  */
 8 - (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
 9     NSLog(@"更新用户位置");
10     //设置用户位置中心点
11     [self.mapView setCenterCoordinate:userLocation.coordinate animated:YES];
12     //范围设置MKCoordinateSpanMake中的代表经纬度范围
13     MKCoordinateRegion region = MKCoordinateRegionMake(userLocation.coordinate, MKCoordinateSpanMake(0.1, 0.1));
14     //设置中心点范围
15     [self.mapView setRegion:region animated:YES];
16 }
17 /**
18  *  地图将要开始渲染时调用
19  */
20 - (void)mapViewWillStartRenderingMap:(MKMapView *)mapView{
21     NSLog(@"%s",__func__);
22 }
23 /**
24  *  地图完成渲染时调用
25  */
26 - (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered{
27     NSLog(@"%s",__func__);
28 }
29 /**
30  *  region(范围)即将改变时调用
31  */
32 - (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated{
33     NSLog(@"%s",__func__);
34 }
35 /**
36  *  region(范围)完成改变时调用
37  */
38 - (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{
39     NSLog(@"%s",__func__);
40 }
41 /**
42  *  追踪模型改变时调用
43  */
44 - (void)mapView:(MKMapView *)mapView didChangeUserTrackingMode:(MKUserTrackingMode)mode animated:(BOOL)animated{
45     NSLog(@"%s",__func__);
46 }
47 /**
48  *  设置大头针时调用 类似于tableViewCell设置
49  */
50 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation{51 //在其中设置MKAnnotationVIew,有重用机制52}

另外还有其他一些代理方法就不一一介绍了,剩下的就看需要 在对应的方法里添加想进行的操作。

时间: 2024-09-29 22:07:28

Corelocation及地图控件学习笔记的相关文章

【高德地图API】从零开始学高德JS API(二)地图控件与插件——测距、圆形编辑器、鼠标工具、地图类型切换、鹰眼鱼骨

摘要:无论是控件还是插件,都是在一级API接口的基础上,进行二次开发,封装的一系列更加便于开发者使用,减少开发者工作量的二级API接口.除了官方通用的鱼骨.鹰眼控件,还有大量官方开发的地图插件,类似谷歌的lib.当然本文还会介绍自定义插件的使用. ------------------------------------------------------------------------------------------------- 第一部分 控件 目前官方支持的控件包含:缩放控制条-地图

ArcGIS for Android地图控件的5大常见操作

原文地址: ArcGIS for Android地图控件的5大常见操作 - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/arcgis_mobile/article/details/7801467   GIS的开发中,什么时候都少不了地图操作.ArcGIS for Android中,地图组件就是MapView,MapView是基于Android中ViewGroup的一个类(参考),也是ArcGIS Runtime SDK for

(转)深入理解最强桌面地图控件GMAP.NET --- 原理篇

前几篇介绍了一些国内地图的案例, 深入理解最强桌面地图控件GMAP.NET --- SOSO地图 深入理解最强桌面地图控件GMAP.NET --- 百度地图 我们以Google地图为例,这章介绍下地图加载的原理. 投影(Projection) 谷歌地图采用的是墨卡托投影法,这里转载(http://www.cnblogs.com/willwayer/archive/2010/06/11/1756446.html) 下墨卡托投影的定义:墨卡托(Mercator)投影,又名“等角正轴圆柱投影”,荷兰地

(转)深入理解最强桌面地图控件GMAP.NET ---高德地图

前一篇介绍了GMAP.NET的理论基础,这篇介绍如何集成高德地图.高德地图自从为IOS6提供地图后,目前已经被大众所熟知了. 在我集成国内地图的经验来看,也是最符合墨卡托投影法的. 前面的相关文章链接: 深入理解最强桌面地图控件GMAP.NET --- 原理篇 深入理解最强桌面地图控件GMAP.NET --- SOSO地图 深入理解最强桌面地图控件GMAP.NET --- 百度地图 深入理解最强桌面地图控件GMAP.NET --- 初用 深入理解最强桌面地图控件GMAP.NET --- 初识 如

(转)深入理解最强桌面地图控件GMAP.NET --- 百度地图

GMAP.NET支持了Google, Bing, Ovi, Openstreetmap, Yahoo,GIS等多种地图,但国内的地图支持得比较少. 不过没有关系,我们可以为GMAP.NET添加百度地图的支持,只要了解了地图加载的原理,就很容易集成进来, 最重要的是,它是支持离线的,也就是说利用GMAP.NET,我们可以制作各种离线地图供我们桌面应用程序使用, 这也是我为什么称之为最强地图控件的原因. 如何在你的程序中使用GMAP.NET百度地图 整个代码已经提交到 http://ypmap.go

(转)深入理解最强桌面地图控件GMAP.NET --- SOSO地图

前三篇介绍了GMAP.NET的一些基本功能以及如何集成一个百度地图. 深入理解最强桌面地图控件GMAP.NET --- 初识 深入理解最强桌面地图控件GMAP.NET --- 初用 深入理解最强桌面地图控件GMAP.NET --- 百度地图 虽然地图在国内用得最多的是谷歌和百度,但任何互联网产品都绕不过“腾讯”, 这一章就介绍如何在GMAP.NET中支持搜搜地图. 如何在你的程序中使用GMAP.NET SOSO地图 国内的地图都差不多,我觉得做得最好的是高德,下一篇会结合理论章节讲讲为什么,至少

(转)深入理解最强桌面地图控件GMAP.NET ---搜狗(sougou地图)

这应该是我集成国内地图的最后一篇了,以后如果有精力会继续分析Google地图,Bing地图,Yahoo地图,Ovi地图. 同时,会尽快将离线地图的使用以及数据存储部分分享出来. 前面的相关文章链接: 深入理解最强桌面地图控件GMAP.NET --- 原理篇 深入理解最强桌面地图控件GMAP.NET --- SOSO地图 深入理解最强桌面地图控件GMAP.NET --- 百度地图 深入理解最强桌面地图控件GMAP.NET --- 初用 深入理解最强桌面地图控件GMAP.NET --- 初识 如何在

wxPython控件学习之wx.grid.Grid 表格控件

wxPython控件学习之wx.grid.Grid (包括对GridCellEditor和GridCelRender的扩展,以支持更多的grid cell 样式, 以GridCellColorEditor为例) wx.Grid 及其相关的类是用来显示和编辑类表格样式的数据.该控件为显示,编辑数据源提及交互供了丰富的特征. wx.GridTableBase类控制要显示的实际数据.可以call CreateGrid()产生一个该类的实例对象. wx.GridCellRenderer 基类,负责对单元

CComboBox(组合框)控件 学习要点

CComboBox(组合框)控件 CComboBox类常用成员 CComboBox插入数据 CComboBox删除数据 CComboBox运用示例   一.CComboBox控件常用属性    Disabled    Visible    type    数据   二.CComboBox类常用成员   ((CComboBox*)GetDlgItem(IDC_COMBO1))//获取组合框对象指针,这样可以不关联控件变量,也可以操作组合框对象 CComboBox::ResetContent//清空