基于百度地图记录运动轨迹案例分析与实现

Posted iOS开发-上海

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于百度地图记录运动轨迹案例分析与实现相关的知识,希望对你有一定的参考价值。

目录

一、下载百度地图SDK

二、 工程配置 
1. 新建Xcode工程 
2. 获取Bundle Identifie 
3. 申请key 
4. 导入框架配置工程 
第一步: 引入BaiduMapAPI.framework 
第二步: 引入所需的系统库 
第三步: 环境配置 
第四步: 引入mapapi.bundle资源文件 
第五步: 引入头文件  
5. 初始化 BMKMapManager 
第一步: 在AppDelegate.m 中添加 BMKMapManager的定义 
第二步: 遵守 BMKGeneralDelegate 实现其两个代理方法,目的是为了得知本应用是否联网成功、授权成功. 
第三步: 在AppDelegate.m文件中添加对BMKMapManager的初始化,并填入申请的授权Key.

三、实战记录运动轨迹 
1. 初始化工作 
第一步:引入相关头文件,声明相关属性 

第二步:初始化相关方法 
第三步:初始化MapView后设置其一些属性 
第四步:初始化百度位置服务 
2. 开始定位 
第一步:强调内容开启定位的方法 
第二步: 停止服务的方法函数 
第三步: 停止失败调用的方法函数 
第四步: 用户更新调用的方法函数 
第五步: 用户方向更新调用的方法函数  
3. 存储更新的用户地理位置 
4. 绘制轨迹线 
第一步:开始绘制路线 
第二步: 绘制起始大头针 
第三步: 清空标记 
第四步:设置地图范围 
第五步: 生成相应的覆盖物

四、最终的效果图展示

五、工程源码

一、下载百度地图SDK 
1) 首先需要登录百度开放平台下载iOS地图SDK,推荐下载全新Framework形式的静态库,配置更加简单方便,具体看下图: 
这里写图片描述

这里写图片描述

二、 工程配置 
1. 新建一个Xcode工程

2. 获取Bundle Identifier 
通过project->target->general可以看到本应用的Bundle Identifie,我们正是需要这串字符串去百度开发平台申请一个Key用于百度地图的调用。如图: 
这里写图片描述

3. 申请key 
登录百度开放平台后,点击右上角的API控制台进入申请key的界面,点击创建应用,在“安全码”处填入你的应用的Bundle Identifie,具体信息填写请看下图: 
这里写图片描述

这里写图片描述

4. 导入框架配置工程 
以下主要参考百度SDK配置文档: 
* 第一步 、引入BaiduMapAPI.framework* 
百度地图SDK提供了模拟器和真机两种环境所使用的framework,分别存放在libs/Release-iphonesimulator和libs/Release-iphoneos文件夹下,开发者可根据需要使用真机或模拟器的包,如果需同时使用真机和模拟器的包,可以使用lipo命令将设备和模拟器framwork包中的BaiduMapAPI文件合并成一个通用的文件,命令如下:

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">lipo <span class="hljs-attribute" style="box-sizing: border-box;">-create</span> Release<span class="hljs-attribute" style="box-sizing: border-box;">-iphoneos</span>/BaiduMapAPI<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>framework/BaiduMapAPI Release<span class="hljs-attribute" style="box-sizing: border-box;">-iphonesimulator</span>/BaiduMapAPI<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>framework/BaiduMapAPI <span class="hljs-attribute" style="box-sizing: border-box;">-output</span> Release<span class="hljs-attribute" style="box-sizing: border-box;">-iphoneos</span>/BaiduMapAPI<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>framework/BaiduMapAPI</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

此时Release-iphoneos文件夹下的BaiduMapAPI.framework即可同时用于真机和模拟器。将所需的BaiduMapAPI.framework拷贝到工程所在文件夹下。在TARGETS->Build Phases-> Link Binary With Libaries中点击+按钮,在弹出的窗口中点击“Add Other”按钮,选择BaiduMapAPI.framework文件添加到工程中。 
注:静态库中采用ObjectC++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm),或者在工程属性中指定编译方式,即将Xcode的Project -> Edit Active Target -> Build -> GCC4.2 - Language -> Compile Sources As设置为Objective-C++。

第二步、引入所需的系统库 
百度地图SDK中提供了定位功能和动画效果,v2.0.0版本开始使用OpenGL渲染,因此您需要在您的Xcode工程中引入CoreLocation.framework和QuartzCore.framework、OpenGLES.framework、 
SystemConfiguration.framework、CoreGraphics.framework、 
Security.framework。添加方式:在Xcode的Project -> Active Target ->Build Phases ->Link Binary With Libraries,添加这几个framework即可。

第三步、环境配置 
在TARGETS->Build Settings->Other Linker Flags中添加-ObjC。

第四步、引入mapapi.bundle资源文件 
如果使用了基础地图功能,需要添加该资源,否则地图不能正常显示 
mapapi.bundle中存储了定位、默认大头针标注View及路线关键点的资源图片,还存储了矢量地图绘制必需的资源文件。如果您不需要使用内置的图片显示功能,则可以删除bundle文件中的image文件夹。您也可以根据具体需求任意替换或删除该bundle中image文件夹的图片文件。 
方法:选中工程名,在右键菜单中选择Add Files to “工程名”…,从BaiduMapAPI.framework||Resources文件中选择mapapi.bundle文件,并勾选“Copy items if needed”复选框,单击Add按钮,将资源文件添加到工程中。

第五步、引入头文件 
在使用SDK的类引入头文件:

<code class="hljs ruleslanguage has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-array" style="box-sizing: border-box;">#import </span><BaiduMapAPI/BMapKit.h><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//引入所有的头文件</span>
<span class="hljs-array" style="box-sizing: border-box;">#import </span><BaiduMapAPI/BMKMapView.h><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//只引入所需的单个头文件</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

5. 初始化 BMKMapManager 
第一步: 在AppDelegate.m 中添加 BMKMapManager的定义: 
这里写图片描述

第二步: 遵守 BMKGeneralDelegate 实现其两个代理方法,目的是为了得知本应用是否联网成功、授权成功: 

第二步: 遵守 BMKGeneralDelegate 实现其两个代理方法,目的是为了得知本应用是否联网成功、授权成功: 
这里写图片描述

第三步: 在AppDelegate.m文件中添加对BMKMapManager的初始化,并填入申请的授权Key,示例如下: 
这里写图片描述

三、实战记录运动轨迹 
一条完整的运动轨迹是由一组地理位置坐标数组描点连线构成的,我们需要实时监测用户位置的变更,将最新的符合限定条件的地位位置数据存放到数据中,调用SDK中的画折线方法绘制运动轨迹。

1. 初始化工作 
第一步: 引入相关头文件,声明相关属性 
这里写图片描述

第二步: 初始化相关方法 
这里写图片描述

第三步:初始化MapView后设置其一些属性 
这里写图片描述

第四步:初始化百度位置服务 
这里写图片描述

2. 开始定位 
第一 强调内容开启定位的方法 
这里写图片描述

第二 停止服务的方法函数 
这里写图片描述

第三 停止失败调用的方法函数 
这里写图片描述

第四 用户更新调用的方法函数 
这里写图片描述

第五 用户方向更新调用的方法函数 
这里写图片描述

3. 存储更新的用户地理位置 
这里写图片描述

4. 绘制轨迹线 
第一 开始绘制路线 
这里写图片描述

第二 绘制起始大头针 
这里写图片描述

第三 清空标记 
这里写图片描述

第四 设置地图范围 
这里写图片描述

第五 生成相应的覆盖物 
这里写图片描述

四、最终的效果图展示 
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

五、工程源码 
源码下载地址:http://download.csdn.net/detail/baihuaxiu123/9496390 

以上是关于基于百度地图记录运动轨迹案例分析与实现的主要内容,如果未能解决你的问题,请参考以下文章

Android百度地图:百度地图画运动轨迹及图层点击事件处理

Android百度地图:百度地图运动轨迹纠偏去噪绑路之百度鹰眼

百度地图上如何实现轨迹回放

HTML5跟踪GPS轨迹VueJS引入百度地图

怎么查看百度地图足迹记录轨迹

android百度地图如何记录车辆行车轨迹