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的实现
1
2
3
4
5
6private AMap aMap; private MapView mapView; private Context mContext; private RouteSearch mRouteSearch; private WalkRouteResult mWalkRouteResult;
基本思路2的实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24/** * 初始化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的实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17/** * 注册监听 */ 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的实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20/** * 开始搜索路径规划方案 */ 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的实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52/** * 步行路线搜索结果方法回调 */ @Override public 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() { @Override public 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线路规划前言:step1 工程配置step2 整体实现过程step3 具体实现过程总结附上源码的全部内容,更多相关Android开发之高德API篇:2、高德API线路规划前言:step1内容请搜索靠谱客的其他文章。
发表评论 取消回复