美文网首页
iOS 地图详解

iOS 地图详解

作者: Amok校长 | 来源:发表于2016-11-01 17:26 被阅读0次

    地图定位应用场景:周边 导航

    oc基于两个框架开发: CoreLocation框架 和 MapKit框架

         CoreLocation框架分为三部分:(开发)

                    1.地理定位

                   2.地理编码

                         地理编码: 地址转换成经纬度

                         反地理编码:经纬度转换成经纬度

                  3.区域监听

           MapKit框架分为两部分:(展示)

                  1.地图展示

                  2.路线规划

    note:    LBS:基于位置的服务

                   SoLoMo(索罗门):社交化、本地化、移动化(分移动网和移动APP)

    第一大部分:

    使用CoreLocation框架进行定位(步骤):1.导入框架(Xcode5后可以省略) 2.导入头文件   3.使用CLLocationManager对象来做很多相关的位置服务

    小经验:如果以后使用位置管理者这个对象,实现某个服务,那么可以以startXX 开始某个服务  以stopXX停止某个服务

    //开始更新位置信息 ing,意味着,一旦调用了这个方法,就会不断的刷新用户位置,然后告诉外界

    //从ios6以后,只要我们在app内部,使用了用户隐私(照片 通讯录等),系统就会要求用户授权

    如果想后台运行,勾选后台模式如下:

    勾选后台模式

    ios8.0以后的定位:

    //如果是ios8.0以后,在想请求用户位置信息,需要主动的请求授权,系统不会再自动弹出一个窗口

    1.用户授权前台定位步骤:

    第一步:授权配置 第二步:授权代码

    2.用户后台定位步骤:

    //默认情况,只能在前台获取用户位置信息 如果想要在后台也获取用户位置 那么必须勾选后台模式location  updates

    后台授权配置(2) 后台授权代码部分(2)ios9.0以下的情况 后台授权代码部分(2)ios9.0以上的情况

    3.用户前台后台定位授权操作步骤:(多用)

    前后台同时实现定位配置(3) 前后台定位授权代码(3)

    .判断用户是否开启定位

    授权状态发生变化时调用 授权方法部分判断调整(1) 授权方法部分调整(2)没开启定位的话引导用户开启

    .获取用户当前所在的城市,切换到对应的城市

    如果想要定位一次,那么可以在定位到之后,停止定位

    但是导航的话要求每隔一段时间/每隔一段距离定位一次(建议每隔一段距离定位一次)

    设置过滤距离

    每隔100米定位一次

    locationM.distanceFilter =100

    //定位本身就非常耗电,定位的精准度越高,越耗电,定位时间越长

    //为了省电,尽量在满足需求的情况下低准确度

    设置定位精度

    定位分为:

    1.标准定位服务:

          定位实现的方案:基于gprs(蓝牙/基站/wifi定位,具体使用哪种,苹果有自己规则

    优点:定位精确度高

    缺点:程序关闭,就没法获取位置,而且耗电

    2.显著位置变化定位

         定位实现方案:(基于基站 定位,必须要求设备有电话模块)

    优点:当App被完全关闭时,也可以接收到位置通知,并让app进入到后台处理

    缺点:定位精度低

    定位的两种方案

    所以:如果要求定位及时,精度较高,并且进行时间较短,可使用标准定位;如果长时间监控用户位置,用户移动速度比较快(例如:打车软件),可使用后者

    3.自动获取定位

    第三种定位方案

    第二大部分:

    CLLocation对象

    CLLocation的几个属性 计算位置之间直线距离的一个例子 course航向(真北和磁北)

    CLLocation演练场景:

    场景演练一部分 场景演练二部分

     note: 1.千万不要忘记版本适配

                    2.前后台定位模式(更好),但必须保证xcode7.0版本,9.0之后的版本

                     3.使用场景:采集用户信息,统计APP使用发布;查找周边好友,周边商家;导航;电商APP,获取用户所在城市

                      4.不需要使用用户位置时,一定要关闭定位服务;如果可以尽可能使用低精度的desiredAccuracy;如果是数据采集(一般是周期性的轮询用户位置),在轮询期间一定要关闭定位

    第三大部分:

      1.指南针效果的实现

       思路:获取手机旋转的方向,然后再反转图片就可以了

    1)创建位置管理者

    2)使用位置管理者,获取当前设备朝向

             //"磁力计"传感器(trueHeading真北方向,magneticHeading磁北方向,一般用磁北方向)

    1 2

    2.区域监听-监听进入、离开区域动作

    //如果想要进行区域监听,在iOS8.0之后,必须要请求用户的位置授权

    1)创建区域

    2)监听区域

    3)进入区域时调用

    4)离开区域时调用

    1 2 3

    3.地理编码 反地理编码

    地理编码:把地址文字转化成经纬度 gecode

    反地理编码:把经纬度转化成文字地址 reverseGecode

    需要联网!!

    CLPlacemark:地标对象

    //location:地标对象对应的位置对象

    //name:地址详情

    //。。。。。

    1 2 3 4

    4.获取当前城市的名称(定位+反地理编码)

    1 2 3

    5.使用第三方框架进行定位

    原因:因为使用CoreLocation框架获取用户位置信息,是通过代理进行回调;而第三方框架将“代理模式”转换成“block模式”,而且额外增加了超时时间等功能

    框架名称:LocationManager(可以在gitHub上搜索到)

    1 2

    6.定位工具类的封装(代理模式到bolck模式的转换)

    第四大部分:

    1.MapKit框架(用于地图展示,例如大头针、路线、覆盖层展示等等)

    1)MapKit框架的基本用法

         使用步骤:1.导入主头文件  #import<Mapkit/Mapkit.h>

                                 2.Mapkit有一个比较重要的UI控件:MKMapView,专门用于地图展示

    1 2 3

    注意:有的状态只有在特定模式下可以用,或者在iOS几以上才能用

    2.模拟器追踪显示用户位置-查看当前用户位置(MKUserLocation)

    4

    3.模拟追踪显示用户位置-调整地图显示区域

    地图有个宽和高,经度跨度越大显示内容越小,跨度越小显示内容越大(span),span分为经度跨度(longitudeDelta)和纬度跨度(latitudeDelta);

    5

    常见问题总结:1.地图上的蓝点为啥不显示?

                               第一:确定代码是否有误(例如:是否显示了用户位置)

                               第二:确定模拟器是否设置位置

                               第三:看看位置在哪,是不是不在当前地图显示区域

                             2.地图跨度设置之后始终显示地图跨度和位置数值不一致?

                                当前看到的地图是一个矩形,实际上地图是个椭圆形,所以移动时跨度一直在变。

    测试环境:1.加载地图数据需要联网  2.苹果自带的是高德地图

    4.大头针的基本使用

    //在地图上操作大头针,实际上操作的是大头针“数据模型”

    //删除、添加大头针:移除/添加一个大头针数据模型

    //协议里不能创建对象

    1.封装 annotation数据模型 2.对大头针进行操作

    上面“2”的操作是让点击屏幕时,在当前地图展示的中心位置添加一个大头针,移动地图时移除所有大头针。

    3.1 3.2

    上面“3”的操作是点击屏幕时在鼠标点击的位置插入一个标签,标签的标题和副标题显示大头针所对应的地理位置

    5.自定义大头针

    1)模拟系统实现方案

    如果当我们添加一个大头针数据模型到地图上,那么地图上就会自动调用一个代理方法,来查找对应的大头针“视图!!”

    -parameter mapView :  地图

    -parameter annotation: 大头针“数据模型”

    -returns:大头针“视图”

    //注意事项:如果这个方法没有实现,或者返回nil,那么就会使用系统默认的大头针视图来显示

    4 4.1接上一张

    2)自定义大头针和弹框

    可以设置大头针的图片,弹框的位置,弹框左侧的view、右侧的view和下部弹框,设置大头针可以拖动(移动时会自动更新位置数据)

    1 2 3

    3)代理方法补充(MKMapViewDelegate)

    下面“1”图展示了MKMapViewDelegate中的两个代理方法:

    1

    4)切换追踪模式的按钮

    1 2

    6  地图使用总结

    相关文章

      网友评论

          本文标题:iOS 地图详解

          本文链接:https://www.haomeiwen.com/subject/gbqmuttx.html