google map 地图轨迹点以画带箭头的直线连接,直观轨迹记录。

2023-10-10 15:20

本文主要是介绍google map 地图轨迹点以画带箭头的直线连接,直观轨迹记录。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!




       一般我们在做地图定位或轨迹查询的时候,需要在地图上绘画各个轨迹点的marker,然后记录各marker点的经纬度坐标,通过drawLine或drawPath可以把各个点连接起来,以实现轨迹记录。

       但是我们想如果这条线能从起始点的marker到中途以及最后点的marker能有一条带箭头的直线连接起来,这样用户看起来更直观一点,一眼就能看懂起始点和终点的线路。这样就需要我们判断直线所画的方向和中途marker点的位置,然后延伸画两条小线,以实现箭头的效果。

	class LineOverlay extends Overlay {/*** according two GeoPoint, draw a line.(use in track)* must have frontGeopoint and backGeopoint  */private GeoPoint front;private GeoPoint back;Paint paint;public LineOverlay() {}public LineOverlay(GeoPoint front, GeoPoint back) {this.front = front;this.back = back;}public void draw(Canvas canvas, MapView mapview, boolean shadow) {super.draw(canvas, mapview, shadow);paint = new Paint();paint.setColor(Color.BLUE);paint.setStyle(Paint.Style.FILL_AND_STROKE);paint.setStrokeWidth(2);paint.setAntiAlias(true);Point point_f = new Point();Point point_b = new Point();//Path path = new Path();mapview.getProjection().toPixels(front, point_f);mapview.getProjection().toPixels(back, point_b);// begin//path.moveTo(point_b.x, point_b.y);// end//path.lineTo(point_f.x, point_f.y);//canvas.drawPath(path, paint);//JudgeDrawArrow(canvas, point_b.x, point_b.y, point_f.x, point_f.y);JudgeDrawArrow(canvas, point_f.x, point_f.y, point_b.x, point_b.y);}/** x1 is the first geopoint marker point X,y1 is that Y;* x2 is the second geopoint marker point X,y2 is that Y;* judge and draw arrow line*/public void JudgeDrawArrow(Canvas canvas, int x1, int y1, int x2, int y2) {double arrow_height = 10; // 箭头高度  double arrow_btomline = 7; // 底边的一半  int x3 = 0;  int y3 = 0;  int x4 = 0;  int y4 = 0;double arctangent = Math.atan(arrow_btomline / arrow_height); // 箭头角度  double arrow_len = Math.sqrt(arrow_btomline * arrow_btomline + arrow_height * arrow_height); // 箭头的长度  double[] endPoint_1 = rotateVec(x2 - x1, y2 - y1, arctangent, true,  arrow_len);double[] endPoint_2 = rotateVec(x2 - x1, y2 - y1, -arctangent, true,  arrow_len);double x_3 = x2 - endPoint_1[0]; // (x_3,y_3)是第一端点  double y_3 = y2 - endPoint_1[1];  double x_4 = x2 - endPoint_2[0]; // (x_4,y_4)是第二端点  double y_4 = y2 - endPoint_2[1];  Double X3 = new Double(x_3);x3 = X3.intValue();  Double Y3 = new Double(y_3);  y3 = Y3.intValue();  Double X4 = new Double(x_4);  x4 = X4.intValue();  Double Y4 = new Double(y_4);  y4 = Y4.intValue();  // 画线  canvas.drawLine(x1, y1, x2, y2,paint);  // 画箭头的一半  canvas.drawLine(x2, y2, x3, y3,paint);  // 画箭头的另一半  canvas.drawLine(x2, y2, x4, y4,paint);  }  public double[] rotateVec(int px, int py, double ang, boolean isChlen,double newLen) {  double rotateResult[] = new double[2];  // 矢量旋转函数,参数含义分别是x分量、y分量、旋转角、是否改变长度、新长度  double vx = px * Math.cos(ang) - py * Math.sin(ang);  double vy = px * Math.sin(ang) + py * Math.cos(ang);  if (isChlen) {  double d = Math.sqrt(vx * vx + vy * vy);  vx = vx / d * newLen;  vy = vy / d * newLen;  rotateResult[0] = vx;  rotateResult[1] = vy;  }  return rotateResult;  }}

构造器的两个参数分别为GeoPoint对象,(geopoint1,geopoint2)

point_f.X,Y为marker点1的屏幕坐标点,point_b.X,Y为marker点2的屏幕坐标点。

(效果图)

这篇关于google map 地图轨迹点以画带箭头的直线连接,直观轨迹记录。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/181298

相关文章

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和