Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android百度地圖之實現路徑規劃(駕車、步行和公交線路搜索)

Android百度地圖之實現路徑規劃(駕車、步行和公交線路搜索)

編輯:Android開發實例

前段時間公司項目比較忙,百度地圖這塊拖了好久了,這篇續前面幾篇有關百度地圖的。好了廢話不多說,今天要聊的是有關路徑規劃的,如何使用百度地圖搜索駕車、步行和公交路線並標注在地圖上。這篇是基於 Android百度地圖搜索服務之周邊檢索使用示例 ,有什麼不清楚的請查看前面的幾篇博文。路徑規劃:從那裡到那裡的線路規劃,比如:從上海市盛夏路益江路到陸家嘴的駕車、步行和公交路線。

一、從那裡到那裡:

        1、起始地點:

  1. // 上海市盛夏路益江路的GPS緯度經度值:121.637942,31.205889   
  2.        MKPlanNode start = new MKPlanNode();  
  3.        start.pt = new GeoPoint((int) (31.205889 * 1E6), (int) (121.637942 * 1E6)); 

        2、目的地點:

  1. // 上海市陸家嘴的GPS緯度經度值: 121.509075,31.243319   
  2.        MKPlanNode end = new MKPlanNode();  
  3.        end.pt = new GeoPoint( (int) (31.243319 * 1E6), (int) (121.509075 * 1E6)); 

        注:獲取地點的GPS值可以到http://api.map.baidu.com/lbsapi/getpoint/index.html查詢,要注意拿到的值的順序,獲取到的值是經緯度(也就是說第一個表示的是經度值,第二個表示的是緯度值)。而我們在地圖上查找或標注時使用的順序是GPS緯度經度值,因此記得調整順序,不然在百度地圖上就顯示不出來。

二、如何到達,怎樣到達:

        1、駕車線路:

            駕乘檢索策略常量:時間優先

  1. mMKSearch.setDrivingPolicy(MKSearch.ECAR_TIME_FIRST);  
  2.         mMKSearch.drivingSearch(null, start, null, end);  

            駕乘檢索策略常量:較少費用

  1. mMKSearch.setDrivingPolicy(MKSearch.ECAR_FEE_FIRST);  
  2.         mMKSearch.drivingSearch(null, start, null, end);  

            駕乘檢索策略常量:最短距離

 

  1. mMKSearch.setDrivingPolicy(MKSearch.ECAR_DIS_FIRST);  
  2.         mMKSearch.drivingSearch(null, start, null, end);  

獲取結果並展示時,需要實現MKSearchListener接口中的onGetDrivingRouteResult方法 :

  1. @Override 
  2.         public void onGetDrivingRouteResult(MKDrivingRouteResult result, int arg1) {  
  3.             if (result == null)  
  4.                 return;  
  5.               
  6.             RouteOverlay routeOverlay = new RouteOverlay(BaiduMapRouteOverlayActivity.this, mMapView);     
  7.               
  8.             routeOverlay.setData(result.getPlan(0).getRoute(0));   
  9.             mMapView.getOverlays().add(routeOverlay);  
  10.             mMapView.refresh();//刷新地圖  
  11.               
  12.         }  

        2、步行線路:

 

  1. // 步行線路搜索  
  2.        mMKSearch.walkingSearch(null, start, null, end);  


獲取結果並展示時,需要實現MKSearchListener接口中的onGetWalkingRouteResult方法

  1. @Override 
  2.            public void onGetWalkingRouteResult(MKWalkingRouteResult result, int arg1) {  
  3.                // TODO Auto-generated method stub  
  4.              RouteOverlay routeOverlay = new RouteOverlay(BaiduMapRouteOverlayActivity.this, mMapView);     
  5.                 routeOverlay.setData(result.getPlan(0).getRoute(0));   
  6.                 mMapView.getOverlays().add(routeOverlay);  
  7.                 mMapView.refresh();//刷新地圖  
  8.            }  

 

        3、公交線路:

公交線路搜索的方法為transitSearch(String city, MKPlanNode start, MKPlanNode end),city:為待查公交線路所在城市,start和end分別是起點和終點;獲取結果的方法改為重寫onGetTransitRouteResult方法。

 

  1. // 公交線路搜索  
  2.   mMKSearch.transitSearch("上海市", start, end);  

獲取結果:

  1. @Override 
  2.           public void onGetTransitRouteResult(MKTransitRouteResult result, int arg1) {  
  3.              RouteOverlay routeOverlay = new RouteOverlay(BaiduMapRouteOverlayActivity.this, mMapView);     
  4.                routeOverlay.setData(result.getPlan(0).getRoute(0));   
  5.                mMapView.getOverlays().add(routeOverlay);  
  6.                mMapView.refresh();//刷新地圖  
  7.                  
  8.           }  

四、完整代碼:

  1. package com.android.baidu.map;  
  2.  
  3. import android.app.Activity;  
  4. import android.content.Context;  
  5. import android.content.res.Configuration;  
  6. import android.os.Bundle;  
  7. import android.widget.Toast;  
  8.  
  9. import com.baidu.mapapi.BMapManager;  
  10. import com.baidu.mapapi.MKGeneralListener;  
  11. import com.baidu.mapapi.map.MKEvent;  
  12. import com.baidu.mapapi.map.MapController;  
  13. import com.baidu.mapapi.map.MapView;  
  14. import com.baidu.mapapi.map.RouteOverlay;  
  15. import com.baidu.mapapi.search.MKAddrInfo;  
  16. import com.baidu.mapapi.search.MKBusLineResult;  
  17. import com.baidu.mapapi.search.MKDrivingRouteResult;  
  18. import com.baidu.mapapi.search.MKPlanNode;  
  19. import com.baidu.mapapi.search.MKPoiResult;  
  20. import com.baidu.mapapi.search.MKSearch;  
  21. import com.baidu.mapapi.search.MKSearchListener;  
  22. import com.baidu.mapapi.search.MKSuggestionResult;  
  23. import com.baidu.mapapi.search.MKTransitRouteResult;  
  24. import com.baidu.mapapi.search.MKWalkingRouteResult;  
  25. import com.baidu.platform.comapi.basestruct.GeoPoint;  
  26.  
  27. public class BaiduMapRouteOverlayActivity extends Activity {  
  28.  
  29.     public static final String BAIDU_MAP_KEY = "07418AEC69BAAB7104C6230A6120C580DFFAEEBB";  
  30.  
  31.     private BMapManager mMapManager = null;  
  32.  
  33.     private MapView mMapView = null;  
  34.  
  35.     private MKSearch mMKSearch = null;  
  36.  
  37.     private Context mContext;  
  38.  
  39.     @Override 
  40.     public void onCreate(Bundle savedInstanceState) {  
  41.         super.onCreate(savedInstanceState);  
  42.  
  43.         mContext = BaiduMapRouteOverlayActivity.this.getApplicationContext();  
  44.  
  45.         mMapManager = new BMapManager(getApplicationContext());  
  46.         mMapManager.init(BAIDU_MAP_KEY, new MKGeneralListener() {  
  47.  
  48.             @Override 
  49.             public void onGetNetworkState(int errorCode) {  
  50.                 if (errorCode == MKEvent.ERROR_NETWORK_CONNECT) {  
  51.                     Toast.makeText(mContext, "您的網絡出錯啦!", Toast.LENGTH_LONG)  
  52.                             .show();  
  53.                 }  
  54.             }  
  55.  
  56.             @Override 
  57.             public void onGetPermissionState(int errorCode) {  
  58.                 if (errorCode == MKEvent.ERROR_PERMISSION_DENIED) {  
  59.                     // 授權Key錯誤:  
  60.                     Toast.makeText(mContext,  
  61.                             "請在 DemoApplication.java文件輸入正確的授權Key!",  
  62.                             Toast.LENGTH_LONG).show();  
  63.                 }  
  64.             }  
  65.         });  
  66.  
  67.         setContentView(R.layout.main);  
  68.  
  69.         mMapView = (MapView) this.findViewById(R.id.bmapsView);  
  70.         mMapView.setBuiltInZoomControls(true);  
  71.  
  72.         MapController mMapController = mMapView.getController();  
  73.         // 上海市的GPS緯度經度值:31.243319,121.509075  
  74.         GeoPoint geoPoint = new GeoPoint((int) (31.243319 * 1E6),  
  75.                 (int) (121.509075 * 1E6));  
  76.         mMapController.setCenter(geoPoint);  
  77.         mMapController.setZoom(12);  
  78.  
  79.         // 檢索從上海市盛夏路益江路到陸家嘴的駕車路線  
  80.  
  81.         // 上海市盛夏路益江路的GPS緯度經度值:121.637942,31.205889  
  82.         MKPlanNode start = new MKPlanNode();  
  83.         start.pt = new GeoPoint((int) (31.205889 * 1E6),  
  84.                 (int) (121.637942 * 1E6));  
  85.  
  86.         // 上海市陸家嘴的GPS緯度經度值: 121.509075,31.243319  
  87.         MKPlanNode end = new MKPlanNode();  
  88.         end.pt = new GeoPoint((int) (31.243319 * 1E6), (int) (121.509075 * 1E6));  
  89.  
  90.         mMKSearch = new MKSearch();  
  91.         mMKSearch.init(mMapManager, new MKSearchListener() {  
  92.  
  93.             @Override 
  94.             public void onGetAddrResult(MKAddrInfo arg0, int arg1) {  
  95.                 // TODO Auto-generated method stub  
  96.  
  97.             }  
  98.  
  99.             @Override 
  100.             public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {  
  101.                 // TODO Auto-generated method stub  
  102.  
  103.             }  
  104.  
  105.             @Override 
  106.             public void onGetDrivingRouteResult(MKDrivingRouteResult result,  
  107.                     int arg1) {  
  108.                 if (result == null)  
  109.                     return;  
  110.  
  111.                 RouteOverlay routeOverlay = new RouteOverlay(  
  112.                         BaiduMapRouteOverlayActivity.this, mMapView);  
  113.                 routeOverlay.setData(result.getPlan(0).getRoute(0));  
  114.                 mMapView.getOverlays().add(routeOverlay);  
  115.                 mMapView.refresh();// 刷新地圖  
  116.  
  117.             }  
  118.  
  119.             @Override 
  120.             public void onGetPoiDetailSearchResult(int arg0, int arg1) {  
  121.                 // TODO Auto-generated method stub  
  122.  
  123.             }  
  124.  
  125.             @Override 
  126.             public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {  
  127.                 // TODO Auto-generated method stub  
  128.  
  129.             }  
  130.  
  131.             @Override 
  132.             public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {  
  133.                 // TODO Auto-generated method stub  
  134.  
  135.             }  
  136.  
  137.             @Override 
  138.             public void onGetTransitRouteResult(MKTransitRouteResult result,  
  139.                     int arg1) {  
  140.                 RouteOverlay routeOverlay = new RouteOverlay(  
  141.                         BaiduMapRouteOverlayActivity.this, mMapView);  
  142.                 routeOverlay.setData(result.getPlan(0).getRoute(0));  
  143.                 mMapView.getOverlays().add(routeOverlay);  
  144.                 mMapView.refresh();// 刷新地圖  
  145.  
  146.             }  
  147.  
  148.             @Override 
  149.             public void onGetWalkingRouteResult(MKWalkingRouteResult result,  
  150.                     int arg1) {  
  151.                 // TODO Auto-generated method stub  
  152.                 RouteOverlay routeOverlay = new RouteOverlay(  
  153.                         BaiduMapRouteOverlayActivity.this, mMapView);  
  154.                 routeOverlay.setData(result.getPlan(0).getRoute(0));  
  155.                 mMapView.getOverlays().add(routeOverlay);  
  156.                 mMapView.refresh();// 刷新地圖  
  157.             }  
  158.  
  159.         });  
  160.  
  161.         // 設置駕車路線搜索策略,時間優先、費用最少或距離最短  
  162.  
  163.         /*  
  164.          * // 駕乘檢索策略常量:時間優先  
  165.          * mMKSearch.setDrivingPolicy(MKSearch.ECAR_TIME_FIRST);  
  166.          * mMKSearch.drivingSearch(null, start, null, end);  
  167.          *   
  168.          * // 駕乘檢索策略常量:較少費用 mMKSearch.setDrivingPolicy(MKSearch.ECAR_FEE_FIRST);  
  169.          * mMKSearch.drivingSearch(null, start, null, end);  
  170.          *   
  171.          * // 駕乘檢索策略常量:最短距離 mMKSearch.setDrivingPolicy(MKSearch.ECAR_DIS_FIRST);  
  172.          * mMKSearch.drivingSearch(null, start, null, end);  
  173.          */ 
  174.  
  175.         // 步行線路搜索  
  176.         mMKSearch.walkingSearch(null, start, null, end);  
  177.  
  178.         // 公交線路搜索  
  179.         // mMKSearch.transitSearch("上海市", start, end);  
  180.  
  181.     }  
  182.  
  183.     @Override 
  184.     public void onConfigurationChanged(Configuration newConfig) {  
  185.         super.onConfigurationChanged(newConfig);  
  186.     }  
  187.  
  188.     @Override 
  189.     protected void onSaveInstanceState(Bundle outState) {  
  190.         super.onSaveInstanceState(outState);  
  191.         mMapView.onSaveInstanceState(outState);  
  192.     }  
  193.  
  194.     @Override 
  195.     protected void onRestoreInstanceState(Bundle savedInstanceState) {  
  196.         super.onRestoreInstanceState(savedInstanceState);  
  197.         mMapView.onRestoreInstanceState(savedInstanceState);  
  198.     }  
  199.  
  200.     @Override 
  201.     protected void onResume() {  
  202.         mMapView.onResume();  
  203.  
  204.         if (mMapManager != null) {  
  205.             mMapManager.start();  
  206.         }  
  207.  
  208.         super.onResume();  
  209.     }  
  210.  
  211.     @Override 
  212.     protected void onPause() {  
  213.         mMapView.onPause();  
  214.         if (mMapManager != null) {  
  215.             mMapManager.stop();  
  216.         }  
  217.         super.onPause();  
  218.     }  
  219.  
  220.     @Override 
  221.     protected void onDestroy() {  
  222.         mMapView.destroy();  
  223.         if (mMapManager != null) {  
  224.             mMapManager.destroy();  
  225.             mMapManager = null;  
  226.         }  
  227.         super.onDestroy();  
  228.     }  
  229.  
  230. }  


 

轉自:http://blog.csdn.net/android_ls/article/details/8676771

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved