Android 使用百度鹰眼实现运动轨迹功能
来源:互联网 发布:python generator 编辑:程序博客网 时间:2024/05/29 04:26
鹰眼轨迹是百度开放平台最新推出的一套高性能轨迹存储和查询服务。百度已做好如此强大的功能,我们岂能不用。
使用鹰眼轨迹,一种方法是完全集成百度鹰眼轨迹的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
请求参数
entity_name 自己定义个唯一的区分标示即可,cord_type 一般传3,因为定位采用的百度api,返回的坐标就是百度经纬度坐标。
首先我们要在Android端集成百度定位的sdk。然后开启定位服务,每隔一段时间调用该接口上传坐标点。定位的核心方法如下。该方法建议在Service中实现。
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();
}
}
}
});
}
第二个接口:获取历史轨迹
请求URI
http://api.map.baidu.com/trace/v2/track/gethistory
HTTP请求方式
GET
请求参数
返回值
当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格式
{
}
解析该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 使用百度鹰眼实现运动轨迹功能
- Android 使用百度鹰眼实现运动轨迹功能
- Android 使用百度鹰眼实现运动轨迹功能
- Android百度鹰眼轨迹
- Android百度地图(四):百度地图运动轨迹纠偏、去噪、绑路之百度鹰眼
- Android百度地图(四):百度地图运动轨迹纠偏、去噪、绑路之百度鹰眼
- Android-百度地图鹰眼轨迹SDK使用全解析
- Android 百度鹰眼轨迹SDK(v2.1.6)
- Android 百度鹰眼轨迹SDK(v2.1.6)
- 调用百度鹰眼api实现实时轨迹绘制
- 调用百度鹰眼api实现实时轨迹绘制
- 百度鹰眼轨迹iOS SDK
- 百度地图鹰眼轨迹---乱码问题
- 百度鹰眼,开始记录轨迹崩溃
- javaweb百度鹰眼上传轨迹接口
- android 百度导航引擎初始化失败找不到libgnustl_shared.so以及百度鹰眼轨迹异常的问题
- Android使用百度地图API实现GPS步行轨迹
- 百度地图开发之实现运动轨迹 <一>
- 关于如何显示加密之后的图片
- Android - BroadcastRecevier
- iOS mask Layer 详解
- jspwiki-2.10.1的权限配置与使用
- 1的数目
- Android 使用百度鹰眼实现运动轨迹功能
- WCF简介
- 点击发送后图片查看大图的实现思路
- redis的使用场景(小场景)
- Java的异常处理
- 技术领导要不要写代码?
- 异步线程池
- 使用AndroidStudio分析和解决ImageLoader引起OOM问题
- 如何为UICollectionView添加整体的header view