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. 配置演示样例: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

时间: 2024-10-15 01:54:19

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

Android百度鹰眼轨迹

作者:短工邦技术部 - 陈文超 百度地图之百度鹰眼轨迹使用 拿外卖配送为例,配送员从接单开始上传行驶轨迹,用户端可以实时查看配送员的行驶轨迹,对于点外卖的用户来说可以更直接地观察到自己的订单是否在配送过程中,不再需要一遍一遍地拨打商户电话催促. 在思考相关解决方案的时候第一个想到的是在后台不断地获取配送员的经纬度,上传到服务器,然后在用户端实时地刷新这些经纬度数据显示到地图上.这种方法虽说思路很简单,只是数据的上传与刷新,但是轨迹的准确度与定位的精准度有很大关系,如果遇到网络环境较弱等的情况,定

百度鹰眼轨迹管理台部署到本地或者服务器上

1.下载一份源码到本地:https://github.com/baidu-openmap-trace/web-demo-v3/ 2.解压源码 3.安装nodejs(这里的步骤他在github上已经详细的写了,表示非常感谢大神.https://github.com/baidu-openmap-trace/web-demo-v3/) 下载Node.js https://nodejs.org/en/download/ 下载完成后,一直next或者就勾选默认的,直至安装完成 4.验证安装完成 在安装目录

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

// 隐藏缩放控件 int childCount = mMapView.getChildCount(); View zoom = null; for (int i = 0; i < childCount; i++) { View child = mMapView.getChildAt(i); if (child instanceof ZoomControls) { zoom = child; break; } } zoom.setVisibility(View.GONE); // 隐藏比例尺控件

百度地图 iOS SDK - 新版本上线,支持iOS8、arm64、iPhone6

百度地图 iOS SDK v2.5.0 版本于10月21日下午顺利完成了新版本的上线工作,该版本主要针对 iOS8 的定位功能进行了适配:对 arm64 CPU 进行了适配:对 iPhone6 及 iPhone6 plus 的屏幕显示进行了相关的适配工作. 相信新版本的发布会给更多开发者带来开发上的便利! 新版本更新日志如下: 2014年10月21日 百度地图iOS SDK v2.5.0发布 使用Xcode6创建工程时注意事项如下: 在info.plist中添加:Bundle display n

Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器

在上一篇博客中,我们成功把地图导入了我们的项目.本篇我们准备为地图添加:第一,定位功能:第二,与方向传感器结合,通过旋转手机进行道路的方向确认.有了这两个功能,地图已经可以为我服务了~~~~ 效果图: 好了,可以代码,为了方便,我把所有的按钮都放到了menu菜单中. 1.初次启动定位 [java] view plaincopy /** * 定位的客户端 */ private LocationClient mLocationClient; /** * 定位的监听器 */ public MyLoca

Gprinter Android SDK V2.1.4 使用说明

佳博打印机Android的SDK开发包,已更新到Gprinter Android SDK V2.1.4. IOS的SDK开发包更新为GprinterSDKandDemoforIOS_v1.0.8. 根据客户的需求,加入了新的功能及修复了一些BUG. 有需要加QQ:2485328844 获取

Android 百度地图 SDK v3_3_0 (五) ---POI搜索和在线建议查询功能

转载请标明出处:http://blog.csdn.net/tanzuai/article/details/43835431 目前百度地图SDK所集成的检索服务包括:POI检索.公交信息查询.线路规划.地理编码.在线建议查询.短串分享. 本篇博客将先介绍POI检索和在线建议查询(在地图地位功能基础上实现的,还不知道定位的童靴,请参考Android 百度地图 SDK v3.3.0 (二)--- 地图定位和图层展示) 百度地图SDK提供三种类型的POI检索:周边检索.区域检索和城市内检索.下面将以城市

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

首先确保有这四个文件 安装jdk 先安装android开发SDK(并不只是为eclipse服务的),即运行installer_r15-windows,指定存储目录,然后就安装,安装到后期指定你要安装的android的版本等,例如我选1.6的版本,继续安装,很快就能结束. 解压eclipse到任意地方,运行eclipse.exe,点help点install new software,选择 http://dl-ssl.google.com/android/eclipse/ 注意不能是https 然后

Android应用之——最新版本SDK V2.4实现QQ第三方登录

为什么要写这篇博客呢?因为,我在做这个第三方登录的时候,找了很多资料,发现要么就是过时了,要么就是说的很不清楚,很罗嗦,而且很多都是一些小demo,不是什么实例,甚至连腾讯官方的文档都有这个问题,文档中很多地方用的不是最新的sdk写的示例,用最新版本的sdk发现根本没法达到预期的效果,很多api已经发生了变化,demo还是用的原来的api中的方法,最坑爹是demo下载下来还要一个支持的库文件,但是sdk中又没有提供.. 自己跌跌撞撞,查找资料,整合,弄了几个小时,终于把它给整出来了,用在了开发的