Android开发之高德API篇:2、高德API线路规划
TIME:2020年7月6日
2、高德API線路規(guī)劃----步行線路規(guī)劃
- 前言:
- step1 工程配置
- step2 整體實現(xiàn)過程
- step3 具體實現(xiàn)過程
- 總結(jié)
- 附上源碼
前言:
該篇博客主要是介紹高德地圖API的線路規(guī)劃,在你開始閱讀本篇博客之前,希望各位小哥哥小姐姐們看一下上篇博客“Android開發(fā)之高德地圖API篇:1、高德地圖API之實時定位+軌跡可視化”的前言部分,可能他不是你需要的技術(shù),但是我在其中提到了一些思維方法,如果你是小白,希望可以對你有所啟示。
下面這正是開始本篇干貨
step1 工程配置
此處不做介紹,參見Android Studio工程配置
特別說明,我們要使用到的jar包有:
step2 整體實現(xiàn)過程
第 1 步,初始化 RouteSearch 對象
第 2 步,設(shè)置數(shù)據(jù)回調(diào)監(jiān)聽器
第 3 步,設(shè)置搜索參數(shù)
第 4 步,發(fā)送請求
第 5 步,接收數(shù)據(jù)
該過程來源于官方,便于理解線路規(guī)劃的整體思路
詳見:步行線路規(guī)劃
自己的理解:
就我個人理解而言,在你設(shè)定了起始坐標(biāo)點和終點坐標(biāo)點后,通過jar包提供的線路規(guī)劃回調(diào)方法onWalkRouteSearched()自動規(guī)劃出線路;但是在地圖上是無法直接顯示出路徑的,所以我們需要在地圖之上設(shè)置圖層,用于顯示路徑;最后就可以得到我們想要的路徑了。
step3 具體實現(xiàn)過程
基本實現(xiàn)思路:
1、初始化AMap對象、MapView對象、RouteSearch對象
2、顯示地圖并進(jìn)行相關(guān)設(shè)置
3、注冊監(jiān)聽
4、開始搜索路徑規(guī)劃方案
5、步行路線搜索結(jié)果方法回調(diào)
基本思路1的實現(xiàn)
private AMap aMap;private MapView mapView;private Context mContext;private RouteSearch mRouteSearch;private WalkRouteResult mWalkRouteResult;基本思路2的實現(xiàn)
/*** 初始化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的實現(xiàn)
/*** 注冊監(jiān)聽*/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的實現(xiàn)
/*** 開始搜索路徑規(guī)劃方案*/public void searchRouteResult(int routeType, int mode) {if (mStartPoint == null) {ToastUtil.show(mContext, "起點未設(shè)置");return;}if (mEndPoint == null) {ToastUtil.show(mContext, "終點未設(shè)置");}showProgressDialog();final RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(mStartPoint, mEndPoint);if (routeType == ROUTE_TYPE_WALK) {// 步行路徑規(guī)劃WalkRouteQuery query = new WalkRouteQuery(fromAndTo);mRouteSearch.calculateWalkRouteAsyn(query);// 異步路徑規(guī)劃步行模式查詢}}基本思路5的實現(xiàn)
/*** 步行路線搜索結(jié)果方法回調(diào)*/@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:此處只列出重要代碼,其他非重要代碼沒有列出
總結(jié)
在重新梳理一遍思路:
1、相關(guān)對象的初始化操作
2、獲取地圖并對地圖進(jìn)行相關(guān)設(shè)置
3、注冊相關(guān)監(jiān)聽函數(shù)
4、開始搜索路徑規(guī)劃方案
5、步行路線搜索結(jié)果方法回調(diào)(4、5可以合在一起,4是自定義的函數(shù))
附上源碼
下載地址
總結(jié)
以上是生活随笔為你收集整理的Android开发之高德API篇:2、高德API线路规划的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Google Analytics 跟踪代
- 下一篇: 数据结构之线索二叉树