Android开发之高德API篇:2、高德API线路规划
TIME:2020年7月6日
2、高德API線路規劃----步行線路規劃
- 前言:
- step1 工程配置
- step2 整體實現過程
- step3 具體實現過程
- 總結
- 附上源碼
前言:
該篇博客主要是介紹高德地圖API的線路規劃,在你開始閱讀本篇博客之前,希望各位小哥哥小姐姐們看一下上篇博客“Android開發之高德地圖API篇:1、高德地圖API之實時定位+軌跡可視化”的前言部分,可能他不是你需要的技術,但是我在其中提到了一些思維方法,如果你是小白,希望可以對你有所啟示。
下面這正是開始本篇干貨
step1 工程配置
此處不做介紹,參見Android Studio工程配置
特別說明,我們要使用到的jar包有:
step2 整體實現過程
第 1 步,初始化 RouteSearch 對象
第 2 步,設置數據回調監聽器
第 3 步,設置搜索參數
第 4 步,發送請求
第 5 步,接收數據
該過程來源于官方,便于理解線路規劃的整體思路
詳見:步行線路規劃
自己的理解:
就我個人理解而言,在你設定了起始坐標點和終點坐標點后,通過jar包提供的線路規劃回調方法onWalkRouteSearched()自動規劃出線路;但是在地圖上是無法直接顯示出路徑的,所以我們需要在地圖之上設置圖層,用于顯示路徑;最后就可以得到我們想要的路徑了。
step3 具體實現過程
基本實現思路:
1、初始化AMap對象、MapView對象、RouteSearch對象
2、顯示地圖并進行相關設置
3、注冊監聽
4、開始搜索路徑規劃方案
5、步行路線搜索結果方法回調
基本思路1的實現
private AMap aMap;private MapView mapView;private Context mContext;private RouteSearch mRouteSearch;private WalkRouteResult mWalkRouteResult;基本思路2的實現
/*** 初始化AMap對象*/private void init() {if (aMap == null) {aMap = mapView.getMap();geoMarker = aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f).icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));}search = (Button) findViewById(R.id.search);mWalk = (ImageButton) findViewById(R.id.route_walk);registerListener();mRouteSearch = new RouteSearch(this);mRouteSearch.setRouteSearchListener(this);mBottomLayout = (RelativeLayout) findViewById(R.id.bottom_layout);mBusResultLayout = (LinearLayout) findViewById(R.id.bus_result);mRotueTimeDes = (TextView) findViewById(R.id.firstline);mRouteDetailDes = (TextView) findViewById(R.id.secondline);}基本思路3的實現
/*** 注冊監聽*/private void registerListener() {aMap.setOnMapClickListener(RouteActivity.this);aMap.setOnMarkerClickListener(RouteActivity.this);aMap.setOnInfoWindowClickListener(RouteActivity.this);aMap.setInfoWindowAdapter(RouteActivity.this);search.setOnClickListener(this);mWalk.setOnClickListener(this);//地址編碼geocoderSearch = new GeocodeSearch(this);geocoderSearch.setOnGeocodeSearchListener(this);progDialog = new ProgressDialog(this);}基本思路4的實現
/*** 開始搜索路徑規劃方案*/public void searchRouteResult(int routeType, int mode) {if (mStartPoint == null) {ToastUtil.show(mContext, "起點未設置");return;}if (mEndPoint == null) {ToastUtil.show(mContext, "終點未設置");}showProgressDialog();final RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(mStartPoint, mEndPoint);if (routeType == ROUTE_TYPE_WALK) {// 步行路徑規劃WalkRouteQuery query = new WalkRouteQuery(fromAndTo);mRouteSearch.calculateWalkRouteAsyn(query);// 異步路徑規劃步行模式查詢}}基本思路5的實現
/*** 步行路線搜索結果方法回調*/@Overridepublic void onWalkRouteSearched(WalkRouteResult result, int errorCode) {dissmissProgressDialog();aMap.clear();// 清理地圖上的所有覆蓋物if (errorCode == AMapException.CODE_AMAP_SUCCESS) {if (result != null && result.getPaths() != null) {if (result.getPaths().size() > 0) {mWalkRouteResult = result;final WalkPath walkPath = mWalkRouteResult.getPaths().get(0);if(walkPath == null) {return;}WalkRouteOverlay walkRouteOverlay = new WalkRouteOverlay(this, aMap, walkPath,mWalkRouteResult.getStartPos(),mWalkRouteResult.getTargetPos());walkRouteOverlay.removeFromMap();walkRouteOverlay.addToMap();walkRouteOverlay.zoomToSpan();mBottomLayout.setVisibility(View.VISIBLE);int dis = (int) walkPath.getDistance();int dur = (int) walkPath.getDuration();String des = AMapUtil.getFriendlyTime(dur)+"("+AMapUtil.getFriendlyLength(dis)+")";mRotueTimeDes.setText(des);mRouteDetailDes.setVisibility(View.GONE);mBottomLayout.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(mContext,WalkRouteDetailActivity.class);intent.putExtra("walk_path", walkPath);intent.putExtra("walk_result",mWalkRouteResult);startActivity(intent);}});} else if (result != null && result.getPaths() == null) {ToastUtil.show(mContext, R.string.no_result);}} else {ToastUtil.show(mContext, R.string.no_result);}} else {ToastUtil.showerror(this.getApplicationContext(), errorCode);}}PS:此處只列出重要代碼,其他非重要代碼沒有列出
總結
在重新梳理一遍思路:
1、相關對象的初始化操作
2、獲取地圖并對地圖進行相關設置
3、注冊相關監聽函數
4、開始搜索路徑規劃方案
5、步行路線搜索結果方法回調(4、5可以合在一起,4是自定義的函數)
附上源碼
下載地址
總結
以上是生活随笔為你收集整理的Android开发之高德API篇:2、高德API线路规划的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Google Analytics 跟踪代
- 下一篇: 数据结构之线索二叉树