当前位置: 首页 > news >正文

Geotools系列说明之LineString仿高德航路截取说明

需求分析

我们在做webgl的时候经常会遇到这样的需求,计算给定航路的拥堵情况,不同的拥堵显示不同的颜色,航路截取计算等等。基于这类问题统一都可以使用LineString进行处理

实现思路

在这里插入图片描述
如上图所示,航路是几个关键的点然后练成线,如果要实现上述的需求,就需要把每段航路进行划分成为线段,然后计算通过处理每个线段,最后汇总数据得到结果。

实现

下面是实现方案

  1. 首先拿到所有的线段的经纬度的点
  2. 通过calculator.getGeodeticPath(i);的截断方法获取起点和终点的截断
  3. 根据截断得到新的LineString
  4. 实现了把一个航路分段成多个小段
  5. 然后计算点到线段的距离知道每个线段的数量就可以实现线段变色了
 /*** 分段算法* @param pointList* @return*/public List<LineString> getRouteSegment(List<RoutePointDTO> pointList)  {List<LineString> lineStrings = new ArrayList<>();for (int i = 0; i < pointList.size()-1; i++) {RoutePointDTO startRoute = pointList.get(i);RoutePointDTO endRoute = pointList.get(i+1);Coordinate start = new Coordinate(startRoute.getLongitude(), startRoute.getLatitude(),startRoute.getHeight());log.debug("开始的位置:{}",start);Coordinate end = new Coordinate(endRoute.getLongitude(),endRoute.getLatitude(),endRoute.getHeight());log.debug("结束的位置:{}",end);List<Point2D> point2DS = GeoTools.point2DList(start, end, 5000);for (int j = 0; j < point2DS.size()-1; j++) {Point2D startPoint = point2DS.get(j);Point2D endPoint = point2DS.get(j + 1);Coordinate[] coordinates = new Coordinate[]{new Coordinate(startPoint.getX(),startPoint.getY(),start.z),new Coordinate(endPoint.getX(),endPoint.getY(),end.z)};LineString lineString = GeometryUtil.createLineString(coordinates);lineStrings.add(lineString);log.debug("截取后的:{}", Arrays.toString(coordinates));}}return lineStrings;}

相关文章:

  • 认识String类
  • mac 安装homebrew
  • uniapp标题水平对齐微信小程序胶囊按钮及适配
  • 【mybatis】mybatis-plus中BaseMapper接口常用方法整理
  • avformat_open_input 代码再分析
  • 不同系统间数据交换要通过 api 不能直接数据库访问
  • 【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十九)
  • LeetCode:经典题之144、94、145、102题解及延伸|二叉树的遍历|前中后层序遍历|Morris算法
  • Rust学习笔记 (命令行命令) : 用override set 设置工具链
  • OpenCV cv::Mat到 Eigen 的正确转换——cv2eigen
  • Vue3轻松创建交互式仪表盘
  • miniconda3 安装jupyter notebook并配置网络访问
  • 番外1:企业数据
  • 【文档+源码+调试讲解】科研经费管理系统
  • WebKit简介及工作流程
  • 【Leetcode】101. 对称二叉树
  • 【Amaple教程】5. 插件
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • DataBase in Android
  • Java 多线程编程之:notify 和 wait 用法
  • Javascript设计模式学习之Observer(观察者)模式
  • JAVA之继承和多态
  • JSONP原理
  • nginx 负载服务器优化
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • SpringBoot几种定时任务的实现方式
  • web标准化(下)
  • Zsh 开发指南(第十四篇 文件读写)
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 动态规划入门(以爬楼梯为例)
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 如何使用 JavaScript 解析 URL
  • 入门到放弃node系列之Hello Word篇
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • # linux 中使用 visudo 命令,怎么保存退出?
  • # 数论-逆元
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (七)Java对象在Hibernate持久化层的状态
  • (十六)一篇文章学会Java的常用API
  • (算法)N皇后问题
  • (转)JAVA中的堆栈
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET设计模式(11):组合模式(Composite Pattern)
  • @GlobalLock注解作用与原理解析
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • @media screen 针对不同移动设备
  • @PreAuthorize注解
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [20161101]rman备份与数据文件变化7.txt
  • [20170713] 无法访问SQL Server
  • [AIGC codze] Kafka 的 rebalance 机制