android 步行距离,Android 高德地图 步行 路线规划
路线规划就是给RouteSearch设置一个监听,里面有步行规划,骑车,驾车,公交等线路的规划
第 1 步,初始化 RouteSearch 对象
routeSearch = new RouteSearch(this);
第 2 步,设置数据回调监听器
routeSearch.setRouteSearchListener(this);
第 3 步,设置搜索参数
通过 WalkRouteQuery(RouteSearch.FromAndTo fromAndTo, int mode) 设置搜索条件。其中:
fromAndTo,路径的起终点;
mode,计算路径的模式。SDK提供两种模式:RouteSearch.WALK_DEFAULT 和 RouteSearch.WALK_MULTI_PATH。
//初始化query对象,fromAndTo是包含起终点信息,walkMode是步行路径规划的模式
WalkRouteQuery query = new WalkRouteQuery(fromAndTo, walkMode);
第 4 步,发送请求
使用类 RouteSearch 的 calculateWalkRouteAsyn(WalkRouteQuery query) 方法进行步行规划路径计算。
routeSearch.calculateWalkRouteAsyn(query);//开始算路
第 5 步,接收数据
在 RouteSearch.OnRouteSearchListener 接口回调方法 void onWalkRouteSearched(WalkRouteResult walkRouteResult,int rCode) 处理步行规划路径结果。返回的信息中您可以获得路段的距离、步行的预计时间、步行路段的坐标点、步行路段的道路名称、导航主要操作等信息。显示效果如下:
说明:
1)可以在回调中解析result,获取骑行的路径。
2)result.getPaths()可以获取到 WalkPath 列表,步行路径的详细信息可参考 WalkPath 类。
3)返回结果成功或者失败的响应码。1000为成功,其他为失败(详细信息参见网站开发指南-实用工具-错误码对照表)
下面一个步行规划的图:
主要的方法MainActivity
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.942295
private LatLonPoint mEndPoint = new LatLonPoint(39.995576, 116.481288);//终点,116.481288,39.995576
private final int ROUTE_TYPE_WALK = 3;
private RelativeLayout mBottomLayout, mHeadLayout;
private TextView mRotueTimeDes, mRouteDetailDes;
private ProgressDialog progDialog = null;// 搜索时进度条
@Override
protected 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);
}
@Override
public View getInfoContents(Marker arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public View getInfoWindow(Marker arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onInfoWindowClick(Marker arg0) {
// TODO Auto-generated method stub
}
@Override
public boolean onMarkerClick(Marker arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public 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);// 异步路径规划步行模式查询
}
}
@Override
public void onBusRouteSearched(BusRouteResult result, int errorCode) {
//公交的路线规划
}
@Override
public void onDriveRouteSearched(DriveRouteResult result, int errorCode) {
//自驾的路线
}
@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);
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() {
@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);
}
}
/**
* 显示进度框
*/
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();
}
}
/**
* 方法必须重写
*/
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
/**
* 方法必须重写
*/
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
/**
* 方法必须重写
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
/**
* 方法必须重写
*/
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
@Override
public void onRideRouteSearched(RideRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
}
}
android 步行距离,Android 高德地图 步行 路线规划相关推荐
- Android 高德地图中路线规划绘制界面线路
Android 高德地图中路线规划绘制界面线路 下面代码是根据很多的经纬度的点,绘制出直线的线路.比较死板 /*** 绘制景区的路线*/private void setRouteInfo(List&l ...
- Android高德地图多路线规划----可点击选择路线
最近项目上有用到高德sdk,需求上要求多路线规划,并且可以在地图上点击选择路线.本着不想重复造轮子的驱使下(其实想偷懒),网上似乎没有例子,也可能是我找不到.最后没办法,只能自己实现. 在此做为记录, ...
- uniapp H5端使用高德地图完成路线规划
本项目是H5端,APP端地图的使用方法请参考我的另一篇博客uniapp,map地图组件打包原生APP 首先到高德地图API,申请web端key 参考高德H5端教程开始写代码高德地图JS API 1.准 ...
- 高德地图API路线规划
高德地图API基础使用 高德地图API体验 申请Key 初体验 添加插件 点击事件返回地址值 两点之间获取驾车导航路线 高德地图API体验 申请Key 申请高德地图账号 登录后,应用管理下创建自己的应 ...
- 高德地图之路线规划 多点路线规划路线最短原则之二 TSP算法
经过这段时间的使用和研究,我发现点和点之间的最短路线并不是最优的.针对所有点的组合可能, 得到的最短路线才是最好的(也就是TSP方法),然后再结合点对点之间的距离进行比较,得到的才是相对最优方案. 举 ...
- 高德地图实现路线规划+轨迹回放(显示车牌)
联系作者Q/V:783021975 Tips: 1.高德好的方法非同步执行.一定要注意执行顺序或等待执行完成再进行具体的操作 2.高德地图不支持label旋转哦~ 3.百度是支持的.可以参考 百度地图 ...
- 高德地图-添加路线规划(自驾、步行...)
官方参考资料地址:(http://lbs.amap.com/api/android-sdk/guide/route-plan/drive/) 官方文档:http://a.amap.com/lbs/st ...
- (转载)Android高德地图多路线规划----可点击选择路线
(转载)https://blog.csdn.net/VRoymond/article/details/79898400
- 高德地图的路线规划 简易版
将jar包放入libs目录下.对于每个jar文件,右键-选择Add As Library,导入到工程中. jar包的下载地址 具体要下什么版本的自己选 https://lbs.amap.com/api ...
- Android百度地图、高德地图、腾讯地图导航路线规划问题
Android百度地图.高德地图.腾讯地图导航路线规划 在最近的项目中,需求是用户选择某个地址需要进行导航时,弹出百度地图.高德地图和腾讯地图让用户选择.如果该用户手机中已安装对应的地图App,则 ...
最新文章
- ovs router
- xml、 Dao service 三层参数以及对应关系
- Vue全家桶 + webpack 构建单页应用初体验
- python环境配置与pytorch下载
- 搞清axis的含义,这一篇就够了!
- vins中imu融合_视觉和imu融合的算法研究
- ICCV 2019 | RankSRGAN:排序学习 + GAN 用于超分辨率
- 微课|中学生可以这样学Python(例11.1):tkinter电子时钟程序(2)
- MySQL -- 创建用户并提升用户权限
- ubuntu14.04源无法更新--jdk安装出错解决方法
- bootstrap课程4 bootstrap的css样式有哪些内容需要注意
- MachineLearning:UFLDL学习笔记 ---- 主成分分析与白化
- softmax ce loss_从Softmax到AMSoftmax(附可视化代码和实现代码)
- Python实现坦克大战——源代码
- 机器学习中激活函数的作用
- nginx配置实现代理多个内网地址
- Vue模板挂载到页面源码简要解析
- 某Q音乐最新歌曲查询API 可用!
- MemSQL 的安装和简单使用 比Mysql快30倍的关系型数据库
- 华为网络配置(三层交换与Hybrid)
热门文章
- 教程:在vjudge里如何提交topcoder
- css倒三角的几种实现方式
- Chrome谷歌浏览器最小化和页面遮挡后JS代码不稳定和功能失效的解决思路
- 如何查找SCI期刊的iso缩写?
- 黑夜也能五颜六色,用深度学习实现全彩夜视系统
- 能通过一张照片(2D)得到3D的模型吗?AI自动识别户型图生成3D场景方案
- Photoshop在相框中嵌入人像的方法
- Python爬虫工程师是干什么的?能赚多少钱?需要掌握哪些技术?
- 高效GO语言编程(9)——空白标识符
- AndroidT(13) Log 系统 -- C plus plus 语言格式的LOG输出(二)