百度鷹眼上傳軌跡
接到公司的需求增加向百度鷹眼POST資料,以展示執行軌跡
廢話不多說,直接上道;
使用鷹眼必須先註冊百度賬號成為百度地圖的開發者,具體的我就不說了
這裡只寫如何上傳軌跡(多個),其實上傳多個與單一不差什麼,只是引數的長度不一樣
這個AK是建立應用之後生成的,百度地圖首頁找到鷹眼軌跡管理平臺,然後進行建立服務,之後會生成一個**ServerID**POST軌跡點需要用到。
接著就是程式碼,編輯,但是在這之前,需要認真的檢視鷹眼軌跡的API文件,基本上已經描述的7788了。鷹眼軌跡API
這大概需要兩塊內容
1. 拼接要傳送的資訊的字串(需要什麼API裡面講的很清楚)
2. 傳送請求需要的HTTPUtils 方法。
這裡先貼上傳送請求的HTTP方法吧,這個其實也困擾了我好久。
/**
* post
* 向百度鷹眼傳送資料的posts方法
*/
public static String sendPost(String url, String ak,Integer service_id,String point_list) {
String params = "ak=" + ak + "&" + "service_id=" + service_id + "&"
+ "point_list=" + point_list;
if (url != null) {
log.info("POST YINGYAN URL:"+url+"|POINT_LIST:"+point_list);
}
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 開啟和URL之間的連線
URLConnection conn = realUrl.openConnection();
// 設定通用的請求屬性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8; ");
// 傳送POST請求必須設定如下兩行
conn.setDoOutput(true);
conn.setDoInput(true);
// 獲取URLConnection物件對應的輸出流
out = new PrintWriter(conn.getOutputStream());
// 傳送請求引數
out.print(params);
// flush輸出流的緩衝
out.flush();
// 定義BufferedReader輸入流來讀取URL的響應
in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
log.info("傳送 POST 請求出現異常!"+e);
// System.out.println("傳送 POST 請求出現異常!" + e);
e.printStackTrace();
}
// 使用finally塊來關閉輸出流、輸入流
finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
log.info("IOException:"+ex);
ex.printStackTrace();
}
}
log.info("RESULT:"+result);
return result;
}
其實,傳送HTTP不是難點,只要這個寫出來其他的就都好辦了。
好,下面來說一下字串的拼接:
大家應該注意到了,其實我上面的方法不太完美,因為業務的原因,我把最後字串的拼接放到utils方法裡面這是不應該的。
String params = "ak=" + ak + "&" + "service_id=" + service_id + "&"
+ "point_list=" + point_list;
這個params 是最終要POST 到 百度鷹眼API的內容。
ak:就是之前建立應用的時候生成的ak
service_id :是建立服務之後生辰的id號
point_list :就是你所要上傳的所有的 軌跡點 字串物件的集合
其實對於point_list 來說,上傳多個軌跡點是這樣的。如果要上傳單個軌跡點的話,只需要把point_list 裡面單個物件的欄位拿出來,以上面params 這個形式拼接一下就行了。
這個是我的測試程式碼(很low):
private static final String plateNo = "豫A11111";
private static final String dataStr = "[{'lat':30.202182,'lng':120.209032,'time':1528372801315},{'lat':30.202182,'lng':120.209032,'time':1528372801340},{'lat':30.202182,'lng':120.209032,'time':1528372801369},{'lat':30.202182,'lng':120.209032,'time':1528372801397},{'lat':30.202182,'lng':120.209032,'time':1528372801425},{'lat':30.202255,'lng':120.208712,'time':1528372810418},{'lat':30.202255,'lng':120.208712,'time':1528372810441},{'lat':30.202255,'lng':120.208712,'time':1528372810457},{'lat':30.202255,'lng':120.208712,'time':1528372810477},{'lat':30.202255,'lng':120.208712,'time':1528372810494},{'lat':30.202255,'lng':120.208712,'time':1528372810519},{'lat':30.202172,'lng':120.208488,'time':1528372820419},{'lat':30.202172,'lng':120.208488,'time':1528372820440},{'lat':30.202172,'lng':120.208488,'time':1528372820455},{'lat':30.202172,'lng':120.208488,'time':1528372820471},{'lat':30.202172,'lng':120.208488,'time':1528372820489},{'lat':30.202172,'lng':120.208488,'time':1528372820505},{'lat':30.202131,'lng':120.208342,'time':1528372830424},{'lat':30.202131,'lng':120.208342,'time':1528372830504},{'lat':30.202131,'lng':120.208342,'time':1528372830529},{'lat':30.202131,'lng':120.208342,'time':1528372830583},{'lat':30.202131,'lng':120.208342,'time':1528372830634},{'lat':30.202131,'lng':120.208342,'time':1528372830680},{'lat':30.202083,'lng':120.208189,'time':1528372840430},{'lat':30.202083,'lng':120.208189,'time':1528372840469},{'lat':30.202083,'lng':120.208189,'time':1528372840508},{'lat':30.202083,'lng':120.208189,'time':1528372840542},{'lat':30.202083,'lng':120.208189,'time':1528372840584},{'lat':30.202083,'lng':120.208189,'time':1528372840630},{'lat':30.202044,'lng':120.208031,'time':1528372850425},{'lat':30.202044,'lng':120.208031,'time':1528372850494},{'lat':30.202044,'lng':120.208031,'time':1528372850515},{'lat':30.202044,'lng':120.208031,'time':1528372850573},{'lat':30.202044,'lng':120.208031,'time':1528372850612},{'lat':30.202044,'lng':120.208031,'time':1528372850640},{'lat':30.202164,'lng':120.207982,'time':1528372860426},{'lat':30.202164,'lng':120.207982,'time':1528372860469}]";
public static void main(String[] args) {
String sendJsonPostToBd = HTTPutil.sendJsonPostToBd(dataStr, plateNo);
System.out.println("返回的值是:"+ sendJsonPostToBd);
}
當然因為業務的原因,所以,你如果要測試,直接貼上我的程式碼是不行的。你只需要按照要求把sendPost 裡面的所需要的引數傳遞進去就行了。
這裡說一下我踩過的坑吧
entity_name—-》這個欄位,因為是包含有中文字元,所以在傳遞的時候,切記要把他編碼成UTF-8或者GBK的形式,否則的話,就會返回如下的錯誤,一般來說這個欄位儲存的是唯一識別符號,也就是車牌號碼(畢竟是軌跡點)。一定是有中文的。
上傳出錯曾返回的值:
[INFO ] 2018-06-14 23:34:48,345 com.saikul.tracker.util.HttpUtils - RESULT:{“status”:2,”message”:”point_list������������������������point”,”fail_info”:{“param_error”:[{“coord_type_input”:”bd09ll”,”entity_name”:”?A2B187”,”latitude”:30.203306,”loc_time”:1528990794,”longitude”:120.207672,”error”:”entity_name ���������������”},{“coord_type_input”:”bd09ll”,”entity_name”:”?A2B187”,”latitude”:30.203306,”loc_time”:1528990794,”longitude”:120.207672,”error”:”entity_name ���������������”},{“coord_type_input”:”bd09ll”,”entity_name”:”?A2B187”,”latitude”:30.203306,”loc_time”:1528990803,”longitude”:120.207672,”error”:”entity_name ���������������”},{“coord_type_input”:”bd09ll”,”entity_name”:”?A2B187”,”latitude”:30.203306,”loc_time”:1528990803,”longitude”:120.207672,”error”:”entity_name ���������������”},{“coord_type_input”:”bd09ll”,”entity_name”:”?A2B187”,”latitude”:30.203347,”loc_time”:1528990812,”longitude”:120.207576,”error”:”entity_name ���������������”},{“coord_type_input”:”bd09ll”,”entity_name”:”?A2B187”,”latitude”:30.203347,”loc_time”:1528990812,”longitude”:120.207576,”error”:”entity_name ���������������”},{“coord_type_input”:”bd09ll”,”entity_name”:”?A2B187”,”latitude”:30.203385,”loc_time”:1528990822,”longitude”:120.207587,”error”:”entity_name ���������������”},{“coord_type_input”:”bd09ll”,”entity_name”:”?A2B187”,”latitude”:30.203385,”loc_time”:1528990822,”longitude”:120.207587,”error”:”entity_name ���������������”},{“coord_type_input”:”bd09ll”,”entity_name”:”?A2B187”,”latitude”:30.203385,”loc_time”:1528990832,”longitude”:120.207589,”error”:”entity_name ���������������”},{“coord_type_input”:”bd09ll”,”entity_name”:”?A2B187”,”latitude”:30.203385,”loc_time”:1528990832,”longitude”:120.207589,”error”:”entity_name ���������������”},{“coord_type_input”:”bd09ll”,”entity_name”:”?A2B187”,”latitude”:30.203377,”loc_time”:1528990842,”longitude”:120.207618,”error”:”entity_name ���������������”},{“coord_type_input”:”bd09ll”,”entity_name”:”?A2B187”,”latitude”:30.203377,”loc_time”:1528990842,”longitude”:120.207618,”error”:”entity_name ���������������”}],”internal_error”:[]},”success_num”:0}
感謝大神的幫助