闲聊

看过《鹰眼追击》这部电影的读者一定对“鹰眼”这台巨无霸计算机印象深刻,如今我们能够实现自己的鹰眼。

效果图

本篇为百度地图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. 配置演示样例:

    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(v6.1.3)结合方向传感器

Demo所有代码及资源下载:http://download.csdn.net/detail/qq_17250009/9469613

Android 百度鹰眼轨迹SDK(v2.1.6)的更多相关文章

  1. 我的Android进阶之旅------>Android百度地图定位SDK功能学习

    因为项目需求,需要使用百度地图的定位功能,因此去百度地图开发平台下载了百度地图的Android定位SDK最新版本的开发包和示例代码学习. Android 定位SDK地址:http://develope ...

  2. android 百度最新地图sdk包怎么去除 放大缩小按钮

    // 隐藏缩放控件 int childCount = mMapView.getChildCount(); View zoom = null; ; i < childCount; i++) { V ...

  3. Android接入百度自动更新SDK

    一:前言 公司的app,上传到百度应用市场,然后说必须要接入百度的自动更新sdk才能上架,于是从百度官网上去下载jar包,下载的时候必须要带上数据统计,如果使用自动的jar包,还需要带上广告联盟,坑爹 ...

  4. 【百度地图-安卓SDK】从头开始写android程序

    [百度地图-安卓SDK]从头开始写android程序首先确保有这四个文件    安装jdk先安装android开发SDK(并不只是为eclipse服务的),即运行installer_r15-windo ...

  5. Gprinter Android SDK V2.1.4 使用说明

    佳博打印机Android的SDK开发包,已更新到Gprinter Android SDK V2.1.4. IOS的SDK开发包更新为GprinterSDKandDemoforIOS_v1.0.8. 根 ...

  6. Android 百度地图 SDK v3.0.0 (四) 引入离线地图功能

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直觉得地图应用支持离线地图很重要啊,我等移动2G屌丝,流量不易, ...

  7. Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...

  8. Android 百度地图 SDK v3.0.0 (一)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37729091 最近公司要把百度地图集成的项目中,于是我就研究了一天百度地图的SD ...

  9. Android 百度地图 SDK v3.0.0 (三) 加入覆盖Marker与InfoWindow使用

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...

随机推荐

  1. TortoiseSVN 和 VisualSVN

    ylbtech-Miscellaneos:TortoiseSVN 和 VisualSVN 1. TortoiseSVN 百科返回顶部 1-1.百科 TortoiseSVN 是 Subversion 版 ...

  2. Windows server 2008 SSD性能测试

    过渡到windows 7.windows8是趋势,老迈的windows xp .windows server 2003已经快到淘汰的阶段,安装了windows server 2008 R2 ,测试了下 ...

  3. HDU—— 5159 Building Blocks

    Problem Description After enjoying the movie,LeLe went home alone. LeLe decided to build blocks. LeL ...

  4. 【大数据】下载Windows版本的Redis 转

    https://www.cnblogs.com/tommy-huang/p/6093813.html 下载Windows版本的Redis   1.打开官网http://redis.io/点击Downl ...

  5. RAMPS1.4 3d打印控制板接线与测试3

    RAMPS1.4作为mega2560的拓展板插在mega板子上面.从而让mega板子可以控制3d打印机的工作.ramps上的接线至关重要,接错不仅不能打印,甚至还会烧坏器件和板子.请一定注意. 我的淘 ...

  6. Thinkphp5 使用odbc连接到sqlserver

    在PHP中访问mssql有两个方式 1.安装相应的驱动,如sqlsrv 2.直接使用PHP自带的ODBC驱动(不需要安装)   本文直接使用自带的ODBC驱动 在使用前请确定PHP开启了php_pdo ...

  7. linux性能分析工具集(图示)

  8. (转)Unity3D研究院之Assetbundle的原理(六十一)

    Assetbundle 是Unity Pro提供提供的功能,它可以把多个游戏对象或者资源二进制文件封装到Assetbundle中,提供了封装与解包的方法使用起来很便利. 1.预设          A ...

  9. maven多module项目中千万不要引入其它模块的单元測试代码

    本文出处:http://blog.csdn.net/chaijunkun/article/details/35796335,转载请注明. 因为本人不定期会整理相关博文,会对对应内容作出完好. 因此强烈 ...

  10. VS2013创建Node.js C++ Addons的过程

    首先看我的Node.js版本. node –v v6.11.4 然后参照这篇文章来做: https://nodejs.org/api/addons.html#addons_hello_world 安装 ...