Java百度鹰眼轨迹批量上传
背景
这里,就先讲讲如何批量上传轨迹到鹰眼管理平台。我看****里面很多博客都是使用移动端实时上传轨迹(前提是你有硬件设备),也有的是直接上传CVS文件到数据平台上。
而我这里,是直接使用Java代码批量上传轨迹到平台上。
准备工作
- 创建应用:获得AK
创建应用获得AK - 创建服务:获得service ID
创建服务获得service ID
阅读鹰眼Web服务API:这里主要针对轨迹上传,其余自行阅读。
鹰眼轨迹上传文档
代码中记得引入Json包
开始
上传单个轨迹点请参考这篇博客:上传单个轨迹
上传多个轨迹代码:
package BDYingYan;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.http.NameValuePair;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import Tools.CoordType;
import Tools.CreatClientHttp;
public class UploadYingyan {
public static void main(String[] args) throws IOException {
long time0 = System.currentTimeMillis();
String nowTimeStamp0 = String.valueOf(time0 / 1000);
JSONArray ja = new JSONArray();
for(int i=1 ; i<=50 ; i++)
{
JSONObject ob1 = new JSONObject();
ob1.put("coord_type_input", CoordType.wgs84);
double latitude = 31.222212 + 2*i / 100.0;
double longitude = 121.466600 + 2*i / 100.0;
ob1.put("longitude", String.valueOf(longitude));
ob1.put("latitude", String.valueOf(latitude));
String time = String.valueOf(System.currentTimeMillis() / 1000 + 2*i - 86400);
ob1.put("loc_time", time);
ob1.put("entity_name", "105");
ja.add(ob1);
}
System.out.println(ja);
List<NameValuePair> paramList1 = new ArrayList<NameValuePair>();
paramList1.add(new BasicNameValuePair("ak", "U12mILhtjTORg01kEEfTvHBcurOtnxfw"));//传递的参数
paramList1.add(new BasicNameValuePair("sn", ""));//传递的参数
paramList1.add(new BasicNameValuePair("service_id", "209165"));//传递的参数
paramList1.add(new BasicNameValuePair("point_list", ja.toString()));//传递的参数
//批量添加轨迹点接口
String url = "http://yingyan.baidu.com/api/v3/track/addpoints";
//创建一个HTTPClient
CreatClientHttp ct = new CreatClientHttp(url, paramList1);
//默认方式创建
ct.setClient(HttpClients.createDefault());// 创建默认http连接
//开始请求
ct.startHttp(ct.getClient());
}
}
package Tools;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class CreatClientHttp {
HttpClient client = null;
HttpPost post = null;
HttpEntity entitya = null;
HttpResponse response = null;
HttpEntity entity = null;
/**创建HTTP请求和配置参数
* @param url 请求的接口
* @param string 数据点集合
* @throws ClientProtocolException
* @throws IOException
*/
public CreatClientHttp(String url, List<NameValuePair> params) throws ClientProtocolException, IOException {
post = new HttpPost(url);// 创建一个post请求
// 把参转码后放入请求实体中
entitya = new UrlEncodedFormEntity(params, "utf-8");
post.setEntity(entitya);// 把请求实体放post请求中
}
public HttpClient getClient() {
return client;
}
public void setClient(HttpClient client) {
this.client = client;
}
/**开始HTTP请求
* @param client
* @throws ClientProtocolException
* @throws IOException
*/
public void startHttp(HttpClient client) throws ClientProtocolException, IOException
{
response = client.execute(post);// 用http连接去执行get请求并且获得http响应
entity = response.getEntity();// 从response中取到响实体
String html = EntityUtils.toString(entity);// 把响应实体转成文本
System.out.println(html);
}
}
数据格式:
数据格式:
[
ak=U12mILhtjTORg01kEEfTvHBcurOtnxfw,
sn=,
service_id=209165,
point_list=
[{"coord_type_input":"wgs84","longitude":"121.4866","latitude":"31.242212","loc_time":"1549599739","entity_name":"105"},
{"coord_type_input":"wgs84","longitude":"121.5066","latitude":"31.262211999999998","loc_time":"1549599741","entity_name":"105"},
{"coord_type_input":"wgs84","longitude":"121.5266","latitude":"31.282211999999998","loc_time":"1549599743","entity_name":"105"}]
]
鹰眼轨迹管理平台
鹰眼轨迹管理平台
点击进入服务,查看对应的轨迹。
你会发现,我刚才不是批量上传轨迹上去了嘛,为啥没有路线显示出来呢?(我也很疑惑,为啥呀?)
不过没关系,轨迹点确实已经上传上去了,我们调用百度的JavaScript的API来获取轨迹点就行了,然后再标点、连线即可。(上一篇博客简单描述过)。
至于图片的车车为什么在海面上,hhhhh~那些数据点我乱造的,所以没有控制在上海片区内。
查询上传轨迹
百度鹰眼提供的文档很齐全,这里为了检验我上面是否已经成功批量上传轨迹,就使用查询的接口,其余接口读者自行尝试。
package BDYingYan;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
public class YingYanQueryTrajectory {
public static void main(String[] args) throws ClientProtocolException, IOException
{
HttpClient client = HttpClients.createDefault();// 创建默认http连接
HttpGet get0 = new HttpGet("http://yingyan.baidu.com/api/v3/entity/list?service_id=209165&ak=U12mILhtjTORg01kEEfTvHBcurOtnxfw");
//HttpGet get = new HttpGet("http://yingyan.baidu.com/api/v3/track/gettrack?service_id=209165&entity_name=105&start_time=1549556469&end_time=1549470069&ak=U12mILhtjTORg01kEEfTvHBcurOtnxfw");
HttpResponse response = client.execute(get0);
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity, "UTF-8");
System.out.print(result);
}
}
所有代码
因为写这篇博客的时候,代码还没通过审核。
那么把截图放出来,自己根据截图信息去****找吧。
至于为什么是5分下载,我也不想拿大家的分,提交的时候就定位5分了,没得修改。以前都是可以修改的呀~没办法~
结语
懒得遮挡我的AK和service ID了,在具体操作时候,大家记得换自己的AK和service ID。~~~