executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
jtsUse when performing precise 2D computational geometry in Java — spatial predicates (contains, intersects), overlay operations, buffering, triangulation. JTS (Java Topology Suite): the canonical geometry engine used as blueprint for GEOS, Shapely, and NetTopologySuite.
Independent GitHub snapshot · Automated classification · Original documentation governs
name: jts description: "Use when performing precise 2D computational geometry in Java — spatial predicates (contains, intersects), overlay operations, buffering, triangulation. JTS (Java Topology Suite): the canonical geometry engine used as blueprint for GEOS, Shapely, and NetTopologySuite."
tags:
项目地址: https://github.com/locationtech/jts
Maven Central:
org.locationtech.jts:jts-core许可证: Eclipse Public License 2.0 / Eclipse Distribution License 1.0(BSD 风格)
JTS Topology Suite(简称 JTS)是 LocationTech 项目组下的开源 Java 二维矢量几何库,是 GeoTools、GeoServer 等众多开源 GIS 项目的几何计算核心。它提供:
环境要求: JDK 8+
<properties>
<jts.version>1.20.0</jts.version><!-- Maven Central 最新稳定版;列表见 https://central.sonatype.com/artifact/org.locationtech.jts/jts-core -->
</properties>
<dependency>
<groupId>org.locationtech.jts</groupId>
<artifactId>jts-core</artifactId>
<version>${jts.version}</version>
</dependency>
如需 GeoJSON 等 I/O 支持:
<dependency>
<groupId>org.locationtech.jts.io</groupId>
<artifactId>jts-io-common</artifactId>
<version>${jts.version}</version>
</dependency>
implementation 'org.locationtech.jts:jts-core:1.20.0'
implementation 'org.locationtech.jts.io:jts-io-common:1.20.0'
| 模块 | artifactId | 用途 |
|---|---|---|
| jts-core | jts-core | ★ 核心——几何模型、算法、空间操作、索引 |
| jts-io-common | jts-io-common | 通用 I/O:WKT、WKB、GeoJSON 读写 |
| jts-io-ora | jts-io-ora | Oracle Spatial SDO_GEOMETRY 读写——源码模块,需 -Pall(oracle profile)本地构建,未发布到 Maven Central |
| jts-io-sde | jts-io-sde | ArcSDE 几何读写——源码保留,构建中已注释禁用,无发布产物 |
| 类 | 包 | 用途 |
|---|---|---|
GeometryFactory | org.locationtech.jts.geom | ★ 推荐入口——创建所有几何对象的工厂 |
Geometry | org.locationtech.jts.geom | 几何抽象基类,提供空间操作与关系判断方法 |
Point | org.locationtech.jts.geom | 点(0 维) |
LineString | org.locationtech.jts.geom | 线串(1 维) |
LinearRing | org.locationtech.jts.geom | 闭合线环(用于构建 Polygon) |
Polygon | org.locationtech.jts.geom | 面(2 维,含外环与可选内环) |
MultiPoint | org.locationtech.jts.geom | 多点集合 |
MultiLineString | org.locationtech.jts.geom | 多线集合 |
MultiPolygon | org.locationtech.jts.geom | 多面集合 |
GeometryCollection | org.locationtech.jts.geom | 任意几何集合 |
Coordinate | org.locationtech.jts.geom | 坐标值(x, y, z) |
Envelope | org.locationtech.jts.geom | 外接矩形(MBR) |
PrecisionModel | org.locationtech.jts.geom | 坐标精度模型 |
WKTReader | org.locationtech.jts.io | WKT 格式解析 |
WKTWriter | org.locationtech.jts.io | WKT 格式输出 |
WKBReader | org.locationtech.jts.io | WKB 格式解析 |
WKBWriter | org.locationtech.jts.io | WKB 格式输出 |
GeoJsonReader | org.locationtech.jts.io.geojson | GeoJSON 解析 |
GeoJsonWriter | org.locationtech.jts.io.geojson | GeoJSON 输出 |
STRtree | org.locationtech.jts.index.strtree | R-tree 空间索引(批量加载,查询高效) |
Quadtree | org.locationtech.jts.index.quadtree | 四叉树空间索引(支持动态插入删除) |
PreparedGeometry | org.locationtech.jts.geom.prep | 预处理几何,加速重复空间关系判断 |
PreparedGeometryFactory | org.locationtech.jts.geom.prep | 创建 PreparedGeometry 的工厂 |
BufferOp | org.locationtech.jts.operation.buffer | 缓冲区运算(可精细控制端头、连接样式) |
OverlayNGRobust | org.locationtech.jts.operation.overlayng | 鲁棒叠加运算(推荐使用的新一代叠加引擎) |
TopologyPreservingSimplifier | org.locationtech.jts.simplify | 保持拓扑的几何简化 |
DouglasPeuckerSimplifier | org.locationtech.jts.simplify | Douglas-Peucker 几何简化 |
IsValidOp | org.locationtech.jts.operation.valid | 几何有效性检测 |
LengthIndexedLine | org.locationtech.jts.linearref | 按长度进行线性参考 |
LocationIndexedLine | org.locationtech.jts.linearref | 按位置进行线性参考 |
import org.locationtech.jts.geom.*;
GeometryFactory gf = new GeometryFactory();
// 点
Point point = gf.createPoint(new Coordinate(116.4, 39.9));
// 带 Z 值的点
Point point3d = gf.createPoint(new Coordinate(116.4, 39.9, 50.0));
// 线串
LineString line = gf.createLineString(new Coordinate[]{
new Coordinate(0, 0),
new Coordinate(10, 10),
new Coordinate(20, 0)
});
// 线环(必须闭合)
LinearRing ring = gf.createLinearRing(new Coordinate[]{
new Coordinate(0, 0), new Coordinate(10, 0),
new Coordinate(10, 10), new Coordinate(0, 10),
new Coordinate(0, 0) // 首尾相同
});
// 面(无洞)
Polygon polygon = gf.createPolygon(new Coordinate[]{
new Coordinate(0, 0), new Coordinate(10, 0),
new Coordinate(10, 10), new Coordinate(0, 10),
new Coordinate(0, 0)
});
// 面(带洞)
LinearRing shell = gf.createLinearRing(new Coordinate[]{
new Coordinate(0, 0), new Coordinate(20, 0),
new Coordinate(20, 20), new Coordinate(0, 20),
new Coordinate(0, 0)
});
LinearRing hole = gf.createLinearRing(new Coordinate[]{
new Coordinate(5, 5), new Coordinate(15, 5),
new Coordinate(15, 15), new Coordinate(5, 15),
new Coordinate(5, 5)
});
Polygon polygonWithHole = gf.createPolygon(shell, new LinearRing[]{hole});
// 多点
MultiPoint multiPoint = gf.createMultiPointFromCoords(new Coordinate[]{
new Coordinate(1, 2), new Coordinate(3, 4)
});
// 多线
MultiLineString multiLine = gf.createMultiLineString(new LineString[]{line});
// 多面
MultiPolygon multiPolygon = gf.createMultiPolygon(new Polygon[]{polygon});
// 几何集合
GeometryCollection gc = gf.createGeometryCollection(new Geometry[]{point, line, polygon});
空间关系、集合运算、几何分析、格式读写与空间索引的完整参考见 reference/geometry-operations.md
| 场景 | 关键类 / 方法 |
|---|---|
| 创建几何对象 | GeometryFactory.createPoint() / createLineString() / createPolygon() |
| 地理围栏 / 点在面内判断 | Geometry.contains() / within(),高频场景用 PreparedGeometry |
| 计算两个几何的距离 | Geometry.distance() |
| 缓冲区分析 | Geometry.buffer() 或 BufferOp |
| 面叠加分析(交并差) | Geometry.intersection() / union() / difference() |
| 鲁棒叠加运算 | OverlayNGRobust.overlay() |
| 几何格式互转 | WKTReader / WKTWriter / WKBReader / WKBWriter / GeoJsonReader / GeoJsonWriter |
| 批量空间查询加速 | STRtree / Quadtree |
| 最近邻搜索 | STRtree.nearestNeighbour() |
| 几何简化(抽稀) | TopologyPreservingSimplifier / DouglasPeuckerSimplifier |
| 几何有效性校验与修复 | IsValidOp / GeometryFixer |
| 线性参考 / 沿线定位 | LengthIndexedLine / LocationIndexedLine |
| 凸包计算 | Geometry.convexHull() |
| 几何仿射变换 | AffineTransformation |
| 数据库 WKB 交互 | WKBReader.hexToBytes() / WKBWriter.toHex() |
new Point(),始终通过 GeometryFactory 的工厂方法创建几何对象。(x, y) 即 (经度, 纬度) 的顺序,注意与某些 GIS 系统的 (纬度, 经度) 区分。geometry.isValid() 检查有效性,无效几何可用 GeometryFixer.fix() 修复。STRtree;重复空间关系判断使用 PreparedGeometry;大量几何合并使用 UnaryUnionOp。GeometryFactory 是线程安全的;Geometry 对象本身不可变,可安全共享;但 Reader/Writer 实例非线程安全,需为每个线程创建独立实例。com.vividsolutions.jts 迁移为 org.locationtech.jts,注意旧代码升级。OverlayNGRobust,它比传统叠加引擎更加鲁棒,能处理更多边界情况。GeometryFactory 工厂方法创建,不要直接 newPreparedGeometry 加速批量 contains/intersects 判断STRtree 建空间索引后查询(x, y) 即 (经度, 纬度),注意与部分 GIS 系统的 (y, x) 区分OverlayNGRobust.overlay(),比传统方法更鲁棒GeometryFactory 和 Geometry 线程安全;Reader/Writer 非线程安全isValid() 检查后用 GeometryFixer.fix() 修复