百度地图- - - 鹰眼轨迹- - - 历史轨迹和里程查询
生活随笔
收集整理的這篇文章主要介紹了
百度地图- - - 鹰眼轨迹- - - 历史轨迹和里程查询
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
????準備工作就不多說了,在之前的實時定位中已經提過,這里就主要說下思路
????查詢歷史軌跡, 主要是要有時間段,并且這個時間段必須在24小時之內,而且傳入的時間參數居然是int的,為毛百度就不能用long呢,坑爹的,將long轉化為int有時候會報錯,就不多說,截取吧...
????
//選擇交通方式if (!radiobutton_drive.isChecked() && !radiobutton_walk.isChecked() && !radiobutton_ride.isChecked()) {MyToastUtils.show(MainActivity.this, "請選擇交通方式");return;}if (radiobutton_drive.isChecked()) {Log.i(TAG, "選中方式"+radiobutton_drive.getText());transport_modes = "transport_mode=1";}else if (radiobutton_ride.isChecked()) {Log.i(TAG, "選中方式"+radiobutton_ride.getText());transport_modes = "transport_mode=2";}else if (radiobutton_walk.isChecked()) {Log.i(TAG, "選中方式"+radiobutton_walk.getText());transport_modes = "transport_mode=3";}StringBuffer startBuffer = new StringBuffer();startBuffer.append(input_starttime_year).append("-").append(input_starttime_month).append("-").append(input_starttime_day).append(" ").append(input_starttime_hour);StringBuffer endBuffer = new StringBuffer();endBuffer.append(input_endtime_year).append("-").append(input_endtime_month).append("-").append(input_endtime_day).append(" ").append(input_endtime_hour);startTimeStamp = DateUtils.getTimeToStamp(startBuffer.toString());endTimeStamp = DateUtils.getTimeToStamp(endBuffer.toString());Log.i(TAG, startTimeStamp+"---"+endTimeStamp);if (endTimeStamp >= startTimeStamp) {checkHistoryLineHandler.sendEmptyMessage(222);handler發送完后就,直接查詢歷史軌跡,也可以查詢里程
checkHistoryLineThread = new HandlerThread("checkHistoryLine");checkHistoryLineThread.start();checkHistoryLineHandler = new Handler(checkHistoryLineThread.getLooper()){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if (null != msg) {if (msg.what == 222) {//查詢的dialog取消掉mHandler.obtainMessage(DIALOG_DISMISS).sendToTarget();//查歷史軌跡queryHistoryLine();//查里程queryDistances(startTimeStamp,endTimeStamp);}}}}; /*** 查詢歷史軌跡*/protected void queryHistoryLine() {//軌跡服務IDlong serviceId = mApp.getServiceId();// entity標識列表(多個entityName,以英文逗號"," 分割)String entityName = mApp.getName();// 是否返回精簡結果 (0 : 返回全部結果,1 : 返回精簡結果)int simpleReturn = 1;/* 1 返回糾偏軌跡,為0則返回原始軌跡 * 當設置為 1 時 , 默認僅進行去噪和抽稀處理,并不作綁路處理* */int isProcessed = 1;/* 糾偏選項 * ①need_denoise:去噪,默認為1②need_vacuate:抽稀,默認為1③need_mapmatch:綁路,之前未開通綁路的service,默認值為0;之前已開通綁路的service,默認值為1。 transport_mode:交通方式, 1: 駕車,2: 騎行,3: 步行。默認為1:駕車。設置該參數后,系統將根據所選的交通方式,進行適應該方式的去噪、抽稀、綁路處理(注:目前僅影響綁路策略)*/String processOption = "need_denoise=1,need_vacuate=1,need_mapmatch=1,"+transport_modes;//開始查詢的時間點int startTimes = startTimeStamp;//結束的時間點int endTimes = endTimeStamp;//分頁大小, 每頁有幾條記錄,默認100 ,最大5000int pageSize = 4000;//分頁索引, 代表返回第幾頁, 默認是1 int pageIndex = 1; traceClient.queryHistoryTrack(serviceId , entityName, simpleReturn, isProcessed, processOption, startTimes, endTimes, pageSize, pageIndex, myHistoryTrace);} /*** 查詢里程*/public void queryDistances(int startTime,int endTime){//軌跡服務IDlong serviceId = mApp.getServiceId();// entity標識列表(多個entityName,以英文逗號"," 分割)String entityName = mApp.getName();/* 1 返回糾偏軌跡,為0則返回原始軌跡 * 當設置為 1 時 , 默認僅進行去噪和抽稀處理,并不作綁路處理* */int isProcessed = 1;/* 糾偏選項 * ①need_denoise:去噪,默認為1②need_vacuate:抽稀,默認為1③need_mapmatch:綁路,之前未開通綁路的service,默認值為0;之前已開通綁路的service,默認值為1。 transport_mode:交通方式, 1: 駕車,2: 騎行,3: 步行。默認為1:駕車。設置該參數后,系統將根據所選的交通方式,進行適應該方式的去噪、抽稀、綁路處理(注:目前僅影響綁路策略)*/ // String processOption = "need_denoise=1,need_vacuate=1,need_mapmatch=1,"+transport_modes;String processOption = "need_denoise=1,need_vacuate=1,need_mapmatch=1";/*** 里程補充 ,當軌跡中斷5分鐘以上,會被認為是一段中斷軌跡 * driving:使用最短駕車路線距離補充 * riding:使用最短騎行路線距離補充 * walking:使用最短步行路線距離補充 * straight:使用直線距離補充 * no_supplement:不補充,中斷兩點間距離不記入里程。 */String supplementMode = null;if (radiobutton_drive.isChecked()) {supplementMode = "driving";}else if (radiobutton_ride.isChecked()) {supplementMode = "riding";}else if (radiobutton_walk.isChecked()) {supplementMode = "walking";}else if (isLoca) {supplementMode = "no_supplement";}traceClient.queryDistance(serviceId, entityName, isProcessed,processOption, supplementMode, startTime,endTime, myHistoryTrace);} private void initHistoryTrcak() {myHistoryTrace = new OnTrackListener(){public void onQueryHistoryTrackCallback(String message) {//返回的是json的字符串Log.i(TAG, message+"-!!!------哈");try {JSONObject obje = new JSONObject(message);Log.i(TAG, obje+"歷史軌跡的");if (null != obje) {if ((Integer)obje.get("status") == 0) {/** 這里start_point和end_point這兩個字段返回的是對象{} ,所以用getJSONObject* obj.getJSONObject("start_point")* 這里point這個字段返回的是數組[] ,所以用getJSONArray* obj.getJSONArray("points")*///這個是返回的軌跡點的集合, 每個點 有經緯度JSONArray array = obje.getJSONArray("points");Log.i(TAG, array.length()+"----array");if (null != array || array.length() == 0) {LatLng ll = null;for (int i = 0; i < array.length(); i++) {JSONArray array2 = array.getJSONArray(i);ll = new LatLng(array2.getDouble(1),array2.getDouble(0));pointList.add(ll);//畫線 mHandler.obtainMessage(DRAW_HISTORY_LINE,ll).sendToTarget();}}else{//沒有軌跡mHandler.obtainMessage(TRACE_NOT).sendToTarget();}//這是開始位置JSONObject startLocal = obje.getJSONObject("start_point");double startLocal_longitude = Double.parseDouble(startLocal.get("longitude").toString());double startLocal_latitude = Double.parseDouble(startLocal.get("latitude").toString());//結束位置JSONObject endLocal = obje.getJSONObject("end_point");double endLocal_longitude = Double.parseDouble(endLocal.get("longitude").toString());double endLocal_latitude = Double.parseDouble(endLocal.get("latitude").toString());if (startLocal_longitude == 0.0 ||startLocal_latitude == 0.0||endLocal_longitude == 0.0 || endLocal_latitude == 0.0) {Log.i(TAG, "沒有軌跡點");mHandler.obtainMessage(TRACE_NOT).sendToTarget();}else{LatLng startlocal_ll = new LatLng(startLocal_latitude,startLocal_longitude);mHandler.obtainMessage(DRAW_HISTORY_LINE_START, startlocal_ll).sendToTarget();LatLng endlocal_ll = new LatLng(endLocal_latitude,endLocal_longitude);mHandler.obtainMessage(DRAW_HISTORY_LINE_END, endlocal_ll).sendToTarget();}}else if ((Integer)obje.get("status") == 2) { //開始結束時間間隔不能超過24小時mHandler.obtainMessage(ERROR_MESSAGE, obje.get("message")).sendToTarget();;}}} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();Log.i(TAG, "解析失敗----");}mHandler.obtainMessage(PROGRESS_DIALOG_DISMISS).sendToTarget();}//返回路程的監聽回調@Overridepublic void onQueryDistanceCallback(String msg) {super.onQueryDistanceCallback(msg);Log.i(TAG, "查詢里程"+msg);try {JSONObject o = new JSONObject(msg);double s = Double.parseDouble(o.get("distance").toString());Log.i(TAG, "里程msg"+o+"距離"+s);if (isLoca) { //如果實時定位開著, 這時候 要把每次獲取出的距離都累加起來totalDistance += s;totalDistance = MathUtils.convert(totalDistance);Log.i(TAG, totalDistance+"--實時定位的距離--"+s);mHandler.obtainMessage(SHOW_DISTANCE, totalDistance).sendToTarget();}else{mHandler.obtainMessage(SHOW_HISTORY_DISTANCE, MathUtils.convert(s)).sendToTarget();}} catch (JSONException e) {e.printStackTrace();}}@Overridepublic void onRequestFailedCallback(String arg0) {// TODO Auto-generated method stubLog.i(TAG, arg0+"-!!!------噶");};};} case DRAW_HISTORY_LINE: //歷史軌跡LatLng ll = (LatLng) msg.obj;drawLineOrTimeLoca(ll,true);break; case DRAW_HISTORY_LINE_START:LatLng loca_start = (LatLng) msg.obj;setMarker(loca_start, "start");break; case DRAW_HISTORY_LINE_END:LatLng loca_end = (LatLng) msg.obj;setMarker(loca_end, "end");break; /*** 繪制歷史軌跡路線或者 實時定位* 傳true 表示需要繪制歷史軌跡* 傳false 表示不需要繪制歷史軌跡*/protected void drawLineOrTimeLoca(LatLng point,boolean lineOrLoca) {if (lineOrLoca) {if (pointList.size() >= 2 && pointList.size() <= 10000) {// 添加路線(軌跡)polyline = new PolylineOptions().width(10).color(Color.RED).points(pointList);}else{pointList = pointList.subList(10000, pointList.size());polyline = new PolylineOptions().width(10).color(Color.RED).points(pointList);}}setMarker(point, "routeline");}設置覆蓋物setMarker的方法 ,在前面的實時定位中已經貼出來了,需要的可以到那里去看
轉載于:https://my.oschina.net/fbf8866/blog/853349
總結
以上是生活随笔為你收集整理的百度地图- - - 鹰眼轨迹- - - 历史轨迹和里程查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 南宁1号线开创802.11ac地铁PIS
- 下一篇: 伤脑筋十二块游戏程序设计制作