最近项目上有用到高德sdk,需求上要求多路线规划,并且可以在地图上点击选择路线。本着不想重复造轮子的驱使下(其实想偷懒),网上似乎没有例子,也可能是我找不到。最后没办法,只能自己实现。
在此做为记录,如果有更好方法,劳烦指出。

实现效果如下:

实现思路

当点击地图线段的时候获取对应坐标点,然后跟路线上的坐标点比对,如果经纬度各自的差值都小于0.000001,则选择该路线。
PS:为啥小于0.00001,是考虑到两条路线如果坐标相差很近时,给的一个差值范围

实现思路步骤

1.获取屏幕点击线段的坐标

在多路线规划完成后(多路线规划的在这就不叙述了,官网例子较详细),可以设置AMap的setOnPolylineClickListener方法监听。

代码如下:

 //.....多余代码省略{mAmap.setOnPolylineClickListener(this);//......多余代码省略}@Overridepublic void onPolylineClick(Polyline polyline) {}

该方法是监听地图上线段点击回调。我们路线规划出来,在屏幕上就是一段一段线段拼接出来的。
回调出来这个类Polyline 究竟是什么呢?
查看高德提供的参考手册

回调出来就是点击的该线段,我们继续看参考手册,看提供的相应方法。

里面有个获取线段顶点坐标列表的方法getPoints()
我们先把这个经纬度坐标列表打印出来看下。

在此我们第一步骤就完成了。

获取路线对应的坐标列表

高德地图中路线这个类对应的是RouteOverLay这个类。

同样的我们得去看下高德提供参考手册,有哪些方法可以提供。在翻看很久情况下都没找到类似LatLng经纬度数据这个类,但是其中有个方法是获取导航路径对象——getAMapNaviPath()

我们再点击查看这个类有什么方法是可以获取经纬度列表的。果然有获取坐标的列表。

同样的我们把这个经纬度集合打印出来看下,是不是预想效果。

打印出来的经纬度坐标巨多,因为路线规划是多个线段的组合所以坐标会很多。

坐标比较,选择对应路线

好了现在地图线段坐标集合和路线对应的坐标集合都有了,如何做比较呢?
我的思路是这样的,取线段坐标集合任意一点跟路线对应的坐标集做差值计算,如果经纬度都小于0.000001我们一开始设定的范围,则认为点击到该路线,则把该路线高亮显示。
代码如下:

@Overridepublic void onPolylineClick(Polyline polyline) {if( routeOverlays != null && routeOverlays.size() == 1){  //路线只有一条,没必要选择路线。return;}List<LatLng> latLngs = polyline.getPoints();if (latLngs.size() == 0){//确定获取线段有坐标集合return;}LatLng latLng = latLngs.get(0);//取线段的第一个坐标就好outer:for (int i = 0; i < routeOverlays.size(); i++) {//遍历路线集合int key = routeOverlays.keyAt(i);List<NaviLatLng> naviLatLngs = routeOverlays.get(key).getAMapNaviPath().getCoordList();  //获取路线所有坐标集合for (NaviLatLng naviLatLng : naviLatLngs) {//遍历路线的坐标集合if (Math.abs((naviLatLng.getLatitude() - latLng.latitude)) <= 0.000001&& Math.abs((naviLatLng.getLongitude()- latLng.longitude)) <= 0.00001){//符合差值范围if (i == routeIndex){   // 已经选过该路线 跳转下一条路线 点击的线段可能是两条路线的重复路段continue outer;}//下面循环方法是绘制没选中路线不高亮for (int j = 0; j < routeOverlays.size(); j++) {if (i == j){    //选中路线 先不用画continue;}int key2 = routeOverlays.keyAt(j);routeOverlays.get(key2).setTransparency(0.4f);routeOverlays.get(key).setZindex(0);}routeOverlays.get(key).setTransparency(1.0f);/**把用户选择的那条路的权值弄高,使路线高亮显示的同时,重合路段不会变的透明**/routeOverlays.get(key).setZindex(1);mAMapNavi.selectRouteId(key);routeIndex = i;chooseRouteSuccess = true;return;}}}}

至此,整体的思路就是这样。
具体Demo地址:https://github.com/CTSN/RouteDemo
实现方法如有不足之处,请指出。
题外话:看自己上篇博客的时间已经是去年了,自己偷懒了,得多学习了。

Android高德地图多路线规划----可点击选择路线相关推荐

  1. (转载)Android高德地图多路线规划----可点击选择路线

    (转载)https://blog.csdn.net/VRoymond/article/details/79898400

  2. Android 高德地图自定义线路规划选择方案之后按照方案进行导航

    Android 高德地图自定义线路规划选择方案之后按照方案进行导航 因为我这边导航需求的问题,导致我这边不能使用高德地图官方的线路规划和导航.所以我这边线路规划和导航界面都是根据高德地图那边给的api ...

  3. Android 高德地图中路线规划绘制界面线路

    Android 高德地图中路线规划绘制界面线路 下面代码是根据很多的经纬度的点,绘制出直线的线路.比较死板 /*** 绘制景区的路线*/private void setRouteInfo(List&l ...

  4. Android高德地图路线规划,自定义图层(overlay),所有点和线刚好显示在屏幕中心

    高德百度地图SDK路线规划包含:步行,公交,驾车,骑车. 搜索的结果是经纬度点信息Latlng(lat,lng) 功能 在地图map中将所有的点连线,并让该线能刚好被当前的地图层级包含,并且当前路线所 ...

  5. Android 集成高德地图——当前定位,添加图标,画路线,设置显示中心位置,比例,地图刷新位置监听,判断GPS开启,去打开GPS

    /*** 判断定位服务是否开启** @param* @return true 表示开启*/ public static boolean isLocationEnabled(Context contex ...

  6. vue2实现高德地图 JSAPI 2.0可拖拽的路线规划(DragRoute)组件实现对每个经过点设置不同的经过点名称

    问题记录 vue2实现高德地图 JSAPI 2.0可拖拽的路线规划(DragRoute)组件实现对每个经过点设置不同的经过点名称 官方文档及示例 DragRoute相关API API中没有任何方法让我 ...

  7. Android studio百度地图SDK开发 2020最新超详细的Android 百度地图开发讲解(3) 路线规划步行骑行驾车路线规划

    2020最新超详细的Android 百度地图开发讲解(3) 路线规划步行骑行驾车路线规划 开发前配置,显示基本地图,实时定位等查看之前代码,此博客紧接上一博客:https://blog.csdn.ne ...

  8. android高德地图设置经纬度,安卓高德地图开发自定义线路规划(按着自己定义的经纬度规划线路)...

    [实例简介] 自定义地图的线路规划问题,代码可以直接的借用,方便大家学习 [实例截图] [核心代码] (YN)安卓高德地图自定义线路规划(按着指定的经纬度规划线路) └── YnGaoDeThreeM ...

  9. Android 高德地图API(详细步骤+源码)

    高德地图API使用详解 前言 正文 一.创建应用 ① 获取PackageName ② 获取调试版安全码SHA1 ③ 获取发布版安全码SHA1 二.配置Android Studio工程 ① 导入SDK ...

最新文章

  1. 秒杀系统架构分析与实战,一文带你搞懂秒杀架构!
  2. python异常处理的作用_python--异常处理
  3. 解决express video 手机无法播放的问题
  4. Java 8 Map新增方法
  5. 手写bind_一次搞定前端“四大手写”
  6. java课程设计学生信息管理_JAVA课程设计---学生基本信息管理系统
  7. VLC和Qt结合编写流媒体rtsp播放器
  8. win10 桌面残留文件夹或其他应用关闭后的画面
  9. Oracle Solaris系统,诺禾
  10. mysql 嵌套查询优化
  11. 本科生计算机论文中文核心,本科计算机想投中文核心,求推荐刊物!
  12. HDU 6184 Counting Stars 经典三元环计数
  13. 异地报销-医保局OCR智能审核系统-医疗单据识别
  14. java normalize_Java Path normalize()用法及代码示例
  15. 2017陕西省网络空间安全技术大赛_Crypto_crypt1_Writeup
  16. C语言pow()函数:求x的y次方(次幂)
  17. Proxy(代理) ARP作用及原理
  18. 瞬态抑制二极管和esd静电管的区别
  19. dubbo官方文档_Dubbo(一)
  20. mpls vpn综合实例配置案例

热门文章

  1. HashMap遍历时报ConcurrentModificationException
  2. 前端文章收集(长期更新)2020-02-04
  3. python线程创建对象_Python使用面向对象方式创建线程实现12306售票系统
  4. web上的用户登录功能
  5. acwing奶牛大学
  6. 最新版本Redis:Redis 7.0 安装使用,Docke启动Redis,Redis使用场景-2022年最新Redis图解安装
  7. 光学设计软件Ansys的Lumerical 2023版本下载与安装使用
  8. VMware Esxi卸载NVIDIA GPU显卡驱动
  9. python绘制梅尔谱图_3D星空图V2版——添加背景图片和音乐
  10. 【ES笔记02】ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)