Android 百度鹰眼轨迹SDK(v2.1.6)

临文乍了了,彻卷兀若无。这篇文章主要讲述Android 百度鹰眼轨迹SDK(v2.1.6)相关的知识,希望能为你提供帮助。
闲聊看过《鹰眼追击》这部电影的读者一定对“鹰眼”这台巨无霸计算机印象深刻,如今我们能够实现自己的鹰眼。效果图

Android 百度鹰眼轨迹SDK(v2.1.6)

文章图片

本篇为百度地图SDK第三篇博文
第一篇实现:Android 百度地图周边雷达(v6.1.3)及覆盖物第二篇实现:Android 百度定位SDK(v6.1.3)结合方向传感器本博文为第三篇使用百度鹰眼轨迹SDK能够实现的功能
  1. 轨迹追踪
    借助GPS、基站、Wi-Fi和传感器信息,实现室内、外高精度的连续轨迹追踪。总体定位精度50m:
    • GPS:10m(取决于芯片)
    • WIFI:27m
    • 基站:27m
  2. 轨迹回传
    採用TCP长连接、数据打包压缩、加密回传等策略,保障数据安全,实现超低流量损耗。
  3. 轨迹纠偏(全新上线)
    • 去噪:去除定位漂移点。
    • 绑路:根据百度道路数据。将偏移轨迹纠正至道路。
    • 抽稀:去除反复冗余轨迹点。精简轨迹数据。
  4. 轨迹查询
    • 查询被追踪者的实时位置;
    • 查询被追踪者某时间段的历史轨迹。
    • 实时里程计算。
  5. 地理围栏报警
    地理围栏是指一定范围(圆形、多边形)的虚拟地理区域。
    当被追踪者进入、离开该区域时,监控者能够接收到自己主动报警通知。
    • 云端监控围栏触发,主动推送报警;
    • 历史报警信息查询。
事实上说白了就一句话。能够追踪被跟踪者的轨迹。看到这里你是不是想到什么了呢。用代码告诉你什么是追踪
  1. 创建应用获取密钥:http://lbsyun.baidu.com/apiconsole/key
  2. 创建鹰眼轨迹服务:http://lbsyun.baidu.com/index.php?title=android-yingyan/guide/createservice
  3. 配置演示样例:php?
    title=android-yingyan/guide/buildproject">http://lbsyun.baidu.com/index.php?
    title=android-yingyan/guide/buildproject
  4. 结合百度鹰眼轨迹SDK实现我们自己的逻辑
怎么開始和关闭鹰眼轨迹追踪
//鹰眼轨迹相关 private LBSTraceClient client; private Trace trace; /** * 鹰眼服务ID */ private long serviceId = 112700L; /** * 地理围栏监听器 */ private OnGeoFenceListener geoFenceListener; /** * 围栏ID */ private int fenceId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); // 实例化轨迹服务客户端 client = new LBSTraceClient(getApplicationContext()); }/** * 開始鹰眼轨迹追踪 */ private void startTrace() { // entity标识(监听后台显示的名字) String entityName = "test"; // 轨迹服务类型(0 : 不上传位置数据。也不接收报警信息; 1 : 不上传位置数据,但接收报警信息; // 2 : 上传位置数据,且接收报警信息) int traceType = 2; //实例化轨迹服务 trace = new Trace(getApplicationContext(), serviceId, entityName, traceType); // 实例化开启轨迹服务回调接口 OnStartTraceListener startTraceListener = new OnStartTraceListener() { // 开启轨迹服务回调接口(arg0 : 消息编码,arg1 : 消息内容,详情查看类參考) @Override public void onTraceCallback(int arg0, String arg1) { Log.i(TAG, "onTraceCallback" + "arg0 = " + arg0 + " arg1 = " + arg1); }// 轨迹服务推送接口(用于接收服务端推送消息。arg0 : 消息类型。arg1 : 消息内容,详情查看类參考) @Override public void onTracePushCallback(byte arg0, String arg1) { Log.i(TAG, "onTracePushCallback" + "arg0 = " + arg0 + " arg1 = " + arg1); } }; // 位置採集周期 int gatherInterval = 10; // 打包周期 int packInterval = 60; // 设置协议类型,0为http,1为https int protocoType = 0; // 设置位置採集和打包周期 client.setInterval(gatherInterval, packInterval); // 设置协议 client.setProtocolType(protocoType); // 开启轨迹服务 client.startTrace(trace, startTraceListener); }/** * 结束鹰眼轨迹追踪 */ private void stopTrace() { // 实例化停止轨迹服务回调接口 OnStopTraceListener stopTraceListener = new OnStopTraceListener() { // 轨迹服务停止成功 @Override public void onStopTraceSuccess() { Log.i(TAG, "onStopTraceSuccess"); }// 轨迹服务停止失败(arg0 : 错误编码。arg1 : 消息内容,详情查看类參考) @Override public void onStopTraceFailed(int arg0, String arg1) { Log.i(TAG, "onStopTraceFailed" + "arg0 = " + arg0 + " arg1 = " + arg1); } }; //停止轨迹服务 client.stopTrace(trace, stopTraceListener); }

如此我们便有了最简单的鹰眼追踪。在后台就能够看见执行APP的详细位置。是不是认为有些奇妙呢,接下来还有更好玩的。

/** * 鹰眼查询实时位置 */ private void findLocationAtTime() { //entity标识列表(多个entityName。以英文逗号"," 切割) String entityNames = "test"; //检索条件(格式为 : "key1=value1,key2=value2,.....") String columnKey = ""; //返回结果的类型(0 : 返回所有结果。1 : 仅仅返回entityName的列表) int returnType = 0; //活跃时间,UNIX时间戳(指定该字段时,返回从该时间点之后仍有位置变动的entity的实时点集合) int activeTime = (int) (System.currentTimeMillis() / 1000 - 12 * 60 * 60); //分页大小 int pageSize = 1000; //分页索引 int pageIndex = 1; //Entity监听器 OnEntityListener entityListener = new OnEntityListener() { // 查询失败回调接口 @Override public void onRequestFailedCallback(String arg0) { Log.i(TAG, "onRequestFailedCallback" + "arg0 = " + arg0); }// 查询entity回调接口,返回查询结果列表 @Override public void onQueryEntityListCallback(String arg0) { Log.i(TAG, "onQueryEntityListCallback" + " arg0 = " + arg0); } }; //查询实时轨迹 client.queryEntityList(serviceId, entityNames, columnKey, returnType, activeTime, pageSize, pageIndex, entityListener); }

调用这么一个代码段之后。我们能够实如今手机端查看被追踪者的实时位置。
还有这么一种情况,跑步类的APP他们是怎么绘制出跑步轨迹的呢。接下来就是见证奇迹的时刻!
/** * 鹰眼查询历史轨迹 */ private void findLocationOnHistory() { //entity标识 String entityName = "test"; //是否返回精简的结果(0 : 将仅仅返回经纬度,1 : 将返回经纬度及其它属性信息) int simpleReturn = 1; //開始时间(Unix时间戳) int startTime = (int) (System.currentTimeMillis() / 1000 - 12 * 60 * 60); //结束时间(Unix时间戳) int endTime = (int) (System.currentTimeMillis() / 1000); //分页大小 int pageSize = 1000; //分页索引 int pageIndex = 1; //轨迹查询监听器 OnTrackListener trackListener = new OnTrackListener() { //请求失败回调接口 @Override public void onRequestFailedCallback(String arg0) { Log.i(TAG, "onRequestFailedCallback" + "arg0 = " + arg0); }// 查询历史轨迹回调接口 @Override public void onQueryHistoryTrackCallback(String arg0) { Log.i(TAG, "onQueryHistoryTrackCallback" + "arg0 = " + arg0); }}; //查询历史轨迹 client.queryHistoryTrack(serviceId, entityName, simpleReturn, startTime, endTime, pageSize, pageIndex, trackListener); }

铛铛铛。历史轨迹查询。能够查询某段事件之内的历史轨迹。再结合Android 百度地图周边雷达(v3.7.0)及覆盖物。绘制出路线就可以实现“跑步轨迹”。

如果有这么一种需求,被追踪者进入某片区域时我们要能够及时知道。
百度鹰眼轨迹SDK给我们提供了这样的方法。地理围栏。
用围栏把被追踪者“围”起来怎么样?被追踪者进入,我们能够收到通知。哈哈
既然用到地理围栏,那么肯定要创建一个围栏啦!在本Demo在onCreate中就创建了一个围栏。详细例如以下
/** * 创建围栏 */ private void createFence() { geoFenceListener = new OnGeoFenceListener() { //请求失败回调接口 @Override public void onRequestFailedCallback(String arg0) { Log.i(TAG, "geoFence请求失败 :" + "arg0 = " + arg0); }//创建圆形围栏回调接口 @Override public void onCreateCircularFenceCallback(String arg0) { Log.i(TAG, "创建圆形围栏回调接口消息 : " + "arg0 = " + arg0); JSONObject dataJson = null; try { dataJson = new JSONObject(arg0); int status = dataJson.getInt("status"); if (0 == status) { fenceId = dataJson.getInt("fence_id"); } } catch (JSONException e) { e.printStackTrace(); }}//更新圆形围栏回调接口 @Override public void onUpdateCircularFenceCallback(String arg0) { Log.i(TAG, "更新圆形围栏回调接口消息 :" + "arg0 = " + arg0); }//延迟报警回调接口 @Override public void onDelayAlarmCallback(String arg0) { Log.i(TAG, "延迟报警回调接口消息 :" + "arg0 = " + arg0); }//删除围栏回调接口 @Override public void onDeleteFenceCallback(String arg0) { Log.i(TAG, "删除围栏回调接口消息 :" + "arg0 = " + arg0); }//查询围栏列表回调接口 @Override public void onQueryFenceListCallback(String arg0) { Log.i(TAG, "查询围栏列表回调接口消息 : " + "arg0 = " + arg0); }//查询历史报警回调接口 @Override public void onQueryHistoryAlarmCallback(String arg0) { Log.i(TAG, "查询历史报警回调接口消息 : " + "arg0 = " + arg0); }//查询监控对象状态回调接口 @Override public void onQueryMonitoredStatusCallback(String arg0) { Log.i(TAG, "查询监控对象状态回调接口消息 : " + "arg0 = " + arg0); }}; //创建者(entity标识) String creator = "test"; //围栏名称 String fenceName = "school"; //围栏描写叙述 String fenceDesc = "学校"; //监控对象列表(多个entityName,以英文逗号"," 切割) String monitoredPersons = "test"; //观察者列表(多个entityName,以英文逗号"," 切割) String observers = "test"; //生效时间列表 String validTimes = ""; //生效周期 int validCycle = 4; //围栏生效日期 String validDate = ""; //生效日期列表 String validDays = ""; //坐标类型 (1:GPS经纬度。2:国測局经纬度,3:百度经纬度) int coordType = 3; //围栏圆心(圆心位置, 格式 : "经度,纬度") String center = "120.2126083541,30.245619808604"; //围栏半径(单位 : 米) double radius = 500; //报警条件(1:进入时触发提醒。2:离开时触发提醒,3:进入离开均触发提醒) int alarmCondition = 3; //创建圆形地理围栏 client.createCircularFence(serviceId, creator, fenceName, fenceDesc, monitoredPersons, observers,validTimes, validCycle, validDate, validDays, coordType, center, radius, alarmCondition, geoFenceListener); }

这里有个坑我到如今都没爬出来:int validCycle = 4; 百度文档里validCycle =5 跑步起来仿照Demo中改为4就能够了。希望明确这个字段意义的同学能私信我。
代码段有些长,可是逻辑还是非常清楚的。相信聪明的你一定能够看懂。
注意:SDK中地理围栏接口都是异步调用,须要实例化监听器来获取调用结果。围栏都创建好了,就看猎物进不进了。
/** 围栏查询实时状态 */ private void findFenceAtTime() { if (fenceId != 0) { //监控对象列表(多个entityName,以英文逗号"," 切割) String monitoredPersons = "test"; //查询实时状态 client.queryMonitoredStatus(serviceId, fenceId, monitoredPersons, geoFenceListener); } }/** 围栏历史报警信息 */ private void findFenceOnHistory() { if (fenceId != 0) { //监控对象列表(多个entityName,以英文逗号"," 切割) String monitoredPersons = "test"; //開始时间(unix时间戳) int beginTime = (int) (System.currentTimeMillis() / 1000 - 12 * 60 * 60); //结束时间(unix时间戳) int endTime = (int) (System.currentTimeMillis() / 1000); //查询历史报警信息 client.queryFenceHistoryAlarmInfo(serviceId, fenceId, monitoredPersons, beginTime, endTime, geoFenceListener); } }

这里列出来两种围栏状态查询。一种是实时查询还一个是历史报警信息查询。凝视非常多就不啰嗦了。
至此,百度鹰眼轨迹SDK所有功能都展示一遍。
欢迎訪问我的博客及另外两篇关于百度地图SDK的博文,综合使用能够实现很多其它效果:
  1. 我的博客
  2. android 百度地图周边雷达(v6.1.3)及覆盖物

  3. 【Android 百度鹰眼轨迹SDK(v2.1.6)】Android 百度定位SDK(v6.1.3)结合方向传感器
Demo所有代码及资源下载:http://download.csdn.net/detail/qq_17250009/9469613











    推荐阅读