Android 高德地图 步行 路线规划

路线规划就是给设置一个监听,里面有步行规划,骑车,驾车,公交等线路的规划 第 1 步,初始化对象
= new (this);
第 2 步,设置数据回调监听器
.er(this);
第 3 步,设置搜索参数
通过 (. , int mode) 设置搜索条件 。其中:
,路径的起终点;
mode,计算路径的模式 。SDK提供两种模式:. 和 . 。

Android 高德地图 步行 路线规划

文章插图
//初始化query对象,是包含起终点信息,是步行路径规划的模式
query = new (, );
第 4 步,发送请求
使用类的 yn( query) 方法进行步行规划路径计算 。
.yn(query);//开始算路
第 5 步,接收数据
在 .r 接口回调方法 void ( ,int rCode) 处理步行规划路径结果 。返回的信息中您可以获得路段的距离、步行的预计时间、步行路段的坐标点、步行路段的道路名称、导航主要操作等信息 。显示效果如下:
Android 高德地图 步行 路线规划

文章插图
说明:
1)可以在回调中解析,获取骑行的路径 。
2).()可以获取到列表,步行路径的详细信息可参考类 。
3)返回结果成功或者失败的响应码 。1000为成功,其他为失败(详细信息参见网站开发指南-实用工具-错误码对照表)
下面一个步行规划的图:
Android 高德地图 步行 路线规划

文章插图
主要的方法
【Android 高德地图 步行 路线规划】public class MainActivity extends Activity implements AMap.OnMapClickListener,AMap.OnMarkerClickListener, AMap.OnInfoWindowClickListener, AMap.InfoWindowAdapter, RouteSearch.OnRouteSearchListener {private AMap aMap;private MapView mapView;private Context mContext;private RouteSearch mRouteSearch;private WalkRouteResult mWalkRouteResult;private LatLonPoint mStartPoint = new LatLonPoint(39.942295, 116.335891);//起点,116.335891,39.942295private LatLonPoint mEndPoint = new LatLonPoint(39.995576, 116.481288);//终点,116.481288,39.995576private final int ROUTE_TYPE_WALK = 3;private RelativeLayout mBottomLayout, mHeadLayout;private TextView mRotueTimeDes, mRouteDetailDes;private ProgressDialog progDialog = null;// 搜索时进度条@Overrideprotected void onCreate(Bundle bundle) {super.onCreate(bundle);setContentView(R.layout.activity_main);mContext = this.getApplicationContext();mapView = (MapView) findViewById(R.id.route_map);mapView.onCreate(bundle);// 此方法必须重写init();setfromandtoMarker();searchRouteResult(ROUTE_TYPE_WALK, RouteSearch.WalkDefault);}private void setfromandtoMarker() {aMap.addMarker(new MarkerOptions().position(AMapUtil.convertToLatLng(mStartPoint)).icon(BitmapDescriptorFactory.fromResource(R.drawable.start)));aMap.addMarker(new MarkerOptions().position(AMapUtil.convertToLatLng(mEndPoint)).icon(BitmapDescriptorFactory.fromResource(R.drawable.end)));}/*** 初始化AMap对象*/private void init() {if (aMap == null) {aMap = mapView.getMap();}registerListener();mRouteSearch = new RouteSearch(this);mRouteSearch.setRouteSearchListener(this);mBottomLayout = (RelativeLayout) findViewById(R.id.bottom_layout);mHeadLayout = (RelativeLayout) findViewById(R.id.routemap_header);mHeadLayout.setVisibility(View.GONE);mRotueTimeDes = (TextView) findViewById(R.id.firstline);mRouteDetailDes = (TextView) findViewById(R.id.secondline);}/*** 注册监听*/private void registerListener() {aMap.setOnMapClickListener(this);aMap.setOnMarkerClickListener(this);aMap.setOnInfoWindowClickListener(this);aMap.setInfoWindowAdapter(this);}@Overridepublic View getInfoContents(Marker arg0) {// TODO Auto-generated method stubreturn null;}@Overridepublic View getInfoWindow(Marker arg0) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onInfoWindowClick(Marker arg0) {// TODO Auto-generated method stub}@Overridepublic boolean onMarkerClick(Marker arg0) {// TODO Auto-generated method stubreturn false;}@Overridepublic void onMapClick(LatLng arg0) {// TODO Auto-generated method stub}/*** 开始搜索路径规划方案*/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) {// 步行路径规划RouteSearch.WalkRouteQuery query = new RouteSearch.WalkRouteQuery(fromAndTo, mode);mRouteSearch.calculateWalkRouteAsyn(query);// 异步路径规划步行模式查询}}@Overridepublic void onBusRouteSearched(BusRouteResult result, int errorCode) {//公交的路线规划}@Overridepublic void onDriveRouteSearched(DriveRouteResult result, int errorCode) {//自驾的路线 }@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);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 View.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);}}/*** 显示进度框*/private void showProgressDialog() {if (progDialog == null)progDialog = new ProgressDialog(this);progDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);progDialog.setIndeterminate(false);progDialog.setCancelable(true);progDialog.setMessage("正在搜索");progDialog.show();}/*** 隐藏进度框*/private void dissmissProgressDialog() {if (progDialog != null) {progDialog.dismiss();}}/*** 方法必须重写*/@Overrideprotected void onResume() {super.onResume();mapView.onResume();}/*** 方法必须重写*/@Overrideprotected void onPause() {super.onPause();mapView.onPause();}/*** 方法必须重写*/@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mapView.onSaveInstanceState(outState);}/*** 方法必须重写*/@Overrideprotected void onDestroy() {super.onDestroy();mapView.onDestroy();}@Overridepublic void onRideRouteSearched(RideRouteResult arg0, int arg1) {// TODO Auto-generated method stub}}