高德地图之路线规划 多点路线规划路线最短原则之二 TSP算法
经过这段时间的使用和研究,我发现点和点之间的最短路线并不是最优的。针对所有点的组合可能,
得到的最短路线才是最好的(也就是TSP方法),然后再结合点对点之间的距离进行比较,得到的才是相对最优方案。
举例:A、B、C、D四个点。自由组合,得到最短路线方案。
所有的组合路线应该是(此处我们只需要四个点的组合)
ABCD
ABDC
ACBD
ACDB
ADCB
ADBC
BACD
BADC
BCAD
BCDA
BDCA
BDAC
CBAD
CBDA
CABD
CADB
CDAB
CDBA
DBCA
DBAC
DCBA
DCAB
DACB
DABC
得到的结果是这样么多(24条路线);
n!=(n-1)!*n
A、B、C、D四个点。设定一个点为起点(我设置A为起点),不设定终点,得到最短路线方案
BCD
BDC
CBD
CDB
DCB
DBC
A为起点,BCD自由组合,则有6条路线;
现在对6个结果进行最短距离排序;根据高德的路线规划,得到一个最短路线;
然后对着一条路线进行规划,你会得到一个路线的所有途径点的集合,然后对途径地点之间的距离进行排序
,然后调整路线,进行显示就可以了。
下面开始上代码;
// 添加数据
if (start == null) {Toast.makeText(this, "请选择起点", Toast.LENGTH_SHORT).show();return;}if (throughList.size() == 0) {Toast.makeText(this, "请添加途径点", Toast.LENGTH_SHORT).show();return;}startTip = new LatLonPoint(new BigDecimal(start.getLat()).doubleValue(), new BigDecimal(start.getLon()).doubleValue());sortPoint(throughList, startTip);
// 组合点,得到所有可能的路线
private void sortPoint(List<Bean> allList,LatLonPoint start) {String s = "";for (int i = 0; i < allList.size(); i++) {s += allList.get(i).getId();}char[] result = s.toCharArray();routes = TSPUtil.sortPoint(result, 0);for (int i = 0; i < routes.size(); i++) {plan(allList, routes.get(i),start);}
}
static List<String> list = new ArrayList<>();
public static List<String> sortPoint(char result[], int k){String s = "";if(k==result.length){for(int i=0;i<result.length;i++){s += result[i];}list.add(s);return list;}for(int i=k;i<result.length;i++){//交换{char t = result[k];result[k] = result[i];result[i] = t;}//递归,下一个数去排列sortPoint(result,k+1);//再归位数据{char t = result[k];result[k] = result[i];result[i] = t;}}return list;
}
// 开始路线规划
private void plan(List<Bean> points,String s,LatLonPoint start) {char[] array = s.toCharArray();for (int i = 0; i < array.length; i++) {through1.clear();through2.clear();// 得到策略后所有点的集合for (int j = 0; j < points.size(); j++) {if (points.get(j).getId().equals(String.valueOf(array[i]))) {through2.add(points.get(j));}}// 填充规划集合for (int j = 0; j < through2.size(); j++) {through1.add(new LatLonPoint(new BigDecimal(through2.get(j).getLat()).doubleValue(),new BigDecimal(through2.get(j).getLon()).doubleValue()));}}AMapUtil.doRoutePlan(start,through1.get(through1.size()-1),through1,this,this);}
// 得到最短距离,根据最短距离得到最短路线,并展示地图@Overridepublic void onDriveRouteSearched(DriveRouteResult driveRouteResult, int i) {if (i == 1000) {if (driveRouteResult != null && driveRouteResult.getPaths() != null) {disList.add(Double.valueOf(driveRouteResult.getPaths().get(0).getTollDistance()));if (minDistance == 0) {minDistance = driveRouteResult.getPaths().get(0).getTollDistance();}else {if (minDistance > driveRouteResult.getPaths().get(0).getTollDistance()) {minDistance = driveRouteResult.getPaths().get(0).getTollDistance();}}if (disList.size() == routes.size()) {for (int j = 0; j < disList.size(); j++) {if (minDistance == disList.get(j)) {if (throughList.size() > j && throughList.get(j) != null) {minDisRoute = throughList.get(j);Bundle bundle = new Bundle();bundle.putString("start",GsonInstance.getInstance().toJson(start));bundle.putString("end",GsonInstance.getInstance().toJson(throughList.get(0)));bundle.putSerializable("list", (Serializable) throughList);startActivity(ShowRouteActivity.class,bundle,true);break;}}}}Log.d(TAG, "onDriveRouteSearched: 规划成果="+minDistance);}}}
下面就不说了,上一篇都已经讲到。传送阵
后面会有下载链接。完整demo,仅供参考。
完整demo
可下载demo运行测试。欢迎评论/私信
高德地图之路线规划 多点路线规划路线最短原则之二 TSP算法相关推荐
- 基于高德地图实现vue3的移动端物流路线相关功能
基于高德地图实现vue3的移动端物流路线相关功能 自我记录 一.参考文档 高德地图开放平台: https://lbs.amap.com/ Web开发-JSAPI文档: https://lbs.amap ...
- VUE中使用高德地图.做个轨迹添加器,为路线规划做数据
准备工作 使用前准备 : 高德地图key 使用插件: vue-amap 1.npm安装vue-amap npm install vue-amap --save 2 在mai.js中引入 import ...
- 高德地图API总结--Marker多点聚合
Marker多点聚合计算 什么是多点聚合呢?所谓的多点聚合,就是计算地图上一定范围内的点的个数,然和讲所有的点统计的数量显示在范围内设置的marker上:我们需要解决的问题有:1.在地图上划定区域范围 ...
- js添加多marker 高德地图_高德地图点聚合--Marker多点聚合及多个marker点击事件
本篇文章主要是高德地图的多点聚合,及多个marker点击事件 以下为简单的模拟数据 soogif (1).gif image.png 具体代码如下 点聚合 html, body, #container ...
- 快速接入高德地图SDK(地图+定位+标记+路线规划+搜索)
文章目录 申请接入流程 显示高德地图 显示定位 Marker 显示地图标记 Route 路线规划 Search 搜索 申请接入流程 1.首先到 [ 高德地图API官网] 申请注册帐号 2.进入控制台, ...
- Android开发知识(十)快速接入高德地图SDK(地图+定位+标记+路线规划+搜索)
文章目录 申请接入流程 显示高德地图 显示定位 Marker 显示地图标记 Route 路线规划 Search 搜索 申请接入流程 1.首先到 [ 高德地图API官网] 申请注册帐号 2.进入控制台, ...
- 高德地图记录跑步轨迹_高德地图周边跑步路线功能体验地图秒变运动利器
跑步需要持之以恒,才能不断地给身体"充电",达到锻炼的目的.那么,怎样才能规划一条最适合跑步的路线,并且督促自己严格完成预设的目标呢?高德地图V8.0.8新增了"周边跑步 ...
- 高德地图哪个语音包最好_高德地图VS百度地图,哪个更靠谱?
国庆出行选择一个好的导航是非常有必要的,百度地图和高德地图都是我们最常用的手机导航软件,那么它们到底哪个更靠谱,更适合我们呢? 1.界面设计 从首页来看,高德的画面更简洁易懂,搜索框在下面,子菜单有驾 ...
- vue 高德地图 不同区域显示不同颜色_高德地图车机版4.0解析:看不见的升级才是重点...
近日,高德正式发布高德地图车机版(AMAP AUTO)4.0. 自2016年初高德地图车机版(AMAP AUTO)首次亮相后,此次正式推出的4.0版本,已经是该智能车载导航产品的第三次大升级. 在车云 ...
最新文章
- 具有absolute、relative、fixed的div设置宽度和高度的效果
- 云原生产业联盟成立 蚂蚁金服当选为理事单位
- CSS margin详解
- python 归并排序(详解)
- sklearn特征的提取(下)
- 网络调试指令ping、telnet、curl
- 【队列】Team Queue(luogu-UVA540/poj 2259)
- LeetCode 2169. 得到 0 的操作数
- 很感人的爱情故事——世界上最遥远的距离
- 使用windows的事件查看器(eventvwr),查看、电脑执行过的你不知道的操作・开机・关机时间
- 北大计算机最好的班叫什么,中国大学计算机最好的班,再次迎来“图灵奖”导师,赶超“姚班”...
- Java中遍历Set集合的三种方法
- Atitit 研发团队建设----福利法案--非物质福利与物质福利法案
- 斗鱼显示弹幕服务器连接失败,斗鱼看不到弹幕怎么办 斗鱼无法看到弹幕的解决方法...
- python 红黑树_手把手教你43行代码写红黑树(包括删除操作)
- poi怎么设置某个单元格为下拉框_java excel 多选下拉列表设置
- Python经典例题:跑马灯文字效应
- 人工智能机器人标准化建设的意义
- SPSS对个案值的计数功能解析
- FCKEDITOR编辑器的使用