JTS库的讲解及使用
JTS(Java Topology Suite)是一套用于创建、操作和分析二维几何对象的Java库。JTS提供了丰富的几何操作和分析功能,是GIS(地理信息系统)应用中的重要工具。以下是JTS库的一些主要功能及其详细使用示例:
1. 添加JTS依赖
如果你使用Maven构建项目,可以在pom.xml中添加以下依赖:
<dependency><groupId>org.locationtech.jts</groupId><artifactId>jts-core</artifactId><version>1.18.2</version>
</dependency>
2. 基本几何对象的创建
JTS提供了多种几何对象,如点(Point)、线串(LineString)和多边形(Polygon)。
import org.locationtech.jts.geom.*;public class JtsBasicExample {public static void main(String[] args) {GeometryFactory geometryFactory = new GeometryFactory();// 创建点对象Point point = geometryFactory.createPoint(new Coordinate(10, 20));// 创建线串对象Coordinate[] lineCoordinates = new Coordinate[] {new Coordinate(10, 20),new Coordinate(30, 40),new Coordinate(50, 60)};LineString lineString = geometryFactory.createLineString(lineCoordinates);// 创建多边形对象Coordinate[] polygonCoordinates = new Coordinate[] {new Coordinate(10, 20),new Coordinate(10, 40),new Coordinate(30, 40),new Coordinate(30, 20),new Coordinate(10, 20)};Polygon polygon = geometryFactory.createPolygon(polygonCoordinates);System.out.println("Point: " + point);System.out.println("LineString: " + lineString);System.out.println("Polygon: " + polygon);}
}
3. 几何操作
JTS提供了一系列几何操作,如缓冲区(Buffer)、相交(Intersection)、并集(Union)和差集(Difference)。
import org.locationtech.jts.geom.*;
import org.locationtech.jts.io.WKTReader;
import org.locationtech.jts.io.ParseException;public class JtsOperationsExample {public static void main(String[] args) {GeometryFactory geometryFactory = new GeometryFactory();// 创建点对象Point point = geometryFactory.createPoint(new Coordinate(10, 20));// 创建线串对象LineString lineString = geometryFactory.createLineString(new Coordinate[] {new Coordinate(10, 20),new Coordinate(30, 40)});// 创建多边形对象Polygon polygon = geometryFactory.createPolygon(new Coordinate[] {new Coordinate(10, 20),new Coordinate(10, 40),new Coordinate(30, 40),new Coordinate(30, 20),new Coordinate(10, 20)});// 缓冲区操作Geometry bufferedPolygon = polygon.buffer(5);System.out.println("Buffered Polygon: " + bufferedPolygon);// 相交操作Geometry intersection = point.intersection(lineString);System.out.println("Intersection: " + intersection);// 并集操作Geometry union = point.union(lineString);System.out.println("Union: " + union);// 差集操作Geometry difference = polygon.difference(lineString);System.out.println("Difference: " + difference);}
}
4. 几何对象的WKT转换
JTS支持将几何对象转换为WKT(Well-Known Text)格式,以及从WKT格式解析几何对象。
import org.locationtech.jts.geom.*;
import org.locationtech.jts.io.WKTReader;
import org.locationtech.jts.io.WKTWriter;
import org.locationtech.jts.io.ParseException;public class JtsWktExample {public static void main(String[] args) {GeometryFactory geometryFactory = new GeometryFactory();WKTWriter writer = new WKTWriter();WKTReader reader = new WKTReader(geometryFactory);// 创建几何对象Point point = geometryFactory.createPoint(new Coordinate(10, 20));String wkt = writer.write(point);System.out.println("WKT of Point: " + wkt);// 从WKT解析几何对象try {Geometry geometry = reader.read("POINT (10 20)");System.out.println("Parsed Geometry: " + geometry);} catch (ParseException e) {e.printStackTrace();}}
}
5. 空间关系与分析
TS提供了丰富的空间关系检查和分析功能,例如判断几何对象是否相交、包含或重叠。
import org.locationtech.jts.geom.*;public class JtsSpatialAnalysisExample {public static void main(String[] args) {GeometryFactory geometryFactory = new GeometryFactory();// 创建两个多边形对象Polygon polygon1 = geometryFactory.createPolygon(new Coordinate[] {new Coordinate(10, 20),new Coordinate(10, 40),new Coordinate(30, 40),new Coordinate(30, 20),new Coordinate(10, 20)});Polygon polygon2 = geometryFactory.createPolygon(new Coordinate[] {new Coordinate(20, 30),new Coordinate(20, 50),new Coordinate(40, 50),new Coordinate(40, 30),new Coordinate(20, 30)});// 判断是否相交boolean intersects = polygon1.intersects(polygon2);System.out.println("Intersects: " + intersects);// 判断是否包含boolean contains = polygon1.contains(polygon2);System.out.println("Contains: " + contains);// 判断是否重叠boolean overlaps = polygon1.overlaps(polygon2);System.out.println("Overlaps: " + overlaps);}
}
总结
JTS(Java Topology Suite)库是一个强大的几何处理工具,提供了丰富的几何对象创建、操作和分析功能。通过JTS,你可以进行各种几何计算和空间分析,并将几何对象转换为标准的WKT格式以便于存储和传输。在实际应用中,JTS广泛用于地理信息系统(GIS)、地图服务和空间数据处理等领域。
相关文章:
JTS库的讲解及使用
JTS(Java Topology Suite)是一套用于创建、操作和分析二维几何对象的Java库。JTS提供了丰富的几何操作和分析功能,是GIS(地理信息系统)应用中的重要工具。以下是JTS库的一些主要功能及其详细使用示例: 1. …...

【C++杂货铺】unordered系列容器
目录 🌈 前言🌈 📁 unordered系列关联式容器 📁 底层结构 📂 哈希概念 📂 哈希冲突 📂 哈希函数 📂 哈希冲突解决 📁 模拟实现 📁 总结 🌈 前…...

模板-初阶
引言: 在C,我们已经学过了函数重载,这使得同名函数具有多个功能。但是还有一种更省力的方法:采用模板。 本文主要介绍以下内容 1. 泛型编程 2. 函数模板 3. 类模板 1.泛型编程 在将这一部分之前,通过一个故事引…...

重载运算符C++---学习笔记
一、笔记 1. 重载运算符基础知识 重载运算符进行的运算和普通数的加减运算不同之处在于重载运算符的操作数为一个一个自定义的对象,所以相应的要对普通的运算符如-*%/的调用方法进行重写,重载的本质还是函数调用 2. 重载运算符的语法 重载运算符的语…...

SpringMVC枚举类型字段处理
在日常的项目开发中经常会遇到一些取值范围固定的字段,例如性别、证件类型、会员等级等,此时我们可以利用枚举来最大程度减少字段的乱定义,统一管理枚举的值。 SpringMVC中对于枚举也有默认的处理策略: 对于RequestParam…...

集成算法:Bagging模型、AdaBoost模型和Stacking模型
概述 目的:让机器学习效果更好,单个不行,集成多个 集成算法 Bagging:训练多个分类器取平均 f ( x ) 1 / M ∑ m 1 M f m ( x ) f(x)1/M\sum^M_{m1}{f_m(x)} f(x)1/M∑m1Mfm(x) Boosting:从弱学习器开始加强&am…...
DW怎么Python:探索Dreamweaver与Python的交织世界
DW怎么Python:探索Dreamweaver与Python的交织世界 在数字世界的广袤天地中,Dreamweaver(简称DW)与Python这两大工具各自闪耀着独特的光芒。DW以其强大的网页设计和开发能力著称,而Python则以其简洁、易读和强大的编程…...

算法(十三)回溯算法---N皇后问题
文章目录 算法概念经典例子 - N皇后问题什么是N皇后问题?实现思路 算法概念 回溯算法是类似枚举的深度优先搜索尝试过程,主要是再搜索尝试中寻找问题的解,当发生不满足求解条件时,就会”回溯“返回(也就是递归返回&am…...

论文阅读:Correcting Motion Distortion for LIDAR HD-Map Localization
目录 概要 Motivation 整体架构流程 技术细节 小结 论文地址:http://arxiv.org/pdf/2308.13694.pdf 代码地址:https://github.com/mcdermatt/VICET 概要 激光雷达的畸变矫正是一个非常重要的工作。由于扫描式激光雷达传感器需要有限的时间来创建…...

Git操作笔记
学git已经好多次了。但是还是会忘记很多的东西,一些常用的操作命令和遇到的bug以后在这边记录汇总下 一.github图片展示 图片挂载,我是创建了一个库专门存图片,然后在github的md中用专用命令展示图片,这样你的md就不会全是文字那…...
使用Python进行数据分析的基本步骤
简介: 在当今的数据驱动世界中,数据分析已成为各行各业不可或缺的一部分。Python作为一种强大的编程语言,提供了丰富的库和工具,使得数据分析变得简单易行。本文将带你了解使用Python进行数据分析的基本步骤。 一、数据获取 从外…...

NGINX优化
NGINX优化分为两个方面: 一. nginx应用配置文件的优化: 1.nginx的性能优化: 全局块: 设置工作进程数: work_processes #设置工作进程数 设置工作进程连接数:work_rilmit_nofile #设置每个worker进程最大可…...

【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
【LeetCode刷题】Day 13 题目1:852.山脉数组的峰顶索引思路分析:思路1:暴力枚举O(N)思路2:二分查找O(logN) 题目2:162.寻找峰值思路分析:思路1:二分查找O(logN) 题目1:852.山脉数组的…...
《Python学习》-- 实操篇一
一、文件操作 1. 1 读取文本文件 # 文件操作模式 # r (默认) - 只读模式。文件必须存在,否则会抛出FileNotFoundError。在这种模式下,你只能读取文件内容,不能写入或追加。 # w - 写入模式。如果文件存在,内容会被清空ÿ…...
C# 集合(二) —— List/Queue类
总目录 C# 语法总目录 集合二 List/Queue 1. List2. Queue 1. List List有ArrayList和LinkedList ArrayList 类似数组,查找快,插入删除慢(相对)LinkedList 类似双向链表,查找慢(相对),插入删除快 //ArrayList //ArrayList Arr…...
【TB作品】MSP430 G2553 单片机口袋板,读取单片机P1.4电压显示,ADC
功能 读取P1.4电压,显示到口袋板显示屏,电压越高亮灯越多。 部分程序 while (1){ADC10CTL0 | ENC ADC10SC; // Sampling and conversion startLPM0;adcvalue ADC10MEM; //原始数据 0到1023adtest (float) adcvalue / 1024.…...

知乎x-zse-96、x-zse-81
声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wx a15018601872 本文章未…...

【Linux】Linux工具——yum,vim
1.Linux 软件包管理器——yum Linux安装软件: 源代码安装(不建议)rpm安装(类似Linux安装包,版本可能不兼容,不推荐,容易报错)yum安装(解决了安装源,安装版本&…...

ES 生命周期管理
一 .概念 ILM定义了四个生命周期阶段:Hot:正在积极地更新和查询索引。Warm:不再更新索引,但仍在查询。cold:不再更新索引,很少查询。信息仍然需要可搜索,但是如果这些查询速度较慢也可以。Dele…...
【JavaScript脚本宇宙】揭秘HTTP请求库:深入理解它们的特性与应用
深度揭秘:六大HTTP请求库的比较与应用 前言 在这篇文章中,我们将探讨六种主要的HTTP请求库。这些库为处理网络请求提供了不同的工具和功能,包括Axios、Fetch API、Request、SuperAgent、Got和Node-fetch。通过本文,你将对每个库…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...

windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...

未授权访问事件频发,我们应当如何应对?
在当下,数据已成为企业和组织的核心资产,是推动业务发展、决策制定以及创新的关键驱动力。然而,未授权访问这一隐匿的安全威胁,正如同高悬的达摩克利斯之剑,时刻威胁着数据的安全,一旦触发,便可…...