鹰眼轨迹是百度开放平台最新推出的一套高性能轨迹存储和查询服务。百度已做好如此强大的功能,我们岂能不用。

使用鹰眼轨迹,一种方法是完全集成百度鹰眼轨迹的SDK。此方法参考http://lbsyun.baidu.com/index.PHP?title=Android-yingyan 开发指南集成即可。

接下来要说的是第二种方式。通过自己的服务端进行交互的模式。使用该方式首先需要在百度开放平台申请服务端的ak。

第二步:在鹰眼轨迹服务中轨迹管理台创建自己的鹰眼服务。

通过这两步我们就能得到调用鹰眼轨迹服务端接口的必要字段ak和service_id。

一般来说我们只需要调用两个接口即可实现轨迹追踪功能。一个是上传定位位置,一个获取历史轨迹。

第一个接口:上传定位位置

请求URI

URI:http://api.map.baidu.com/trace/v2/track/addpoint

HTTP请求方式

POST

请求参数

参数名 参数含义 类型 备注
ak 用户的ak,授权使用 string 必须
service_id servicede ID,作为其唯一标识 int 必选
latitude 纬度 double(-90.0 , +90.0) 必选
longitude 经度 double(-180.0 , +180.0) 必选
coord_type 坐标类型 int(1-3) 必选,1:GPS经纬度坐标2:国测局加密经纬度坐标 3:百度加密经纬度坐标。
loc_time 轨迹点采集的GPS时间 Unix时间戳 必选。输入的loc_time不能超过当前服务端时间10分钟以上。
entity_name entity唯一标识 string(0-128) 必选
<column-key> 用户自定义列的column_key 此处值的类型须与用户自定义的column值的类型一致。 在track/create接口中可以为用户自定义的column赋值,当loc_time字段的值大于上一次时,如果输入了自定义的column的值,则这些值也会被更新。

entity_name 自己定义个唯一的区分标示即可,cord_type 一般传3,因为定位采用的百度api,返回的坐标就是百度经纬度坐标。

首先我们要在Android端集成百度定位的sdk。然后开启定位服务,每隔一段时间调用该接口上传坐标点。定位的核心方法如下。该方法建议在Service中实现。

private void initLocation(){
mLocationClient = new LocationClient(getApplicationContext()); // 声明LocationClient类
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationMode.Hight_Accuracy);// 设置定位模式
option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02
option.setScanSpan(10000);// 设置发起定位请求的间隔时间这里是10秒
option.setIsNeedAddress(true);// 返回的定位结果包含地址信息
option.setOpenGps(true);
mLocationClient.setLocOption(option);
// 注册监听函数
mLocationClient.registerLocationListener(new BDLocationListener() {

@Override
public void onReceiveLocation(BDLocation location) {
try {
if (location == null) {
openLocation();
// mLocationClient.stop();
return;
}

/*
* 位置
*/
mlocation = location.getAddrStr();
lon = location.getLongitude();
lat = location.getLatitude();
mLat = Double.toString(lat);
mLon = Double.toString(lon);
sendTrack(); // 该方法调用鹰眼轨迹上传的接口。

} catch (Exception e) {
if (mLocationClient != null) {
mLocationClient.stop();
}
}
}
});

                mLocationClient.start(); 
}

第二个接口:获取历史轨迹

请求URI

http://api.map.baidu.com/trace/v2/track/gethistory

HTTP请求方式

GET

请求参数

参数名 参数含义 类型 备注
ak 用户的ak,授权使用 string 必须
service_id service唯一标识 int 必选
start_time 起始时间 UNIX时间戳 必选
end_time 结束时间 UNIX时间戳 必选。结束时间不超过当前时间,不能早于起始时间,且与起始时间差在24小时之内。
entity_name entity唯一标识 string 必选
simple_return 是否返回精简的结果 int 可选,默认值是0,当设为1时,返回精简结果。
is_processed 是否返回纠偏后轨迹 int 可选,默认值是0。0为返回原始轨迹,1为返回纠偏轨迹。注意:轨迹纠偏功能包括去噪、抽稀、绑路三个步骤,当is_processed=1时,默认仅进行去噪和抽稀处理,并不作绑路处理。若应用为车辆轨迹追踪类型,需要开通绑路操作,可发邮件至:baiduyingyan@baidu.com,注明:ak、service_id和同时在线车辆数,申请开通。
page_index 分页索引 int(1到2^21-1)默认值为1 可选,与page_size一起计算从第几条结果返回,代表返回第几页。
page_size 分页大小 int(1-5000)默认值为100 可选字段,返回结果最大个数与page_index一起计算从第几条结果返回,代表返回结果中每页有几条记录。

返回值

参数名 参数含义 类型 备注
status 状态码    
message 响应信息 string 对status的中文描述
total 忽略掉page_index,page_size后的轨迹点数量   代表一共有多少条符合条件的track
size 返回的结果条数 int 代表本页返回了多少条符合条件的轨迹点数量
distance 此段轨迹的里程数,单位:米 double 符合条件的所有轨迹点的总里程。注意:是total个轨迹点的里程,和分页及本页显示的size无关。
points 历史轨迹点列表   当simple_return=0时,返回point全部字段信息;

当simple_return=1时,返回point信息将只包含 [longitude, latitude, loc_time,speed]字段;

  location 经纬度 Array 百度加密坐标
  loc_time 该track实时点的上传时间 UNIX时间戳 该时间为用户上传的时间
  create_time 创建时间 格式化时间 该时间为服务端时间
  direction 方向 int 范围为[0,365],0度为正北方向,顺时针
  speed 速度 double 单位:km/h
  radius 定位精度 double 单位:m
  <column-key> 自定义字段   当用户创建了track的自定义属性,且在创该属性赋有值,才会返回此字段。

该接口的entity_name就是你需要查询的对象,page_size 默认是100,可以根据需要调大点。

start_time和end_time格式为UNIX时间戳,这要求将时间进行一下转化,方法如下。

/* 将字符串转为时间戳 */
    public static String getTimeToStamp(String time) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd- HH:mm:ss");
        Date date = new Date();
        try {
            date = sdf.parse(time);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

String tmptime = String.valueOf(date.getTime()).substring(0, 10);

return tmptime;
    }

还需要注意的是end_time必须大于start_time且时间差不能超过24小时,否则请求会失败,报参数错误。

接下来说下is_processed这个参数,如果不传,默认的就是原始点记录,如果传1,百度会进行去燥,消除一些跑偏的点,使得轨迹看起来更加圆滑。

该接口的返回结果示例:JSON格式

{

   "status": 0,"size": 2,"total": 2,"entity_name":"小明","distance":4190.69,"points": [{"location": [116.1556024,40.0820658,],"create_time": "2014-09-13 18:23:45","loc_time": "1442139825","direction": 240,"speed": 0.9,"radius": 5,"dispatch_state": “not”},{"location": [116.3579834,40.0280849,],"create_time": "2014-09-13 18:24:45","loc_time": 1442139885,"direction":240,"speed": 0.9,"radius": 5,"dispatch_state": “not”}],"message": "成功"

}

解析该JSON中points字段即可得到一个百度坐标点集合。然后调用如下两个方法,即可画出轨迹。

//划线方法
private void addTracks(){
LatLng ll = null;
List<LatLng> points = new ArrayList<LatLng>();

// 先清除

if ( mBaiduMap != null ){
mBaiduMap.clear();
}

// 添加折线
if (mTrackList.size() > 0){
try {
for (int i = 0 ;i < mTrackList.size(); i ++){
double mLon = Double.parseDouble(mTrackList.get(i).getLocation()[0]);
double mLat = Double.parseDouble(mTrackList.get(i).getLocation()[1]);
ll = new LatLng(mLat, mLon);
points.add(ll);
}

if ( points.size() >= 2 && points.size() <10000 ){
OverlayOptions ooPolyline = new PolylineOptions().width(10)
.color(getResources().getColor(R.color.map_line)).points(points);
mBaiduMap.addOverlay(ooPolyline);
}
} catch (Exception e) {

}
}

}

//设置起点--终点
private void setMarkers(){
// mTrackList 坐标点集合
if (mTrackList != null && mTrackList.size() > 0){
try {
mLatitude = Double.parseDouble(mTrackList.get(mTrackList.size()-1).getLocation()[1]); // 纬度
mLongitude = Double.parseDouble(mTrackList.get(mTrackList.size()-1).getLocation()[0]); // 经度
} catch (Exception e) {
// TODO: handle exception
}
// 添加起点 -- 百度纠偏后起点是最后一个点。
LatLng limit = new LatLng(mLatitude, mLongitude);
mBaiduMap.addOverlay(new MarkerOptions().position(limit)
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.track_start)));// 起点的图片
mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(limit));

try {
mLatitude = Double.parseDouble(mTrackList.get(0).getLocation()[1]);
mLongitude = Double.parseDouble(mTrackList.get(0).getLocation()[0]);
} catch (Exception e) {
// TODO: handle exception
}
// 添加终点
LatLng limitstart = new LatLng(mLatitude, mLongitude);
mBaiduMap.addOverlay(new MarkerOptions().position(limitstart)
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.track_finish)));// 终点的图片
mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(limitstart));
}
}

最后实现的效果图:

Android 使用百度鹰眼实现运动轨迹功能相关推荐

  1. 百度鹰眼android开发,百度鹰眼Android SDK 运行配置

    下载百度鹰眼轨迹Android SDK V2.1.10示例代码 ,也可能是其他版本; 代码导入Eclispse 或者Android studio,还不能运行,需要配置 开发者申请的移动端AK:api_ ...

  2. Android实现百度网盘一些功能

    该项目是一个Android项目,适合新手,运用了很多的常见组件和布局. 项目亮点在于运用了百度网盘的API,通过授权可以在APP中展示授权账号的百度网盘里面的内容,展示的效果如文中图片所示.除此之外还 ...

  3. Android百度地图(四):百度地图运动轨迹纠偏、去噪、绑路之百度鹰眼

    上一篇文章介绍了地图画轨迹的基本原理和实现.不难发现,当位置处于建筑物密集区.桥梁.高架桥下,gps信号较差时,画出来的轨迹效果会比较差.即使是在空旷地带,也难免会出现gps漂移的情况而造成轨迹的偏差 ...

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

    闲聊 看过<鹰眼追击>这部电影的读者一定对"鹰眼"这台巨无霸计算机印象深刻,如今我们能够实现自己的鹰眼. 效果图 本篇为百度地图SDK第三篇博文 第一篇实现:Andro ...

  5. baidumaptrace.php,GitHub - SignalLine/BaiduMapTrace: 百度地图运动轨迹纠偏、去噪、绑路之百度鹰眼sdk服务...

    BaiduMapTrace 百度地图运动轨迹纠偏.去噪.绑路之百度鹰眼sdk服务 轨迹大致能反应用户所经过的路劲,效果还是不错的,说明gps信号较好,精度较高. 但是除了西边的轨迹较为平滑之外,其他方 ...

  6. Android百度鹰眼轨迹

    作者:短工邦技术部 - 陈文超 百度地图之百度鹰眼轨迹使用 拿外卖配送为例,配送员从接单开始上传行驶轨迹,用户端可以实时查看配送员的行驶轨迹,对于点外卖的用户来说可以更直接地观察到自己的订单是否在配送 ...

  7. 百度鹰眼 VS 高德猎鹰 android

    百度鹰眼轨迹服务    http://lbsyun.baidu.com/index.php?title=android-yingyan/guide/quota 什么是Android鹰眼轨迹SDK?  ...

  8. Android studio 百度地图SDK之地图定位与运动轨迹绘制

    百度地图定位与运动轨迹 Android开发的前期准备 地图图层显示与定位 运动轨迹的简单绘制 Android开发的前期准备 Android配置在百度地图SDK官网上有详细的说明.具体可以参考官网的教程 ...

  9. Flutter学习第十三天,2021最新版超详细Flutter2.0实现百度语音转文字功能,Android和Flutter混合开发?

    Flutter实现百度语音转文字功能 1.新建一个flutter项目,来实现View端. 2.新建android端的module 1.打开flutter里面的Android文件 1.新建一个modul ...

最新文章

  1. 图灵2010.12书讯
  2. 机器学习——利用K-均值聚类算法对未标注数据分组
  3. Xshell连接服务器出现(To escape to local shell, press 'Ctrl+Alt+]'.)问题、xshell终端中文乱码完全解决方法
  4. hdu 5616 Jam's balance 正反背包+转换
  5. oracle布尔true 1,将.NET布尔数据类型映射到实体框架中的oracle数(1,0)会抛出错误
  6. Linux networkmanager
  7. 取消linux下命令别名设置,day6Linux命令-设置别名
  8. 通过Pax考试对JBoss Fuse 6.x进行集成测试,第一部分
  9. python请编写程序、生成随机密码_利用Python如何生成随机密码
  10. Python+Appium+夜神模拟器安装与简单运行(2/2)
  11. $.ajax.submit,jQuery中的AjaxSubmit使用讲解
  12. 阿里P7亲自教你!java开发如何包装自己的简历
  13. quartz 数据库表含义解释
  14. 操作系统引导程序顺序
  15. python实现骰子猜大小游戏
  16. 平时开发搜集的一些网址
  17. 为什么调用Dao层会报空指针异常
  18. 百度SEO站群素材资源解析平台系统源码V8.0
  19. BUUCTF_Crypto_Dangerous RSA
  20. LaTeX两张图并排显示

热门文章

  1. u盘插入电脑被拒绝访问怎么解决
  2. Web代码安全漏洞深度剖析
  3. 最全的IDEA配置JDK1.8语法支持步骤
  4. JavaWeb学习总结——文件上传和下载
  5. 除了外观都已截然不同 — 新 MateBook X Pro 评测
  6. script标签之type = module
  7. Liunx编译PCL遇到的Eigen问题
  8. ubuntu终端美化之zsh/oh-my-zsh
  9. 使用sale数据库,统计全部商品的平均价格,以及文具类商品的平均价格
  10. CAS操作原理与实现