一键导入
geometry-api-java
Esri Geometry API for Java 是一个自包含的空间几何计算库,提供对二维和三维几何对象的创建、解析、序列化以及空间关系运算能力。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Esri Geometry API for Java 是一个自包含的空间几何计算库,提供对二维和三维几何对象的创建、解析、序列化以及空间关系运算能力。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
面向 AI 编程助手的开源 GIS、CAD、C#、AI、IoT、3D 技能集合。覆盖 65 个开源项目,提供一站式技能索引、标签搜索、按需加载指南,让 AI 助手在 GIS/CAD/C#/AI/3D 领域获得更准确的代码生成与问题排查能力。
DocuTranslate(xunbu/docutranslate)是基于大语言模型的轻量级本地文件翻译工具,支持 PDF/Word/Excel/Markdown/EPUB/字幕/JSON 等多格式翻译,内置 MinerU PDF 解析、术语表自动生成、Web UI、REST API、Client SDK 与 MCP 接入。
AI/LLM 技能分类索引,覆盖 LLM 应用开发平台、自学习智能体、个人 AI 助手 Gateway、终端编码代理、多模型编排插件、文件翻译工具、AI 编程方法论等领域共 8 个开源项目,按需加载即可获得 Dify、Hermes Agent、OpenClaw、OpenCode、DocuTranslate 等工具的精准 AI 辅助。
geometry-api-net 是一个 .NET Standard 2.0 的空间几何计算库,提供对二维和三维几何对象的创建、解析、序列化以及空间关系运算能力。
GIS(地理信息系统)技能分类索引,覆盖空间数据处理、地图服务、几何运算、Web 可视化等领域共 23 个开源工具,按需加载即可获得 GDAL、QGIS、GeoServer、PostGIS、JTS 等工具的精准 AI 辅助。
robotgo-flow(znlgis/robotgo-flow)是基于 go-vgo/robotgo 构建的 Windows 桌面 RPA 自动化框架,通过声明式 YAML 定义工作流,利用图像模板匹配定位屏幕 UI 元素,自动执行鼠标/键盘/浏览器操作,内置人类行为模拟、交互式录制器与 .NET 10 WPF 托盘应用。
| name | geometry-api-java |
| description | Esri Geometry API for Java 是一个自包含的空间几何计算库,提供对二维和三维几何对象的创建、解析、序列化以及空间关系运算能力。 |
| tags | ["java","geometry","esri","spatial","wkt","wkb","geojson","geodesic"] |
项目地址: https://github.com/Esri/geometry-api-java
Maven Central:
com.esri.geometry:esri-geometry-api许可证: Apache License 2.0
Esri Geometry API for Java 是一个自包含的空间几何计算库,提供对二维和三维几何对象的创建、解析、序列化以及空间关系运算能力。它无需任何外部 GIS 依赖,可直接嵌入 Java 应用、Hadoop MapReduce、Hive UDF、Spark 等大数据处理框架中。
<dependency>
<groupId>com.esri.geometry</groupId>
<artifactId>esri-geometry-api</artifactId>
<version>2.2.4</version>
</dependency>
implementation 'com.esri.geometry:esri-geometry-api:2.2.4'
环境要求: JDK 1.7+;运行时依赖 jackson-core(JSON 处理)。
维护状态提示:
esri-geometry-api最新版本仍为 2.2.4(2020-09),已多年未更新。若需活跃维护的几何库,新项目建议优先选用 JTS(Java)或 NetTopologySuite(.NET)。
| 类 | 包 | 用途 |
|---|---|---|
GeometryEngine | com.esri.core.geometry | 推荐入口——提供几何操作的静态便捷方法 |
OperatorFactoryLocal | com.esri.core.geometry | 算子工厂,适用于高性能批量处理 |
SpatialReference | com.esri.core.geometry | 空间参考 / 坐标系(通过 WKID 或 WKT 创建) |
MapGeometry | com.esri.core.geometry | 将 Geometry 与 SpatialReference 打包在一起 |
Point | com.esri.core.geometry | 点(0 维) |
MultiPoint | com.esri.core.geometry | 多点集合(0 维) |
Polyline | com.esri.core.geometry | 折线 / 路径集合(1 维) |
Polygon | com.esri.core.geometry | 面 / 环集合(2 维) |
Envelope | com.esri.core.geometry | 外接矩形(2 维) |
import com.esri.core.geometry.*;
// 点
Point pt = new Point(116.4, 39.9); // 2D
Point pt3d = new Point(116.4, 39.9, 50.0); // 3D
// 折线
Polyline line = new Polyline();
line.startPath(0, 0);
line.lineTo(10, 10);
line.lineTo(20, 0);
// 面
Polygon polygon = new Polygon();
polygon.startPath(0, 0);
polygon.lineTo(10, 0);
polygon.lineTo(10, 10);
polygon.lineTo(0, 10);
// 自动闭合
// 外接矩形
Envelope env = new Envelope(0, 0, 10, 10);
// 多点
MultiPoint mp = new MultiPoint();
mp.add(1, 2);
mp.add(3, 4);
// 按 WKID 创建(WGS 84 = 4326)
SpatialReference srWGS84 = SpatialReference.create(4326);
// 按 WKT 字符串创建
SpatialReference srCustom = SpatialReference.create("GEOGCS[\"GCS_WGS_1984\",...]]");
// 与几何对象绑定
MapGeometry mapGeom = new MapGeometry(pt, srWGS84);
SpatialReference sr = SpatialReference.create(4326);
// 缓冲区
Geometry buffered = GeometryEngine.buffer(point, sr, 100.0);
// 交集
Geometry inter = GeometryEngine.intersect(polygon1, polygon2, sr);
// 合并
Geometry united = GeometryEngine.union(new Geometry[]{poly1, poly2, poly3}, sr);
// 差集
Geometry diff = GeometryEngine.difference(polygon1, polygon2, sr);
// 对称差
Geometry symDiff = GeometryEngine.symmetricDifference(geom1, geom2, sr);
// 裁剪(按矩形)
Geometry clipped = GeometryEngine.clip(geometry, envelope, sr);
// 切割(用折线切割面或线)
Geometry[] parts = GeometryEngine.cut(polygon, cuttingLine, sr);
double dist = GeometryEngine.distance(geom1, geom2, sr);
boolean eq = GeometryEngine.equals(g1, g2, sr);
boolean wn = GeometryEngine.within(point, polygon, sr);
boolean ct = GeometryEngine.contains(polygon, point, sr);
boolean ix = GeometryEngine.intersects(g1, g2, sr);
boolean dj = GeometryEngine.disjoint(g1, g2, sr);
boolean tc = GeometryEngine.touches(g1, g2, sr);
boolean cr = GeometryEngine.crosses(line, polygon, sr);
boolean ol = GeometryEngine.overlaps(poly1, poly2, sr);
// DE-9IM 关系矩阵
boolean rel = GeometryEngine.relate(g1, g2, sr, "T*F**FFF*");
// 凸包
Geometry hull = GeometryEngine.convexHull(geometry);
// 简化
Geometry simplified = GeometryEngine.simplify(geometry, sr);
// 泛化(简化顶点)
Geometry generalized = GeometryEngine.generalize(geometry, maxDeviation, true, sr);
// 质心 / 标注点
Point centroid = GeometryEngine.getLabelPoint(polygon, sr);
// 大地测量缓冲区(结果更精确,适用于地理坐标系)
Geometry geoBuffer = GeometryEngine.geodesicBuffer(geometry, sr, 1000.0);
// 大地测量长度
double geoLen = GeometryEngine.geodesicLength(polyline, sr, null);
// 大地测量面积
double geoArea = GeometryEngine.geodesicArea(polygon, sr, null);
// 导入
MapGeometry mg = GeometryEngine.jsonToGeometry(jsonString);
Geometry geom = mg.getGeometry();
SpatialReference sr = mg.getSpatialReference();
// 导出(附带 WKID)
String json = GeometryEngine.geometryToJson(4326, geometry);
// 导入
MapGeometry mg = GeometryEngine.geoJsonToGeometry(geoJsonString, 0, Geometry.Type.Unknown);
// 导出
String geoJson = GeometryEngine.geometryToGeoJson(geometry);
// 导入
Geometry geom = GeometryEngine.geometryFromWkt(
"POLYGON((0 0,10 0,10 10,0 10,0 0))",
0,
Geometry.Type.Polygon
);
// 导出
String wkt = GeometryEngine.geometryToWkt(geometry, 0);
// 导入
Geometry geom = GeometryEngine.geometryFromWkb(byteBuffer, Geometry.Type.Unknown);
// 导出
ByteBuffer wkb = GeometryEngine.geometryToWkb(geometry, 0);
// 导入
Geometry geom = GeometryEngine.geometryFromEsriShape(byteBuffer, Geometry.Type.Polygon);
// 导出
byte[] shape = GeometryEngine.geometryToEsriShape(geometry);
当需要批量处理大量几何对象时,使用 OperatorFactoryLocal 获取算子并配合 GeometryCursor 可获得更好的性能:
OperatorFactoryLocal factory = OperatorFactoryLocal.getInstance();
OperatorBuffer bufferOp = (OperatorBuffer) factory.getOperator(Operator.Type.Buffer);
// 使用 SimpleGeometryCursor 包装输入
SimpleGeometryCursor inputCursor = new SimpleGeometryCursor(geometryArray);
double[] distances = {100.0};
GeometryCursor resultCursor = bufferOp.execute(inputCursor, sr, distances, false, null);
// 逐个取出结果
Geometry result;
while ((result = resultCursor.next()) != null) {
// 处理每个缓冲区结果
}
Geometry.Type type = geometry.getType();
switch (type) {
case Point: Point p = (Point) geometry; break;
case Polygon: Polygon pg = (Polygon) geometry; break;
case Polyline: Polyline pl = (Polyline) geometry; break;
case MultiPoint: MultiPoint mp = (MultiPoint) geometry; break;
case Envelope: Envelope ev = (Envelope) geometry; break;
}
// 按维度判断
boolean isPoint = Geometry.isPoint(type.value());
boolean isLinear = Geometry.isLinear(type.value());
boolean isArea = Geometry.isArea(type.value());
// 检查属性
geometry.hasZ();
geometry.hasM();
geometry.hasID();
// 添加属性
geometry.addAttribute(VertexDescription.Semantics.Z);
geometry.addAttribute(VertexDescription.Semantics.M);
| 场景 | 关键方法 |
|---|---|
| 地理围栏 / 点在面内判断 | GeometryEngine.contains() 或 within() |
| 计算两点距离 | GeometryEngine.distance() 或 geodesicLength() |
| 创建缓冲区(如 POI 周边范围) | GeometryEngine.buffer() 或 geodesicBuffer() |
| 面求交 / 叠加分析 | GeometryEngine.intersect() / union() / difference() |
| 坐标格式互转 | jsonToGeometry() / geometryToGeoJson() / geometryFromWkt() 等 |
| 几何有效性检查与修复 | GeometryEngine.simplify() |
| Hadoop / Spark 空间处理 | 搭配 Operator + GeometryCursor 批量处理 |
SpatialReference。GeometryEngine.simplify() 确保拓扑正确。geodesicArea() / geodesicLength() 以获得椭球面精确结果。OperatorFactoryLocal + GeometryCursor,而非逐个调用 GeometryEngine 静态方法。GeometryEngine 的静态方法是线程安全的。Point、Polyline、Polygon 等构造函数创建几何SpatialReference.create(wkid) 指定坐标系GeometryEngine 静态方法(线程安全、API 简洁);批量处理使用 OperatorFactoryLocal + GeometryCursorGeometryEngine.geometryToGeoJson() / geometryFromWkt() 等方法进行 WKT、WKB、GeoJSON、Esri JSON 互转geodesicArea() / geodesicLength() / geodesicBuffer() 获得椭球面精确结果SpatialReferenceGeometryEngine.simplify() 确保拓扑正确OperatorFactoryLocal + GeometryCursor,而非逐个调用 GeometryEngine 静态方法GeometryEngine 静态方法是线程安全的;Operator 实例非线程安全