• 安卓百度地图之步行路径规划


    使用的是百度地图的API,地址是:androidsdk | 百度地图API SDK

    步骤一:配置build.gradle

    dependencies {
       
        implementation 'com.baidu.lbsyun:BaiduMapSDK_Location:9.1.8'
        compile 'com.baidu.lbsyun:BaiduMapSDK_Map:7.4.0'
        compile 'com.baidu.lbsyun:BaiduMapSDK_Search:7.4.0'
    }
    

    步骤二:创建路线规划检索实例

    mSearch = RoutePlanSearch.newInstance();

    步骤三:创建路线规划检索结果监听器

    OnGetRoutePlanResultListener listener = new OnGetRoutePlanResultListener() {
        @Override
        public void onGetWalkingRouteResult(WalkingRouteResult walkingRouteResult) {
            //创建WalkingRouteOverlay实例
            WalkingRouteOverlay overlay = new WalkingRouteOverlay(mBaiduMap);
            if (walkingRouteResult.getRouteLines().size() > 0) {
                //获取路径规划数据,(以返回的第一条数据为例)
                //为WalkingRouteOverlay实例设置路径数据
                overlay.setData(walkingRouteResult.getRouteLines().get(0));
                //在地图上绘制WalkingRouteOverlay
                overlay.addToMap();
            }
        }
        ......
    };

    全部代码:

    1. package com.meal;
    2. import android.app.AlertDialog;
    3. import android.content.Context;
    4. import android.content.DialogInterface;
    5. import android.os.Bundle;
    6. import android.os.Handler;
    7. import android.text.TextUtils;
    8. import android.util.Log;
    9. import android.view.View;
    10. import android.view.inputmethod.InputMethodManager;
    11. import android.widget.Button;
    12. import android.widget.EditText;
    13. import android.widget.ImageView;
    14. import android.widget.LinearLayout;
    15. import android.widget.TextView;
    16. import com.baidu.mapapi.map.BaiduMap;
    17. import com.baidu.mapapi.map.BitmapDescriptor;
    18. import com.baidu.mapapi.map.BitmapDescriptorFactory;
    19. import com.baidu.mapapi.map.MapView;
    20. import com.baidu.mapapi.model.LatLng;
    21. import com.baidu.mapapi.search.core.RouteLine;
    22. import com.baidu.mapapi.search.core.SearchResult;
    23. import com.baidu.mapapi.search.route.BikingRouteResult;
    24. import com.baidu.mapapi.search.route.DrivingRouteResult;
    25. import com.baidu.mapapi.search.route.IndoorRouteResult;
    26. import com.baidu.mapapi.search.route.MassTransitRouteResult;
    27. import com.baidu.mapapi.search.route.OnGetRoutePlanResultListener;
    28. import com.baidu.mapapi.search.route.PlanNode;
    29. import com.baidu.mapapi.search.route.RoutePlanSearch;
    30. import com.baidu.mapapi.search.route.TransitRouteResult;
    31. import com.baidu.mapapi.search.route.WalkingRoutePlanOption;
    32. import com.baidu.mapapi.search.route.WalkingRouteResult;
    33. import com.map.WalkingRouteOverlay;
    34. import com.pony.base.BaseActivity;
    35. import com.pony.config.Consts;
    36. import com.pony.db.MemberUserUtils;
    37. import com.pony.model.ChoiceAddressModel;
    38. import com.pony.model.OrderModel;
    39. import com.pony.model.ResponseEntry;
    40. import com.pony.util.ToastUtil;
    41. import com.pony.view.CustomToast;
    42. import net.tsz.afinal.http.AjaxParams;
    43. import java.util.HashMap;
    44. public class ShowLineActivity extends BaseActivity implements OnGetRoutePlanResultListener {
    45. // title
    46. private TextView mTvTitle, setting_text;
    47. // 返回
    48. private ImageView mIvBack;
    49. // 查询按钮
    50. private MapView mMapView = null;
    51. private BaiduMap baiduMap;
    52. LinearLayout mllGoBuy;
    53. @Override
    54. protected void onCreate(Bundle savedInstanceState) {
    55. super.onCreate(savedInstanceState);
    56. setContentView(R.layout.activity_showline);
    57. initWidget();
    58. initData();
    59. }
    60. @Override
    61. public void initWidget() {
    62. mMapView = (MapView) findViewById(R.id.bmapView);
    63. baiduMap = mMapView.getMap();
    64. setting_text = (TextView) findViewById(R.id.setting_text);
    65. mIvBack = (ImageView) findViewById(R.id.mIvBack);
    66. mTvTitle = (TextView) findViewById(R.id.mTvTitle);
    67. mTvTitle.setText("显示线路");
    68. mIvBack.setVisibility(View.VISIBLE);
    69. mIvBack.setOnClickListener(this);
    70. mllGoBuy = (LinearLayout) findViewById(R.id.mllGoBuy);
    71. mllGoBuy.setOnClickListener(this);
    72. }
    73. // 搜索模块,也可去掉地图模块独立使用
    74. private RoutePlanSearch mSearch = null;
    75. private WalkingRouteResult mWalkingRouteResult = null;
    76. private RouteLine mRouteLine = null;
    77. ChoiceAddressModel startInfor;
    78. ChoiceAddressModel endInfor;
    79. @Override
    80. public void initData() {
    81. String startInfor = this.getIntent().getStringExtra("startInfor");
    82. String endInfor = this.getIntent().getStringExtra("endInfor");
    83. LatLng mStartPoint = new LatLng(Double.valueOf(startInfor.split(",")[0]), Double.valueOf(startInfor.split(",")[1]));
    84. LatLng mEndPoint = new LatLng(Double.valueOf(endInfor.split(",")[0]), Double.valueOf(endInfor.split(",")[1]));
    85. // 初始化搜索模块,注册事件监听
    86. mSearch = RoutePlanSearch.newInstance();
    87. mSearch.setOnGetRoutePlanResultListener(this);
    88. // // 设置起终点信息 起点参数
    89. PlanNode startNode = PlanNode.withLocation(mStartPoint);
    90. // 终点参数
    91. PlanNode endNode = PlanNode.withLocation(mEndPoint);
    92. //
    93. // // 实际使用中请对起点终点城市进行正确的设定
    94. mSearch.walkingSearch((new WalkingRoutePlanOption())
    95. .from(startNode) // 起点
    96. .to(endNode)); // 终点
    97. }
    98. @Override
    99. public void onClick(View v) {
    100. switch (v.getId()) {
    101. case R.id.mIvBack:
    102. ShowLineActivity.this.finish();
    103. break;
    104. case R.id.mllGoBuy:
    105. addOrder(true);
    106. break;
    107. }
    108. }
    109. /**
    110. * 订单的添加
    111. *
    112. * @param isShow
    113. */
    114. private void addOrder(boolean isShow) {
    115. AjaxParams params = new AjaxParams();
    116. params.put("action_flag", "addOrder");
    117. params.put("orderStartLatLng", this.getIntent().getStringExtra("startInfor"));
    118. params.put("orderEndLatLng", this.getIntent().getStringExtra("endInfor"));
    119. params.put("orderAddressStart", this.getIntent().getStringExtra("startAddress"));
    120. params.put("orderAddressEnd", this.getIntent().getStringExtra("endAddress"));
    121. params.put("orderLongTime", distanceInfor / 60 + "分钟");
    122. params.put("orderDistance", distanceInfor + "米");
    123. params.put("orderUserId", MemberUserUtils.getUid(this));
    124. params.put("orderUserName", MemberUserUtils.getName(this));
    125. httpPost(Consts.URL + Consts.APP.MessageAction, params, Consts.actionId.resultFlag, isShow, "正在加载...");
    126. }
    127. @Override
    128. protected void callBackSuccess(ResponseEntry entry, int actionId) {
    129. super.callBackSuccess(entry, actionId);
    130. CustomToast.showToast(this, "保存成功");
    131. new Handler().postDelayed(new Runnable() {
    132. @Override
    133. public void run() {
    134. finish();
    135. }
    136. }, 2000);
    137. }
    138. @Override
    139. protected void callBackAllFailure(String strMsg, int actionId) {
    140. super.callBackAllFailure(strMsg, actionId);
    141. ToastUtil.show(this, strMsg);
    142. }
    143. double distanceInfor;
    144. @Override
    145. public void onGetWalkingRouteResult(WalkingRouteResult walkingRouteResult) {
    146. if (walkingRouteResult.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
    147. AlertDialog.Builder builder = new AlertDialog.Builder(this);
    148. builder.setTitle("提示");
    149. builder.setMessage("检索地址有歧义,请重新设置。\n可通过getSuggestAddrInfo()接口获得建议查询信息");
    150. builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
    151. @Override
    152. public void onClick(DialogInterface dialog, int which) {
    153. dialog.dismiss();
    154. }
    155. });
    156. builder.create().show();
    157. return;
    158. }
    159. Log.i("pony_log", walkingRouteResult.getRouteLines().size() + "");
    160. WalkingRouteOverlay overlay = new WalkingRouteOverlay(baiduMap);
    161. if (walkingRouteResult.getRouteLines().size() > 0) {
    162. distanceInfor = walkingRouteResult.getRouteLines().get(0).getDistance();
    163. Log.i("pony_log", walkingRouteResult.getRouteLines().get(0).getDistance() + "");
    164. setting_text.setText("路径时间:" + walkingRouteResult.getRouteLines().get(0).getDistance() / 60 + "分钟");
    165. //获取路径规划数据,(以返回的第一条数据为例)
    166. //为WalkingRouteOverlay实例设置路径数据
    167. overlay.setData(walkingRouteResult.getRouteLines().get(0));
    168. //在地图上绘制WalkingRouteOverlay
    169. overlay.addToMap();
    170. overlay.zoomToSpan();
    171. }
    172. }
    173. @Override
    174. public void onGetTransitRouteResult(TransitRouteResult transitRouteResult) {
    175. }
    176. @Override
    177. public void onGetMassTransitRouteResult(MassTransitRouteResult massTransitRouteResult) {
    178. }
    179. @Override
    180. public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) {
    181. }
    182. @Override
    183. public void onGetIndoorRouteResult(IndoorRouteResult indoorRouteResult) {
    184. }
    185. @Override
    186. public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) {
    187. }
    188. private boolean mUseDefaultIcon = false;
    189. private class MyWalkingRouteOverlay extends WalkingRouteOverlay {
    190. private MyWalkingRouteOverlay(BaiduMap baiduMap) {
    191. super(baiduMap);
    192. }
    193. @Override
    194. public BitmapDescriptor getStartMarker() {
    195. if (mUseDefaultIcon) {
    196. return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);
    197. }
    198. return null;
    199. }
    200. @Override
    201. public BitmapDescriptor getTerminalMarker() {
    202. if (mUseDefaultIcon) {
    203. return BitmapDescriptorFactory.fromResource(R.drawable.icon_en);
    204. }
    205. return null;
    206. }
    207. }
    208. }

  • 相关阅读:
    Flutter学习笔记
    Java基础——Java的输入(Scanner对象的使用)
    微信小程序手写签名
    技术分享 | app自动化测试(Android)--元素定位方式与隐式等待
    HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Text
    AWD常见防御加固手段
    使用ZIP包安装MySQL及配置教程
    ROW_NUMBER 开窗函数优化方案(Oracle && KingBase 性能比对)
    使用telnet和ssh登录linux
    在Mac m1运行ChatGLM3-6B cpu版本1-3秒出结果,速度明显超过T4 GPU,接近V100。
  • 原文地址:https://blog.csdn.net/u014388322/article/details/128167120