【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 | Documentationhttps://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;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/29766.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows11 安装 CUDA/cuDNN+Pytorch

一、准备工作&#xff1a; 查看torch版本&#xff1a;进入python交互环境&#xff1a; >>>import torch >>>torch.__version__ 查看cuda版本&#xff1a;CMD窗口 nvcc --version 如果版本不一致&#xff0c;需要卸载再重装。 二、安装 Windows 安装 CU…

unity制作愤怒的小鸟

文章目录 一、 介绍SpringJoint2D 、line renderer制作发射绳基类bird脚本的基础功能给bird添加飞行拖尾效果pig类游戏胜利的小星星烟花界面摄像机跟随移动游戏失败的界面多种小鸟的制作&#xff1a;黄鸟、绿鸟、黑鸟地图选择关卡选择数据保存制作多个关卡场景异步加载游戏全局…

go 调试利器之pprof指标分析

文章目录 概要一、指标类型1.1、堆栈指标1.2、CPU指标分析1.3、http-pprof 二、go tool pprof2.1、可视化2.2、CPU火焰图 概要 Go语言原生支持对于程序运行时重要指标或特征进行分析。pprof是其中一种重要的工具&#xff0c;其不仅可以分析程序运行时的错误&#xff08;内存泄…

绕过激活锁 ,拯救一台旧手机iphone

一台旧的iphone忘了apple id账号和密码了&#xff0c;导致锁住了 某宝上解锁要花50&#xff0c; 不是舍不得花钱&#xff0c;作为一个搞技术的&#xff0c;实在觉得花钱有点丢人 经过一番探索 最终确定了有用的流程 并贴出来 亲测可用 最终实现了趟再床上就可以打卡 1、 刷机 …

【软件测试】性能测试服务端—排查指标问题(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 软件性能测试的目…

node安装后的全局环境变量配置

安装node时&#xff0c;位置最好不要装在c盘&#xff0c;这里&#xff0c;我在D盘下创建了文件夹"node"&#xff0c;安装地址选择在该文件夹下 一直next&#xff0c;直到安装结束&#xff0c;打开"node"文件夹&#xff0c;安装完后&#xff0c;里面的配置…

未来10年,网络安全人才就业的黄金期

随着大数据、物联网、人工智能等新技术的发展&#xff0c;信息技术与经济社会各领域的融合也更加深入。网络攻击行为日趋复杂、黑客攻击行为组织性更强、针对手机无线终端的网络攻击日趋严重&#xff0c;近几年有关网络攻击和数据泄露的新闻层出不穷。因此&#xff0c;随着国家…

Nodejs一、初识

零、文章目录 Nodejs一、初识 1、初识 Node.js &#xff08;1&#xff09;回顾与思考 浏览器中的 JavaScript 的组成部分 为什么 JavaScript 可以在浏览器中被执行 为什么 JavaScript 可以操作 DOM 和 BOM 浏览器中的 JavaScript 运行环境 JavaScript 能否做后端开发&#…

MySQL - 第0节 - MySQL在Centos 7环境安装

目录 1.安装前说明 2.MySQL在Centos 7环境安装 2.1.卸载不要的环境 2.2.配置mysql官方yum源 2.3.检查yum源能否正常工作 2.4.安装mysql 2.5.检查mysql是否安装成功 2.6.启动mysqld数据库服务端 2.7.三种登录方法 2.7.1.登陆方法一 2.7.2.登陆方法二 2.7.3.登陆方法…

Pandas+Pyecharts | 中国高校及专业数据分析可视化

文章目录 &#x1f3f3;️‍&#x1f308; 1. 导入模块&#x1f3f3;️‍&#x1f308; 2. Pandas数据处理2.1 读取数据 &#x1f3f3;️‍&#x1f308; 3. Pyecharts数据可视化3.1 全国高校分布地图3.2 全国高校分布城市地图3.3 本科/专科占比3.4 985/211/双一流高校数量占比…

【考研复习】李春葆新编C语言习题与解析(错误答案订正)持续更新

新编C语言习题与解析 做习题时发现有些错误答案&#xff0c;写篇博客进行改正记录。不对地方欢迎指正&#xff5e; 第二章 C. 其中b的表达形式错误&#xff0c;若加上0x1e2b则正确。所以C错误。 D. e后为整数。指数命名规则&#xff1a;e前有数&#xff0c;后有整数。所以D错…

【CEEMDAN-CNN-LSTM】完备集合经验模态分解-卷积神经长短时记忆神经网络研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

getopt函数和getopt_long函数

这个函数有点像无限迷宫&#xff0c;正确的路和错误的路都有很多&#xff0c;我们只需要能够满足当前需求就可以了&#xff0c;完全没有必要去探索每一条路。虽然&#xff0c;我很久以前试图这样干过。过滤后的回忆&#xff0c;只剩感觉了&#xff0c;过滤的多了&#xff0c;感…

【简单便捷】解决Ubuntu内存不足问题:Ubuntu16.0.4 进行内存扩容

文章目录 电脑环境前言一、总述二、先在标题&#xff1a;虚拟机-->设置上进行扩容三、扩容之后 打开终端 执行 sudo apt install gparted四、执行 sudo gparted五、扩容成功六、重启测试 可以看到大概率成功了。 电脑环境 Windows 11 专业版系统 前言 在开发初期&#xf…

二叉树的相关操作

一.二叉树 本文的数据结构基于C语言练习。 C语言中的二叉树是一种数据结构&#xff0c;用于表示具有层次关系的数据集合。它由一个根节点开始&#xff0c;每个节点最多有两个子节点&#xff0c;分别称为左子节点和右子节点。 二叉树有许多相关性质&#xff0c;其中一些重要的包…

【CSS---定位基础篇】

CSS---定位基础篇 CSS-----基础定位:一 、 学习定位原因&#xff1a;&#xff08;定位的作用&#xff09;二 、定位组成&#xff1a;2.1 四种定位模式&#xff1a;&#xff08;1&#xff09;静态定位&#xff08;了解&#xff09;&#xff1a;&#xff08;2&#xff09;相对定位…

ElasticSearch笔记02-ElasticSearch入门

ElasticSearch安装 下载软件 ElasticSearch的官网&#xff0c;视频教程里用的Version是7.8.0&#xff0c;所以&#xff0c;我们也是用7.8.0版本的ElasticSearch。 下载地址&#xff1a;https://www.elastic.co/cn/downloads/past-releases#elasticsearch&#xff0c;然后搜索…

lua的元表与元方法理解

元表 在 Lua 中&#xff0c;元表&#xff08;metatable&#xff09;是一种特殊的表&#xff0c;用于定义另一个表的行为。每个表都有一个关联的元表&#xff0c;通过元表可以重载表的各种操作&#xff0c;例如索引、新索引、相加等。在 Lua 中&#xff0c;元表的使用非常灵活&…

二、线性神经网络

文章目录 前言一、线性回归1. 线性回归的基本元素1.1 线性模型1.2 损失函数1.3 解析解1.4 梯度下降1.5 用模型进行预测 2. 正态分布与平方损失3. 从线性回归到深度网络 二、线性回归的代码实现1. 生成数据集2. 读取数据集2.1 手动实现读取数据集2.2 简洁实现读取数据集 3. 初始…

基于SpringBoot+Vue的自习室预订系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…