1. 程式人生 > >百度鷹眼上傳軌跡

百度鷹眼上傳軌跡

接到公司的需求增加向百度鷹眼POST資料,以展示執行軌跡
廢話不多說,直接上道;

使用鷹眼必須先註冊百度賬號成為百度地圖的開發者,具體的我就不說了
這裡只寫如何上傳軌跡(多個),其實上傳多個與單一不差什麼,只是引數的長度不一樣
建立應用生成AK

這個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}

感謝大神的幫助