Android百度地图——路径规划(驾车、步行和公交线路搜索)

分类: Android百度地图 419人阅读 评论(2) 收藏 举报 ANDROID 百度地图 路径规划 驾车步行和公交线路搜索

前段时间公司项目比较忙,百度地图这块拖了好久了,这篇续前面几篇有关百度地图的。好了废话不多说,今天要聊的是有关路径规划的,如何使用百度地图搜索驾车、步行和公交路线并标注在地图上。这篇是基于Android百度地图——搜索服务之周边检索,有什么不清楚的请查看前面的几篇博文。路径规划:从那里到那里的线路规划,比如:从上海市盛夏路益江路到陆家嘴的驾车、步行和公交路线。

一、从那里到那里:

1、起始地点:

[java] view plain copy print ?
  1. //上海市盛夏路益江路的GPS纬度经度值:121.637942,31.205889
  2. MKPlanNodestart=newMKPlanNode();
  3. start.pt=newGeoPoint((int)(31.205889*1E6),(int)(121.637942*1E6));
 // 上海市盛夏路益江路的GPS纬度经度值:121.637942,31.205889         MKPlanNode start = new MKPlanNode();        start.pt = new GeoPoint((int) (31.205889 * 1E6), (int) (121.637942 * 1E6));

2、目的地点:

[java] view plain copy print ?
  1. //上海市陆家嘴的GPS纬度经度值:121.509075,31.243319
  2. MKPlanNodeend=newMKPlanNode();
  3. end.pt=newGeoPoint((int)(31.243319*1E6),(int)(121.509075*1E6));
 // 上海市陆家嘴的GPS纬度经度值: 121.509075,31.243319         MKPlanNode end = new MKPlanNode();        end.pt = new GeoPoint( (int) (31.243319 * 1E6), (int) (121.509075 * 1E6));

注:获取地点的GPS值可以到http://api.map.baidu.com/lbsapi/getpoint/index.html查询,要注意拿到的值的顺序获取到的值是经纬度(也就是说第一个表示的是经度值,第二个表示的是纬度值)。而我们在地图上查找或标注时使用的顺序是GPS纬度经度值,因此记得调整顺序,不然在百度地图上就显示不出来。

二、如何到达,怎样到达:

1、驾车线路:

驾乘检索策略常量:时间优先

[java] view plain copy print ?
  1. mMKSearch.setDrivingPolicy(MKSearch.ECAR_TIME_FIRST);
  2. mMKSearch.drivingSearch(null,start,null,end);
mMKSearch.setDrivingPolicy(MKSearch.ECAR_TIME_FIRST); mMKSearch.drivingSearch(null, start, null, end);

驾乘检索策略常量:较少费用

[java] view plain copy print ?
  1. mMKSearch.setDrivingPolicy(MKSearch.ECAR_FEE_FIRST);
  2. mMKSearch.drivingSearch(null,start,null,end);
mMKSearch.setDrivingPolicy(MKSearch.ECAR_FEE_FIRST);        mMKSearch.drivingSearch(null, start, null, end);

驾乘检索策略常量:最短距离

[java] view plain copy print ?
  1. mMKSearch.setDrivingPolicy(MKSearch.ECAR_DIS_FIRST);
  2. mMKSearch.drivingSearch(null,start,null,end);
mMKSearch.setDrivingPolicy(MKSearch.ECAR_DIS_FIRST);        mMKSearch.drivingSearch(null, start, null, end);

获取结果并展示时,需要实现MKSearchListener接口中的onGetDrivingRouteResult方法 :

[java] view plain copy print ?
  1. @Override
  2. publicvoidonGetDrivingRouteResult(MKDrivingRouteResultresult,intarg1){
  3. if(result==null)
  4. return;
  5. RouteOverlayrouteOverlay=newRouteOverlay(BaiduMapRouteOverlayActivity.this,mMapView);
  6. routeOverlay.setData(result.getPlan(0).getRoute(0));
  7. mMapView.getOverlays().add(routeOverlay);
  8. mMapView.refresh();//刷新地图
  9. }
    @Override            public void onGetDrivingRouteResult(MKDrivingRouteResult result, int arg1) {                if (result == null)                    return;                                RouteOverlay routeOverlay = new RouteOverlay(BaiduMapRouteOverlayActivity.this, mMapView);                                   routeOverlay.setData(result.getPlan(0).getRoute(0));                 mMapView.getOverlays().add(routeOverlay);                mMapView.refresh();//刷新地图                            }

2、步行线路:

[java] view plain copy print ?
  1. //步行线路搜索
  2. mMKSearch.walkingSearch(null,start,null,end);
 // 步行线路搜索        mMKSearch.walkingSearch(null, start, null, end);


获取结果并展示时,需要实现MKSearchListener接口中的onGetWalkingRouteResult方法

[java] view plain copy print ?
  1. @Override
  2. publicvoidonGetWalkingRouteResult(MKWalkingRouteResultresult,intarg1){
  3. //TODOAuto-generatedmethodstub
  4. RouteOverlayrouteOverlay=newRouteOverlay(BaiduMapRouteOverlayActivity.this,mMapView);
  5. routeOverlay.setData(result.getPlan(0).getRoute(0));
  6. mMapView.getOverlays().add(routeOverlay);
  7. mMapView.refresh();//刷新地图
  8. }
 @Override            public void onGetWalkingRouteResult(MKWalkingRouteResult result, int arg1) {                // TODO Auto-generated method stub             RouteOverlay routeOverlay = new RouteOverlay(BaiduMapRouteOverlayActivity.this, mMapView);                    routeOverlay.setData(result.getPlan(0).getRoute(0));                  mMapView.getOverlays().add(routeOverlay);                 mMapView.refresh();//刷新地图            }

3、公交线路:

公交线路搜索的方法为transitSearch(String city, MKPlanNode start, MKPlanNode end),city:为待查公交线路所在城市,start和end分别是起点和终点;获取结果的方法改为重写onGetTransitRouteResult方法。

[java] view plain copy print ?
  1. //公交线路搜索
  2. mMKSearch.transitSearch("上海市",start,end);
      // 公交线路搜索        mMKSearch.transitSearch("上海市", start, end);

获取结果:

[java] view plain copy print ?
  1. @Override
  2. publicvoidonGetTransitRouteResult(MKTransitRouteResultresult,intarg1){
  3. RouteOverlayrouteOverlay=newRouteOverlay(BaiduMapRouteOverlayActivity.this,mMapView);
  4. routeOverlay.setData(result.getPlan(0).getRoute(0));
  5. mMapView.getOverlays().add(routeOverlay);
  6. mMapView.refresh();//刷新地图
  7. }
  @Override            public void onGetTransitRouteResult(MKTransitRouteResult result, int arg1) {             RouteOverlay routeOverlay = new RouteOverlay(BaiduMapRouteOverlayActivity.this, mMapView);                    routeOverlay.setData(result.getPlan(0).getRoute(0));                  mMapView.getOverlays().add(routeOverlay);                 mMapView.refresh();//刷新地图                             }

四、完整代码:

[java] view plain copy print ?
  1. packagecom.android.baidu.map;
  2. importandroid.app.Activity;
  3. importandroid.content.Context;
  4. importandroid.content.res.Configuration;
  5. importandroid.os.Bundle;
  6. importandroid.widget.Toast;
  7. importcom.baidu.mapapi.BMapManager;
  8. importcom.baidu.mapapi.MKGeneralListener;
  9. importcom.baidu.mapapi.map.MKEvent;
  10. importcom.baidu.mapapi.map.MapController;
  11. importcom.baidu.mapapi.map.MapView;
  12. importcom.baidu.mapapi.map.RouteOverlay;
  13. importcom.baidu.mapapi.search.MKAddrInfo;
  14. importcom.baidu.mapapi.search.MKBusLineResult;
  15. importcom.baidu.mapapi.search.MKDrivingRouteResult;
  16. importcom.baidu.mapapi.search.MKPlanNode;
  17. importcom.baidu.mapapi.search.MKPoiResult;
  18. importcom.baidu.mapapi.search.MKSearch;
  19. importcom.baidu.mapapi.search.MKSearchListener;
  20. importcom.baidu.mapapi.search.MKSuggestionResult;
  21. importcom.baidu.mapapi.search.MKTransitRouteResult;
  22. importcom.baidu.mapapi.search.MKWalkingRouteResult;
  23. importcom.baidu.platform.comapi.basestruct.GeoPoint;
  24. publicclassBaiduMapRouteOverlayActivityextendsActivity{
  25. publicstaticfinalStringBAIDU_MAP_KEY="07418AEC69BAAB7104C6230A6120C580DFFAEEBB";
  26. privateBMapManagermMapManager=null;
  27. privateMapViewmMapView=null;
  28. privateMKSearchmMKSearch=null;
  29. privateContextmContext;
  30. @Override
  31. publicvoidonCreate(BundlesavedInstanceState){
  32. super.onCreate(savedInstanceState);
  33. mContext=BaiduMapRouteOverlayActivity.this.getApplicationContext();
  34. mMapManager=newBMapManager(getApplicationContext());
  35. mMapManager.init(BAIDU_MAP_KEY,newMKGeneralListener(){
  36. @Override
  37. publicvoidonGetNetworkState(interrorCode){
  38. if(errorCode==MKEvent.ERROR_NETWORK_CONNECT){
  39. Toast.makeText(mContext,"您的网络出错啦!",Toast.LENGTH_LONG)
  40. .show();
  41. }
  42. }
  43. @Override
  44. publicvoidonGetPermissionState(interrorCode){
  45. if(errorCode==MKEvent.ERROR_PERMISSION_DENIED){
  46. //授权Key错误:
  47. Toast.makeText(mContext,
  48. "请在DemoApplication.java文件输入正确的授权Key!",
  49. Toast.LENGTH_LONG).show();
  50. }
  51. }
  52. });
  53. setContentView(R.layout.main);
  54. mMapView=(MapView)this.findViewById(R.id.bmapsView);
  55. mMapView.setBuiltInZoomControls(true);
  56. MapControllermMapController=mMapView.getController();
  57. //上海市的GPS纬度经度值:31.243319,121.509075
  58. GeoPointgeoPoint=newGeoPoint((int)(31.243319*1E6),
  59. (int)(121.509075*1E6));
  60. mMapController.setCenter(geoPoint);
  61. mMapController.setZoom(12);
  62. //检索从上海市盛夏路益江路到陆家嘴的驾车路线
  63. //上海市盛夏路益江路的GPS纬度经度值:121.637942,31.205889
  64. MKPlanNodestart=newMKPlanNode();
  65. start.pt=newGeoPoint((int)(31.205889*1E6),
  66. (int)(121.637942*1E6));
  67. //上海市陆家嘴的GPS纬度经度值:121.509075,31.243319
  68. MKPlanNodeend=newMKPlanNode();
  69. end.pt=newGeoPoint((int)(31.243319*1E6),(int)(121.509075*1E6));
  70. mMKSearch=newMKSearch();
  71. mMKSearch.init(mMapManager,newMKSearchListener(){
  72. @Override
  73. publicvoidonGetAddrResult(MKAddrInfoarg0,intarg1){
  74. //TODOAuto-generatedmethodstub
  75. }
  76. @Override
  77. publicvoidonGetBusDetailResult(MKBusLineResultarg0,intarg1){
  78. //TODOAuto-generatedmethodstub
  79. }
  80. @Override
  81. publicvoidonGetDrivingRouteResult(MKDrivingRouteResultresult,
  82. intarg1){
  83. if(result==null)
  84. return;
  85. RouteOverlayrouteOverlay=newRouteOverlay(
  86. BaiduMapRouteOverlayActivity.this,mMapView);
  87. routeOverlay.setData(result.getPlan(0).getRoute(0));
  88. mMapView.getOverlays().add(routeOverlay);
  89. mMapView.refresh();//刷新地图
  90. }
  91. @Override
  92. publicvoidonGetPoiDetailSearchResult(intarg0,intarg1){
  93. //TODOAuto-generatedmethodstub
  94. }
  95. @Override
  96. publicvoidonGetPoiResult(MKPoiResultarg0,intarg1,intarg2){
  97. //TODOAuto-generatedmethodstub
  98. }
  99. @Override
  100. publicvoidonGetSuggestionResult(MKSuggestionResultarg0,intarg1){
  101. //TODOAuto-generatedmethodstub
  102. }
  103. @Override
  104. publicvoidonGetTransitRouteResult(MKTransitRouteResultresult,
  105. intarg1){
  106. RouteOverlayrouteOverlay=newRouteOverlay(
  107. BaiduMapRouteOverlayActivity.this,mMapView);
  108. routeOverlay.setData(result.getPlan(0).getRoute(0));
  109. mMapView.getOverlays().add(routeOverlay);
  110. mMapView.refresh();//刷新地图
  111. }
  112. @Override
  113. publicvoidonGetWalkingRouteResult(MKWalkingRouteResultresult,
  114. intarg1){
  115. //TODOAuto-generatedmethodstub
  116. RouteOverlayrouteOverlay=newRouteOverlay(
  117. BaiduMapRouteOverlayActivity.this,mMapView);
  118. routeOverlay.setData(result.getPlan(0).getRoute(0));
  119. mMapView.getOverlays().add(routeOverlay);
  120. mMapView.refresh();//刷新地图
  121. }
  122. });
  123. //设置驾车路线搜索策略,时间优先、费用最少或距离最短
  124. /*
  125. *//驾乘检索策略常量:时间优先
  126. *mMKSearch.setDrivingPolicy(MKSearch.ECAR_TIME_FIRST);
  127. *mMKSearch.drivingSearch(null,start,null,end);
  128. *
  129. *//驾乘检索策略常量:较少费用mMKSearch.setDrivingPolicy(MKSearch.ECAR_FEE_FIRST);
  130. *mMKSearch.drivingSearch(null,start,null,end);
  131. *
  132. *//驾乘检索策略常量:最短距离mMKSearch.setDrivingPolicy(MKSearch.ECAR_DIS_FIRST);
  133. *mMKSearch.drivingSearch(null,start,null,end);
  134. */
  135. //步行线路搜索
  136. mMKSearch.walkingSearch(null,start,null,end);
  137. //公交线路搜索
  138. //mMKSearch.transitSearch("上海市",start,end);
  139. }
  140. @Override
  141. publicvoidonConfigurationChanged(ConfigurationnewConfig){
  142. super.onConfigurationChanged(newConfig);
  143. }
  144. @Override
  145. protectedvoidonSaveInstanceState(BundleoutState){
  146. super.onSaveInstanceState(outState);
  147. mMapView.onSaveInstanceState(outState);
  148. }
  149. @Override
  150. protectedvoidonRestoreInstanceState(BundlesavedInstanceState){
  151. super.onRestoreInstanceState(savedInstanceState);
  152. mMapView.onRestoreInstanceState(savedInstanceState);
  153. }
  154. @Override
  155. protectedvoidonResume(){
  156. mMapView.onResume();
  157. if(mMapManager!=null){
  158. mMapManager.start();
  159. }
  160. super.onResume();
  161. }
  162. @Override
  163. protectedvoidonPause(){
  164. mMapView.onPause();
  165. if(mMapManager!=null){
  166. mMapManager.stop();
  167. }
  168. super.onPause();
  169. }
  170. @Override
  171. protectedvoidonDestroy(){
  172. mMapView.destroy();
  173. if(mMapManager!=null){
  174. mMapManager.destroy();
  175. mMapManager=null;
  176. }
  177. super.onDestroy();
  178. }
  179. }

更多相关文章

  1. Android引路蜂地图开发包
  2. Android(安卓)SDCard操作(文件读写,容量计算)
  3. android百度地图 覆盖物弹出层效果
  4. 根据百度地图API得到坐标和地址并在地图上显示
  5. Arcgis Android(安卓)基本概念 - 浅谈
  6. 一步步教你用Android(安卓)Google Map
  7. android 选择本地图片并预览
  8. Android使用百度地图SDK获得当前设备位置所在的省、市(系列1)
  9. android 百度地图轨迹回放

随机推荐

  1. android 4中新增的日历处理相关API
  2. Android(安卓)实现联网——在线程中联网
  3. Android网络连接处理学习笔记
  4. Android多屏幕适配
  5. Android(安卓)SQLite Shell
  6. Android中文API(143) —— CountDownTimer
  7. Android中使用查找提示
  8. Android(安卓)Juint环境配置
  9. Android(安卓)adb 模拟滑动 按键 点击事
  10. Android(安卓)保存图片到相册无法显示的