Geotools系列说明之JTS空间几何介绍

JTS介绍

The JTS Topology Suite is a Java API that implements a core set of spatial data operations
using an explicit precision model and robust geometric algorithms. It provides a complete
model for specifying 2-D linear Geometry. Many common operations in computational
geometry and spatial data processing are exposed in a clear, consistent and integrated API.
JTS is intended to be used in the development of applications that support the validation,
cleaning, integration and querying of spatial datasets.

This document is intended for developers who would like to use JTS to accomplish their
spatial data processing requirements. It describes common uses of the JTS API and gives
code examples
官方说它是一个java的api用来计算几何空间的操作工具
源码地址文档在doc目录下
在这里插入图片描述

JTS在Geotools中的使用

下载Geotoos的源码我们可以看到GeoTools使用了JTS的类
在这里插入图片描述
即Geotools依赖JTS的包
在这里插入图片描述
根据上述依赖关系可以知道Geomerty是所有图形的父类

  1. 创建Point点
GeometryFactory geometryFactory = new GeometryFactory();Point point = geometryFactory.createPoint(transform(new Coordinate(113.549006,22.388645), 4490, 3857)); //可以将4490坐标系进行转换成3857
  1. 创建线段
  /*** 生成线段* @param wkt* @return* @throws ParseException*/public static LineString createLineString(String wkt) throws ParseException {WKTReader reader = new WKTReader( geometryFactory );return (LineString) reader.read(wkt);}/*** 生成线段* @param coords* @return*/public static LineString createLineString(Coordinate[] coords) {GeometryFactory geometryFactory = new GeometryFactory(new PrecisionModel(),4326);return geometryFactory.createLineString(coords);}
  1. 创建多边形Polygon
   /*** 根据左上和右下创建矩形* @param leftBottom* @param rightTop* @return*/public static Polygon createRectangle(Coordinate leftBottom, Coordinate rightTop){GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();// 创建矩形的边Coordinate[] coordinates = new Coordinate[]{leftBottom,new Coordinate(rightTop.x, leftBottom.y), // 左上角rightTop,new Coordinate(leftBottom.x, rightTop.y), // 右下角leftBottom // 闭合};//Polygon polygon = geometryFactory.createPolygon(polygonCoordinates);// 创建Polygon// 输出Polygon的WKT表示return geometryFactory.createPolygon(coordinates);}

详见GeometryFactory类,这个类就是工厂类创建在这里插入图片描述
创建完成图形后就可以使用以上方法判断多变的情况

disjoint(), //不相交 几何形状的点不相交
touches(), // 接触 几何形状接触
equals()// 几何形状拓扑上相等。
intersects(),//相交		
crosses(),//交叉
within(),//内涵
contains(),//包含
overlaps()//重叠
示例

判断点在不在多边形内

    /*** 判断是否在多边形区域内* @param latitude 经度* @param longitude 纬度* @param polygonCoordinates 多边形点集合 多边形要闭合才可以* @return*/public static boolean isPointInPolygon(double longitude, double latitude, Coordinate[] polygonCoordinates) {GeometryFactory geometryFactory = new GeometryFactory();Point point = geometryFactory.createPoint(new Coordinate(longitude, latitude));Polygon polygon = geometryFactory.createPolygon(polygonCoordinates);return polygon.touches(point) || polygon.contains(point);}

判断点在不在线段上
这里要注意是通过把经纬度变成一个区域和线段进行相交等其他判断

    /*** 判断点在不在线段上** @param longitude* @param latitude* @param lineString* @return*/public static boolean isSegmentInPolygon(double longitude, double latitude, LineString lineString) {GeometryFactory geometryFactory = new GeometryFactory();Point point = geometryFactory.createPoint(transform(new Coordinate(longitude,latitude),4326,3857));LineString targetLinString = transform(lineString.toText(), 4326, 3857);double distance = targetLinString.distance(point);log.debug("点到直线的距离是:{}",distance);//a polygonal geometry representing the buffer region (which may be empty)Geometry buffer = point.buffer( ConstantUtil.ROUTE_LIMIT );//        return targetLinString.isWithinDistance(point,ConstantUtil.ROUTE_LIMIT);
//        return true;return targetLinString.touches(buffer)||targetLinString.crosses(buffer)||targetLinString.intersects(buffer);}

JTS中的距离计算

在进行距离计算的时候我们首先要把经纬度进行转换转换方案可参考上一篇博客内容,当完成转换后我们就可以通过JTS提供的api进行距离的计算,如下:

  GeometryFactory geometryFactory = new GeometryFactory();Point point = geometryFactory.createPoint(transform(new Coordinate(113.549006,22.388645), 4490, 3857));System.out.println(point);Point point1 = geometryFactory.createPoint(transform(new Coordinate(113.541006, 22.388645),4490,3857));
//        System.out.println(transform(point1.toText(), 4326, 4490).toString());System.out.println(point1.distance(point));

点到线、点到点、点到面、面到到面都可以通过这个示例进行计算。
在这里插入图片描述
观察JTS的源码可以知道只要继承了Geometry就可以使用这些方法了。

三维中的几何距离计算

有时候我们需要计算三维的距离,但是目前的Geometry方法提供了二维的计算,通过jts的源码我们可以找到JTS已经支持了三维的空间距离计算如下图:
在这里插入图片描述
JTS提供了三维图像的计算示例如下:

 GeometryFactory geometryFactory = new GeometryFactory();Point point = geometryFactory.createPoint(transform(new Coordinate(longitude,latitude,height),4326,3857));LineString targetLinString = transform(genderLineStrWkt(lineString.getCoordinates()), 4326, 3857);double distance = targetLinString.distance(point);log.debug("点到直线的距离是:{}",distance);
//        Geometry buffer = point.buffer( ConstantUtil.ROUTE_LIMIT );
//        LinearRing 可以是任意的多边形double distance1 = Distance3DOp.distance(point, targetLinString);

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt的入门

Qt的入门 1.Qt的配置2.介绍Qt的使用2.1 Qt 5.14.22.2 Linguist 5.14.22.3Designer 5.14.22.4 Assistant 5.14.22.5 Qt Creator 4.11.1 3.创建第一个项目3.1点击文件来新建一个新的文件或项目3.2选择项目路径和名称3.3选择构建工具3.4类信息3.5翻译文件3.6选择编译器3.7项目管理…

在navicat对mysql声明无符号字段

1.无符号设置 在 MySQL 中,我们可以使用 UNSIGNED 属性来设置列的无符号属性,这意味着该列只能存储非负整数值。对于一些需要存储正整数的列,比如年龄、数量等,使用 UNSIGNED 属性可以提高数据存储和查询的效率,并且能…

智能工业网络,需要何种工业以太网交换机作为支撑?

随着工业企业数字化及信息化的进一步深化升级,工业领域相关控制及信息系统的业务类型不断增加、复杂性不断提升,工业控制网络与工业信息网络也呈现融合趋势,具备支持多业务、多协议、多厂商设备和数据的互联互通、共网承载以及高质量传输能力…

【源码+文档+调试讲解】actual self 服装店的设计与实现

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统服装销售信息管理难度大,容错率低&#xff0c…

VSCode + GDB + J-Link 单片机程序调试实践

VSCode GDB J-Link 单片机程序调试实践 本文介绍如何创建VSCode的调试配置,如何控制调试过程,如何查看修改各种变量。 安装调试插件 在 VSCode 扩展窗口搜索安装 Cortex-Debug插件 创建调试配置 在 Run and Debug 窗口点击 create a launch.json …

【单片机毕业设计11-基于stm32c8t6的智能水质检测】

【单片机毕业设计11-基于stm32c8t6的智能水质检测】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 🔥这里是小殷学长,单片机毕业设计篇11基于stm32的智能水质检测系统 🧿创作不易,拒绝白嫖可私 一、功能介绍 -------------…

Java----面向对象----总复习

面向对象 面向对象的程序设计思想(Object Oriented Programming),简称OOP.是一种设计者思想.关注的焦点是类,参照现实中的事务,将事务的属性特征,行为抽象出来,用类来表示.代码结构:以类为组织单位,每种事务都有自己的属性和行为,功能, 思想:从宏观上 帮助我们把握,整体分析整…

Bazel plugin for Visual Studio Code

语法突出显示 Bazel Build Targets 树显示工作区中的构建包/目标BUILD 文件中的 CodeLens 链接可通过单击目标直接启动构建或测试Buildifier 集成以检查和格式化您的 Bazel 文件(需要安装 Buildifier)tasks.json 的 Bazel Task 定义在构建期间调试 .bzl…

C++:静态断言内存对齐

静态断言 C中的断言assert (1)直接参考:https://www.cnblogs.com/lvchaoshun/p/7816288.html (2)C的assert是运行时检测发现错误,而不是编译时 (3)C在编译时错误用#error来输出C静态断言 (1)C引入static_assert(表达式, “提示字符串”)来实现编译时的静…

window搭建git环境

1.下载安装window下git专用软件scm 从Git for Windows 官网网站下载,并且一路安装即可 安装成功后通过桌面快捷图标Git Bash点击打开 安装后软件应该会自动帮助配置环境变量,如果没有需要自己配置使用 2.git环境配置 2.1设置姓名和邮箱(github上你注…

封装了一个iOS滚动厨窗效果

效果图 背景 我们要实现如图的厨窗效果,不能通过在tableView底部添加一个背景图片的方式,因为这需要修改整个tableView的背景色为透明,影响到的范围太大,只能将这个效果局限在这个cell 中,然后通过监听tableView的滚动…

追觅科技25届校招校招24年社招科技北森题库商业推理综合测评答题攻略、通关技巧

一、追觅科技这家公司怎么样? 追觅科技是一家在智能清洁家电领域表现出色的企业。 二、追觅科技待遇怎么样 追觅科技的待遇在业内具有竞争力,具体信息如下: 1. **薪酬结构**:根据对外经济贸易大学招生就业处发布的2023届校园招…

虹科技术丨跨越距离障碍:PCAN系列网关在远程CAN网络通信的应用潜力

来源:虹科技术丨跨越距离障碍:PCAN系列网关在远程CAN网络通信的应用潜力 原文链接:虹科技术 | 跨越距离障碍:PCAN系列网关在远程CAN网络通信的应用潜力 欢迎关注虹科,为您提供最新资讯! #PCAN #网关 #CA…

Flask之电子邮件

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 目录 一、使用Flask-Mail发送电子邮件 1.1、配置Flask-Mail 1.2、构建邮件数据 1.3、发送邮件 二、使用事务邮件服务SendGrid 2.1、注册SendGr…

最新源支付系统源码 V7版全开源 免授权 附搭建教程

最新源支付系统源码_V7版全开源_免授权_附详细搭建教程_站长亲测 YPay是专为个人站长打造的聚合免签系统,拥有卓越的性能和丰富的功能。它采用全新轻量化的界面UI,让您能更方便快捷地解决知识付费和运营赞助的难题。同时,它基于高性能的thin…

TypeScript学习笔记(全)

文章目录 TypeScript入门2.编译并运行TS代码2.1.简化运行ts步骤 3.TS中的常用类型3.1.TS中的类型注解3.2.TS中的原始类型3.3.TS中的数组类型3.4.TS中的联合类型3.5.类型别名3.6.函数类型3.6.1.单独执行参数、返回值类型3.6.2.同时指定参数,返回值类型3.6.3.函数的vo…

广东省钟表行业协会第十二届会员大会暨2024年钟表行业发展交流会

6月25日广东省钟表行业协会第十二届会员大会暨2024年钟表行业发展交流会在广州万富希尔顿酒店隆重召开。大会选举沙胜昔为广东省钟表行业协会第十二届理事会会长。 领导发言 新任会长 沙胜昔 首席荣誉会长 吴伟阳 新老会长交接仪式 本次大会,全国钟表大伽齐参与…

前端Web开发HTML5+CSS3+移动web视频教程 Day3 CSS 第1天

P29 - P43 从此开始进入 CSS 的学习。前面都是 HTML 的学习。 CSS 的作用:美化。 HTML 只是规定了网页内容有哪些,在网页中显示的位置默认是从上到下显示,还带有默认效果,比如超链接有颜色有下划线,无序列表有小圆点…

CSS Flex弹性布局

一、传统布局与flex布局 1、传统布局 2、flex布局 二、flex布局原理 1、布局原理 2、flex布局体验 三、flex布局父项常见属性 1、常见的父项属性 2、flex-direction设置主轴的方向 3、justify-content 设置主轴上的子元素排列方式 4、flex-wrap 设置子元素是否换行 …

二叉树从根节点出发的所有路径

二叉树从根节点出发的所有路径 看上图中 二叉树结构 从根节点出发的所有路径 如下 6->4->2->1 6->4->2->3 6->4->5 6->8->7 6->8->9 逻辑思路: 按照先序遍历 加 回溯法 实现 代码如下 // 调用此方法,将根节点传递…