【Turfjs的java版本JTS】前面讲了Turfjs可以实现几何计算,空间计算的功能,如果后端要做这项功能也有类似的类库,JTS
JTS = Java Topology Suite
几何计算:
1. 前端js就用这个 Turfjs的类库。参考网站: 计算两线段相交点 | Turf.js中文网
2. 后端java语言就可以用 JTS这个类库,参考网站:
JTS参考网站:
1. https://github.com/locationtech/jts
GitHub - locationtech/jts: The JTS Topology Suite is a Java library for creating and manipulating vector geometry.The JTS Topology Suite is a Java library for creating and manipulating vector geometry. - GitHub - locationtech/jts: The JTS Topology Suite is a Java library for creating and manipulating vector geometry.
https://github.com/locationtech/jts 2. https://locationtech.github.io/jts/JTS | Documentation
https://locationtech.github.io/jts/
1. https://github.com/locationtech/jts
2. https://locationtech.github.io/jts/
POM文件:
<dependency><groupId>org.locationtech.jts</groupId><artifactId>jts-core</artifactId><version>1.18.0</version> </dependency>
实例代码:
可以通过JTS
要使用JTS(Java Topology Suite)库计算
1. 某个点是否在另外一个闭合的空间内
2. 计算某个闭合的空间的中心的的位置
3. 已知两个点的经纬度,计算他们之间的距离
4. 已知某点的经纬度坐标,计算其他点的经纬度坐标
简单实例如下:
package com.simulate.jts;import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.Point;
import org.locationtech.jts.geom.Polygon;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;
import org.locationtech.jts.linearref.LengthIndexedLine;public class JtsExample {public static void main(String[] args) throws ParseException {// 1. 某个点是否在另外一个闭合的空间内// isInside();// 2. 计算某个闭合的空间的中心的的位置// calcCentPoint();//3. 已知两个点的经纬度,计算他们之间的距离// pointDistance();// 4. 已知某点的经纬度坐标,计算其他点的经纬度坐标calcCoordinate();// 5.}// 1. 某个点是否在另外一个闭合的空间内static void isInside() throws ParseException{// 创建 GeometryFactory 对象GeometryFactory geometryFactory = new GeometryFactory();// 创建点对象Coordinate pointCoord = new Coordinate(2.0, 2.0);Point point = geometryFactory.createPoint(pointCoord);// 创建多边形对象WKTReader wktReader = new WKTReader(geometryFactory);Polygon polygon = (Polygon) wktReader.read("POLYGON((0 0, 0 4, 4 4, 4 0, 0 0))");// 判断点是否在多边形内部boolean isInside = polygon.contains(point);// 输出结果System.out.println("Point: " + point.toText());System.out.println("Polygon: " + polygon.toText());System.out.println("Is inside: " + isInside);}// 2. 计算某个闭合的空间的中心的的位置static void calcCentPoint(){int pointCount = 5;Coordinate[] coordinates = new Coordinate[pointCount];// 填充Coordinate数组coordinates[0] = new Coordinate(1.0, 1.0);coordinates[1] = new Coordinate(2.0, 3.0);coordinates[2] = new Coordinate(4.0, 1.0);coordinates[3] = new Coordinate(3.0, 4.0);coordinates[4] = new Coordinate(1.0, 1.0);// 创建Polygon对象GeometryFactory factory = new GeometryFactory();Polygon polygon = factory.createPolygon(coordinates);polygon.getDimension();// 计算中心点坐标Coordinate centerCoordinate = polygon.getCentroid().getCoordinate();double centerX = centerCoordinate.x;double centerY = centerCoordinate.y;// 输出结果System.out.println("Center point: (" + centerX + ", " + centerY + ")");}//3. 已知两个点的经纬度,计算他们之间的距离static void pointDistance(){double lon1 = 115.8575; // 第一个点的经度double lat1 = 28.6829; // 第一个点的纬度double lon2 = 116.4074; // 第二个点的经度double lat2 = 39.9042; // 第二个点的纬度// 创建GeometryFactory对象GeometryFactory factory = new GeometryFactory();// 创建Coordinate对象Coordinate coordinate1 = new Coordinate(lon1, lat1);Coordinate coordinate2 = new Coordinate(lon2, lat2);// 创建Point对象Point point1 = factory.createPoint(coordinate1);Point point2 = factory.createPoint(coordinate2);// 计算两点之间的距离double distance = point1.distance(point2);// 输出结果System.out.println("Distance between the two points: " + distance);}/// 4. 已知某点的经纬度坐标,计算其他点的经纬度坐标static void calcCoordinate() {// 假设已知的参考点的坐标double lat1 = 40.7128; // 参考点的纬度double lon1 = -74.0060; // 参考点的经度// 假设要计算的距离和方向double distanceInMeters = 1000; // 距离为 1000 米double bearingInDegrees = 45; // 方向为 45 度// 创建参考点的坐标对象Coordinate referenceCoord = new Coordinate(lon1, lat1);// 计算目标点的坐标Coordinate targetCoord = calculateCoordinate(referenceCoord, distanceInMeters, bearingInDegrees);// 打印目标点的经纬度System.out.println("目标点的经度:" + targetCoord.x);System.out.println("目标点的纬度:" + targetCoord.y);}// 使用 JTS 计算目标坐标static Coordinate calculateCoordinate(Coordinate referenceCoord, double distance, double bearing) {// 将距离转换为度数double distanceInDegrees = Math.toDegrees(distance / 6371000.0); // 假设地球是一个球体,半径为 6371000 米// 根据参考点和距离创建线段对象// LengthIndexedLine line = new LengthIndexedLine(new Coordinate[] { referenceCoord });GeometryFactory factory = new GeometryFactory();Point referencePoint = factory.createPoint(referenceCoord);LengthIndexedLine line = new LengthIndexedLine(referencePoint);// 在线段上根据方向和距离计算目标点的索引double targetIndex = line.project(referenceCoord) + distanceInDegrees;// 根据目标索引获取目标点的坐标Coordinate targetCoord = line.extractPoint(targetIndex);return targetCoord;}
}
相关文章:
【Turfjs的java版本JTS】前面讲了Turfjs可以实现几何计算,空间计算的功能,如果后端要做这项功能也有类似的类库,JTS
JTS Java Topology Suite 几何计算: 1. 前端js就用这个 Turfjs的类库。参考网站: 计算两线段相交点 | Turf.js中文网 2. 后端java语言就可以用 JTS这个类库,参考网站: JTS参考网站: 1. https://github.com/locatio…...
从Window中先多瞥几眼
JavaFx17官方文档中有如下的描述: Window类是一个顶层窗口类,在其中可以承载场景,并与用户交互。窗口可以是Stage、PopupWindow或其他类似的顶层窗口。 JavaFX Stage类是顶级的JavaFX容器。初级阶段由平台搭建。其他Stage对象可以由应用程序构造。 许多Stage属性是只读的…...
【STM32训练—WiFi模块】第二篇、STM32驱动ESP8266WiFi模块获取天气
目录 第一部分、前言 1、获取心知天气API接口 2、硬件准备 第二部分、电脑串口助手调试WIFI模块获取天气 1、ESP8266获取天气的流程 2、具体步骤 第三部分、STM32驱动ESP8266模块获取天气数据 1、天气数据的解析 1.1、什么函数来解析天气数据? 2.1、解析后…...
Maven私服
Maven 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的远程仓库(中央仓库、其他远程公共仓库)。 建立了 Maven 私服后,当局域网内的用户需要某个构件时,会按照如下顺序进行请求…...
手写RPC总结篇
协议制定:client到server做交互的通信协议,比如request response 网络端点peer 难点1 : Jetty嵌入 ◆jetty Server ◆ServletContextHandler ◆ServletHolder jetty server 起到网络监听的作用ServletContextHandler注册到jetty server中ServletHolde…...
c++11 标准模板(STL)(std::ios_base)成员类型与常量
流打开模式类型 std::ios_base::openmode typedef /*implementation defined*/ openmode; static constexpr openmode app /*implementation defined*/ static constexpr openmode binary /*implementation defined*/ static constexpr openmode in /*implementation defi…...
我用 ChatGPT 写 2023 高考语文作文:全国卷(一)
【2023】新高考|卷 “好的故事,可以帮我们更好地表达和沟通,可以触动心灵、启迪智慧:好的故事以改变一个人的命运,可以展现一个民族的形象故事是有力量的。” 以上材料引发了你怎样的联想和思考?请写一篇文章 要求&…...
4.java转义符,javadoc 标签
java常用转义字符 在控制台,输入tab键,可以实现命令补全 (如何解决cmd中Tab键不能自动补充的问题?百度一下) \t : 一个制表符,实现对齐功能\n : 换行符\ \ : 一个\\ " :一个"\ ’ : 一个’\r : 一个回车 …...
PinYin4j库的使用
一、PinYin4j库简介 1、PinYin4j简介 Pinyin4j 是一个流行的 Java 库,支持汉字和大多数流行的拼音系统之间的转换(汉语拼音,罗马拼音等)。可自定义拼音输出格式,功能强大。 官网地址:http://pinyin4j.sou…...
日志框架 --- Logback
文章目录 1. 什么是logback2. logback的日志级别3. 日志级别的层级4. logback配置文件4.1 logger标签4.2 root标签4.3 appender标签4.4 filter标签4.5 encoder标签 5. 整体演示5.1 配置文件5.2 运行结果 1. 什么是logback Logback是一个用于Java应用程序的日志框架,…...
QML 与 Python 交互
在 Qt 中,C 和 QML 交互一般有如下三种方法 上下文属性:setContextProperty( )向引擎注册类型:调用 qmlRegisterType( )QML 扩展插件:虽然有很大的灵活性,但是用 Python 创建 QML 插件比较麻烦,所以这种方法…...
React基础教程(三):JSX语法
React基础教程(三):JSX语法 1、JSX简介 全称:JavaScript XMLreact定义的一种类似于XML的JS扩展语法:JSXML本质是React.createElement(component, props, ...children)方法的语法糖作用:用来简化创建虚拟DOM(注意&…...
软件测试岗位都是女孩子在做吗?
听我一朋友说,测试岗位基本都是女孩子做。” 不知道是不是以前“软件测试岗”给人印象是“不需要太多技术含量”的错觉,从而大部分外行认为从业软件测试的人员中女生应占了大多数。比如有人就觉得:软件测试主要是细心活,所以女生…...
ARP协议,带你了解ARP协议
目录 一、ARP协议概述 二、使用ARP的四种情况 三、ARP缓存 四、ARP的工作原理 1. 地址解析 2. 地址缓存 五、ARP报文格式 1. ARP请求报文格式 2. ARP响应报文格式 六、免费ARP 七、代理ARP 一、ARP协议概述 ARP(Address Resolution Protocol)地…...
基于Java汽车客运站管理系统设计实现(源码+lw+部署文档+讲解等)
博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…...
0203使用规则-索引-MySQL
文章目录 1 联合索引1.1 最左前缀法则1.2 范围查询 2 索引失效2.1 常见情况2.2 数据分布影响 3 SQL提示4 覆盖索引和回表查询5 前缀索引6 单列和联合索引7 设计原则结语 1 联合索引 1.1 最左前缀法则 在Mysql数据库中创建了联合索引(或称复合索引,即包含…...
LVS+Keepalived群集
一、Keepalived概述 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。 在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,…...
抖音矩阵系统源代码开发部署--源码搭建
抖音矩阵系统是一个具有强大功能的开放性平台,通过数据挖掘技术能够实现精准的用户画像和个性化推荐,这也是抖音成为国内最受欢迎的短视频平台之一的原因之一。矩阵系统的开发需要大量的技术支持和数据分析,同时也需要综合运用大数据、机器学…...
如何用Jmeter进行接口测试 ,这应该是全网最详细的教程了
一、Jmeter 的使用步骤 打开Jmeter 安装包,进入\bin 中,找到"jmeter.bat", 点击打开即可。 在下图打开的Jmeter 页面中,右键“测试计划” -> “添加” -> "Threads(Users)" -> “线程组”, 建立线…...
C语言---malloc(0)会产生什么结果,真的是空指针吗?
前言 (1)几天前在一个交流群中看到有人说,面试问malloc(0)会怎么样是真的恶心。 (2)这个突然激起了我的好奇心。居然还可以malloc(0)?! (3)经过测试最后,发现…...
从Landsat 8数据到地表温度:劈窗算法实战解析
1. 从Landsat 8数据到地表温度:劈窗算法实战解析 地表温度是研究城市热岛效应、农业干旱监测、气候变化等领域的重要参数。Landsat 8卫星搭载的热红外传感器TIRS(Thermal Infrared Sensor)提供了两个热红外波段(B10和B11ÿ…...
PX4倾转垂起固定翼混控配置与硬件适配实战
1. PX4倾转垂起固定翼的核心概念解析 第一次接触倾转垂起固定翼的朋友可能会被这个名词吓到,其实它的原理并不复杂。简单来说,这是一种既能像多旋翼一样垂直起降,又能像固定翼飞机一样高效巡航的混合飞行器。我经手过的项目中,这种…...
NotebookLM播客化功能上线即爆火(2024Q2内部灰度测试TOP3功能首次公开)
更多请点击: https://intelliparadigm.com 第一章:NotebookLM文档播客化功能详解 NotebookLM 的文档播客化(Doc-to-Podcast)功能将静态文本内容智能转化为自然流畅的语音叙述,支持多角色配音、语速调节与上下文感知停…...
STM32H7网络通信避坑指南:CubeMX配置LWIP 2.1.2时,这几个DCache和ETH的坑你别踩
STM32H7网络通信深度优化:LWIP 2.1.2配置与Cache一致性实战解析 当你在CubeMX中勾选了ETH和LWIP组件,生成代码后却发现设备无法稳定响应ping请求,或者传输大文件时出现数据错乱——这很可能与STM32H7独特的Cache架构有关。本文将带你深入理解…...
36种阀体混线全自动智能分拣方案|3D视觉+机器人柔性制造实践
一、项目背景与行业痛点在高端流体控制设备制造领域,阀体、阀盖的精密分拣是保障产品质量的核心环节。随着工业设备向小型化、高精度方向发展,客户对阀体组件加工误差的控制要求持续提升,传统生产模式面临显著瓶颈:1. 人工分拣效率…...
基于Hammerspoon的macOS光标高亮定位工具实现与优化
1. 项目概述:一个让你不再“找光标”的效率神器你有没有过这样的经历?在27寸甚至更大的显示器上,或者是在多屏工作环境中,眼睛在密密麻麻的代码、文档和浏览器标签之间快速扫视,突然,那个小小的鼠标光标“消…...
GoMCP框架:用Go快速构建AI工具集成服务器
1. 项目概述:GoMCP,一个为Go语言打造的MCP服务器框架如果你正在用Go语言开发AI应用,并且想让你的Claude Desktop、Cursor或者VS Code Copilot能够调用你写的工具、读取你的数据源,那么你很可能已经接触过Model Context Protocol&a…...
模拟ASIC设计:核心技术与工程实践解析
1. 模拟ASIC设计概述模拟ASIC(专用集成电路)作为电子系统的重要组成部分,与数字ASIC相比有着独特的设计挑战和技术特点。在过去的45年里,从Hans Camenzind发明的NE555定时器开始,模拟ASIC已经发展成为现代电子设备不可…...
为什么Detect It Easy成为二进制文件分析的现代选择?
为什么Detect It Easy成为二进制文件分析的现代选择? 【免费下载链接】Detect-It-Easy Program for determining types of files for Windows, Linux and MacOS. 项目地址: https://gitcode.com/gh_mirrors/de/Detect-It-Easy 在恶意软件分析、逆向工程和数字…...
初创公司如何构建高效董事会:从法律合规到战略增长引擎
1. 创业公司的董事会:从法律义务到增长引擎对于很多初次创业的创始人来说,“董事会”这个词听起来可能既遥远又麻烦。它像是公司法条里一个冷冰冰的规定,或者是在融资时不得不向投资人妥协、让渡控制权的象征。尤其是在公司刚起步、团队只有三…...
