需求:货车司机配送蔬菜到学校、公司单位、酒店等,需要在地图上显示货车司机的送货轨迹,并计算出轨迹里程。
一、高德猎鹰轨迹服务 传送
适用平台: Android iOS Web服务
猎鹰是一套轨迹管理服务,提供移动端 SDK 和后端 API 供开发者接入。猎鹰提供轨迹纠偏、里程计算、实时监控等丰富的接口功能和云端服务,可以让开发者基于猎鹰迅速构建一套完全属于自己的精准、高效的轨迹管理系统,应用于车队管理、人员管理等领域。
- 功能概览
1.1 轨迹上传
猎鹰提供可嵌入智能设备的Android、iOS SDK以及Web服务API进行轨迹上传,支持单点/多点多种上传形式。
1.2 轨迹存储
猎鹰可为开发者免费存储最近1年的设备轨迹数据。
1.3 轨迹查询
猎鹰为开发者提供高性能轨迹查询服务,设备轨迹一旦成功上传,开发者可以实时查询任意时段的设备轨迹。
1.4 里程计算
猎鹰提供精准的轨迹里程计算服务,计算的里程可用于行驶里程核算,网约车计费等场景。
1.5 轨迹纠偏
猎鹰提供专业的轨迹纠偏绑路功能。开发者可通过猎鹰对发生定位偏移的设备轨迹进行纠正,展示平滑连贯的轨迹。
1.6 实时监控
猎鹰提供实时监控终端位置的服务。开发者可通过接口实时查询终端位置,在监控端对设备实时监控。
1.7 终端搜索
猎鹰提供查询区域内终端位置的功能。开发者可通过关键字搜索、周边搜索、多边形内搜索、行政区域搜索等方式查询终端。
-
猎鹰服务流程
猎鹰服务流程.png
-
需求与逻辑思考
通过以上功能,大概就知道猎鹰能否满足你项目的需求了。笔者讲讲运用到笔者需求后的项目整体思路流程。
首先,服务端建立一条服务(Service),然后,服务为每一个货车(Terminal)创建唯一的TerminalId。(移动设备、车辆都可以被视为一个终端Terminal)
最后,服务端为货车在发车前创建一条轨迹TrackId,货车发车同时启动服务,指定TrackId,将采集到的定位数据上传到服务器。
简单概括,就是服务端根据高德猎鹰WebApi接口创建ServiceId、TerminalId、TrackId,移动端需要配置这几个参数,调用SDK接口开始服务并采集数据就ok了。
二、查看高德开发文档
- 服务器端开发文档 传送
![](https://img.haomeiwen.com/i2960218/6fb915a32e7f8ecd.png)
服务管理:使用猎鹰对轨迹进行管理时,首先需要创建一个轨迹服务(Service)。每个 Key 下最多注册15个 Service,一个Service默认最大支持创建100000个。
终端管理:任何的移动设备、车辆都可以被视为一个终端。
终端管理类接口主要实现:terminal 的创建、更新、删除、查询。例如:添加一辆车、删除一辆车、更新车辆属性等。
终端实时监控:通过指定服务与终端,返回该终端指定轨迹的最后位置,支持对终端最后位置的实时查询与历史查询。
轨迹管理及上传:创建一条轨迹,一个终端下最多可创建500000条轨迹。
轨迹纠偏及里程查询:通过轨迹查询接口实现查询轨迹信息、轨迹纠偏和里程核算的功能。
这里比较重要的是,创建服务、创建和管理终端、创建轨迹、最后查询轨迹终端轨迹和里程;
- 移动端开发文档以iOS端为例 传送
![](https://img.haomeiwen.com/i2960218/118afb31bb1d8e5c.png)
2.1 轨迹上报
轨迹上报分为两种:
第一种:开启轨迹上报时仅提供了服务(service id)和终端(terminal id),而没有指定要将轨迹点上报到哪个轨迹上,这种上报方式叫做散点上报,所有轨迹点直接关联到终端,不属于任何一个轨迹(track id)。
第二种:指定要将轨迹上报到哪个轨迹上(track id),这种方式叫做指定轨迹上报,笔者使用的是第二种。
查询终端实时位置:使用服务id和终端id查询某个终端最后一次上报的位置信息
查询终端行驶里程:查询某个终端在最近n小时内的行驶里程
查询终端历史轨迹: 查询终端历史轨迹有两种方式,一种会查出终端的所有轨迹的轨迹点,包括不属于任何一个轨迹的散点,并将这些轨迹点按照上传时间排序;
另一种会按照轨迹查出每个轨迹下的轨迹点或特定轨迹下的轨迹点,散点不包含在内。
2.2 捋一捋移动端needDone
-
集成猎鹰SDK
-
获取服务器创建的serviceId、terminalId、trackId,配置trackManager,开启服务。
-
吐槽高德官方Demo
有坑,有坑,有坑,代码还难看。
定位缺少一句定位授权代码,导致无法定位。
/// 当plist配置NSLocationAlwaysUsageDescription或者NSLocationAlwaysAndWhenInUseUsageDescription,并且[CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined,会调用代理的此方法。此方法实现调用申请后台权限API即可:[locationManager requestAlwaysAuthorization](必须调用,不然无法正常获取定位权限)
/// @param manager manager
/// @param locationManager locationManager
- (void)amapLocationManager:(AMapLocationManager *)manager doRequireLocationAuth:(CLLocationManager *)locationManager
{
[locationManager requestAlwaysAuthorization];
}
笔者修改后 Demo ,时间才是真理,试试才知道是不是自己想要的结果。
测试效果图:
三、总结
- 笔者之前做这个需求的时候,是用高德持续定位后的数据,调用SDK的轨迹纠偏Api,拿到纠偏后的数据绘制成移动轨迹,效果不是很理想,对于猎鹰服务的效果很满意。
- 开放平台控制台创建一个应用,需分别创建Web平台,iOS平台,android平台对应的key;
- 注意遇这个问题,服务端人员调用高德Api https://tsapi.amap.com/v1/track/service/add?key=xxx , 并用POST方式调用,参数是接Api 后面的。
网友评论