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

相关文章

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Python3.6连接MySQL的详细步骤

《Python3.6连接MySQL的详细步骤》在现代Web开发和数据处理中,Python与数据库的交互是必不可少的一部分,MySQL作为最流行的开源关系型数据库管理系统之一,与Python的结合可以实... 目录环境准备安装python 3.6安装mysql安装pymysql库连接到MySQL建立连接执行S

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma

电脑win32spl.dll文件丢失咋办? win32spl.dll丢失无法连接打印机修复技巧

《电脑win32spl.dll文件丢失咋办?win32spl.dll丢失无法连接打印机修复技巧》电脑突然提示win32spl.dll文件丢失,打印机死活连不上,今天就来给大家详细讲解一下这个问题的解... 不知道大家在使用电脑的时候是否遇到过关于win32spl.dll文件丢失的问题,win32spl.dl