Skip to content
OpenSmartRoute
Skillv1.0.0

jts

Use when performing precise 2D computational geometry in Java — spatial predicates (contains, intersects), overlay operations, buffering, triangulation. JTS (Java Topology Suite): the canonical geomet

by znlgis(0) 0 installs
Free
Sign in to install

Free account. Installing gives you the manifest plus copy-paste snippets.

See reviews

About

Imported from znlgis/opengis-skills (gis/jts/SKILL.md). Install upstream with npx skills add znlgis/opengis-skills --skill jts. Copyright stays with the author.

项目地址: https://github.com/locationtech/jts

Maven Central: org.locationtech.jts:jts-core

许可证: Eclipse Public License 2.0 / Eclipse Distribution License 1.0(BSD 风格)

Javadoc: https://locationtech.github.io/jts/javadoc

概述

JTS Topology Suite(简称 JTS)是 LocationTech 项目组下的开源 Java 二维矢量几何库,是 GeoTools、GeoServer 等众多开源 GIS 项目的几何计算核心。它提供:

  • 几何对象模型:Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon、GeometryCollection
  • 空间关系判断:equals、contains、within、intersects、touches、crosses、overlaps、disjoint、relate(DE-9IM)
  • 集合运算:intersection、union、difference、symDifference、buffer
  • 几何分析:convexHull、centroid、area、length、distance、isValid、simplify
  • 线性参考:沿线距离定位、线上插值
  • 空间索引:STRtree、Quadtree,加速批量空间查询
  • 格式读写:WKT、WKB、GeoJSON

环境要求: JDK 8+


快速集成

Maven

<properties>
    <jts.version><!-- 请查看 Maven Central 获取最新版:https://central.sonatype.com/artifact/org.locationtech.jts/jts-core --></jts.version>
</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>

Gradle

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 读写
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()

$h$faq`

  1. 使用 GeometryFactory 创建几何:不要直接 new Point(),始终通过 GeometryFactory 的工厂方法创建几何对象。
  2. 面必须闭合:Polygon 的外环和内环坐标数组的首尾坐标必须相同。
  3. 坐标顺序:JTS 使用 (x, y)(经度, 纬度) 的顺序,注意与某些 GIS 系统的 (纬度, 经度) 区分。
  4. 几何有效性:从外部导入的几何数据应使用 geometry.isValid() 检查有效性,无效几何可用 GeometryFixer.fix() 修复。
  5. SRID 不参与计算:JTS 的 SRID 仅作为元数据标记,不影响空间运算;JTS 所有计算都在笛卡尔平面上进行,不处理投影。
  6. 性能优化:批量空间查询使用 STRtree;重复空间关系判断使用 PreparedGeometry;大量几何合并使用 UnaryUnionOp
  7. 线程安全GeometryFactory 是线程安全的;Geometry 对象本身不可变,可安全共享;但 Reader/Writer 实例非线程安全,需为每个线程创建独立实例。
  8. 包名迁移:JTS 1.15+ 包名由 com.vividsolutions.jts 迁移为 org.locationtech.jts,注意旧代码升级。
  9. OverlayNG:对于叠加运算(intersection / union / difference),推荐使用 OverlayNGRobust,它比传统叠加引擎更加鲁棒,能处理更多边界情况。

AI 使用建议

推荐工作流

  1. 创建几何对象:始终通过 GeometryFactory 工厂方法创建,不要直接 new
  2. 格式解析:从 WKT/WKB/GeoJSON 读入外部数据,使用对应的 Reader
  3. 空间运算:用 PreparedGeometry 加速批量 contains/intersects 判断
  4. 批量查询:用 STRtree 建空间索引后查询
  5. 结果导出:用 Writer 输出为 WKT/WKB/GeoJSON

关键注意事项

  • 坐标顺序:JTS 使用 (x, y)(经度, 纬度),注意与部分 GIS 系统的 (y, x) 区分
  • SRID 不参与计算:JTS 所有计算在笛卡尔平面进行,不处理地球曲率
  • OverlayNG 优先:叠加运算优先使用 OverlayNGRobust.overlay(),比传统方法更鲁棒
  • 线程安全GeometryFactoryGeometry 线程安全;Reader/Writer 非线程安全
  • 有效性检查:外部导入的几何用 isValid() 检查后用 GeometryFixer.fix() 修复

相关技能

参考资源

Use it

Copy one of these into your project. Installing also returns the manifest and these snippets.

yaml
targets:
  - https://api.opensmartroute.ai/api/v1/registry/znlgis-opengis-skills-jts/manifest   # or paste the manifest below

Manifest

An Open Capability Manifest: the router reads it to know what this does, what it costs and when to pick it.

znlgis-opengis-skills-jts.ocm.jsonjson
{
  "ocm": "1",
  "id": "znlgis-opengis-skills-jts",
  "kind": "skill",
  "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.",
  "publisher": "znlgis",
  "version": "1.0.0",
  "capabilities": {
    "domains": [
      "coding",
      "math"
    ],
    "tags": [
      "skill-md",
      "java",
      "geometry",
      "topology",
      "spatial",
      "de9im",
      "wkt",
      "wkb",
      "geojson",
      "gis"
    ],
    "languages": [
      "en"
    ]
  },
  "quality_prior": 0.6,
  "examples": [
    "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."
  ],
  "primary": false,
  "metadata": {
    "source": {
      "provider": "github",
      "repository": "https://github.com/znlgis/opengis-skills",
      "path": "gis/jts/SKILL.md",
      "ref": "0b5fdd414be45c3f59857ab9124c0708ccd6b665",
      "url": "https://github.com/znlgis/opengis-skills/blob/0b5fdd414be45c3f59857ab9124c0708ccd6b665/gis/jts/SKILL.md",
      "key": "znlgis/opengis-skills/gis/jts/SKILL.md"
    }
  },
  "instructions": "> **项目地址:** <https://github.com/locationtech/jts>\n>\n> **Maven Central:** `org.locationtech.jts:jts-core`\n>\n> **许可证:** Eclipse Public License 2.0 / Eclipse Distribution License 1.0(BSD 风格)\n>\n> **Javadoc:** <https://locationtech.github.io/jts/javadoc>\n\n## 概述\n\nJTS Topology Suite(简称 JTS)是 LocationTech 项目组下的开源 Java 二维矢量几何库,是 GeoTools、GeoServer 等众多开源 GIS 项目的几何计算核心。它提供:\n\n- **几何对象模型**:Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon、GeometryCollection\n- **空间关系判断**:equals、contains、within、intersects、touches、crosses、overlaps、disjoint、relate(DE-9IM)\n- **集合运算**:intersection、union、difference",
  "cost": {
    "context_tokens": 2254
  }
}

Fetch it by URL: GET /api/v1/registry/znlgis-opengis-skills-jts/manifest?version=1.0.0

Reviews

Star ratings from people who tried it. One review per account; edit yours any time.

No reviews yet. Install it, try it, and be the first to rate it.