GeTools 中的 JTS基础--1

本文档介绍了GeoTools中JTS的基础知识,包括如何创建点、线、多边形等Geometry对象,以及GeometryFactory、PrecisionModel和CoordinateSequence的概念。文中详细解释了如何利用JTS和GeoTools实现曲线和圆,并提供了使用WKT创建几何对象的方法。此外,还讨论了Geometry的关系和精度模型的管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

以下文档是我对Geotools的翻译和理解,因为JTS的文档并不是那么全,希望大家受益。

JTS拓扑套件是一个GeoTools的外部套件来提供一个地理信息数据结构的实现。主要的好处就是经过多年的努力在数值上是稳定的。
GooToots都是关于实现空间解决方案的,我们尽最大努力遵循一个不自己疯狂造轮子的主旨。优秀的JTS拓扑套件项目提供了我们在整个库中使用的几何实现。

GeoTools中提供了一些组件辅助JTS
1 gt-api 提供了帮助类和扩展JTS的CurvedGeometryFactory工厂来处理弧线。
2 gt-main 提供了帮助类来讲Geometry转换为Java形态展示。

友情链接

jts-topo-suite
http://tsusiatsoftware.net/jts/main.html
http://www.vividsolutions.com/jts/bin/JTS%20Developer%20Guide.pdf
http://www.vividsolutions.com/jts/bin/JTS%20Technical%20Specs.pdf

Maven 坐标

<dependency>
  <groupId>com.vividsolutions</groupId>
  <artifactId>jts</artifactId>
  <version>1.13</version>
</dependency>

Geometry

我们使用JTS的GeometryFactory来创建Geometry对象。GeometryFactory有许多的创建方法能够让坐标实例被包裹进合适的Geometry中。
用于检索SQL标准的简单OGC要素是由Point, LineString and Polygon实现的。

每一个Geometry可以被一个Envelope(外包框)包围。OGC简单要素的对于SQL标准的实现同样也收GeometryCollections的支持。GeometryCollections其中自己包含着Geometry。

你可以实现你自己的GeometryFactory通过一个指定的PrecisionModel和一个CoordinateSequenceFactory。

如果您需要考虑坐标的存储方式(可能是floats而不是doubles),这些“高级”配置选项您应该会感兴趣。这两个概念一起工作:如果将坐标存储在浮点数数组中,那么JTS只需要在计算过程中考虑浮动精度。(此处不理解,我的理解是用什么存储系统下面的就是用什么,可能还需要看看源码)

GeometryFactory 工作的很好(可能意思是可以少考虑点底层)。

GeoTools扩展了这些Geometry类来支持曲线。这些实现生成坐标能够让他们像正常的JTS实现一样。

用于生成坐标的线性化过程利用了定义曲线的控制点和CurvedGetimeyFactory提供的容差。

建立一个点 Creating a Point

下面我们使用JTS GeometryFactory来建立一个点,下面是使用FactoryFinder的一个标准实例。

如果您对精度有要求可以自己搞起。

GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();

Coordinate coord = new Coordinate(1, 1);
Point point = geometryFactory.createPoint(coord);

这里也支持WKT字符串创建 ,WKT字符串是SQL标准定义的一个实现。

GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();

WKTReader reader = new WKTReader(geometryFactory);
Point point = (Point) reader.read("POINT (1 1)");

如果您需要多个点,可以使用MultiPoint

创造一个线 Creating a LineString

下面的代码用于创造线:

GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
Coordinate[] coords  =
 new Coordinate[] {
  new Coordinate(0, 2), new Coordinate(2, 0), new Coordinate(8, 6) };
LineString line = geometryFactory.createLineString(coordinates);
<
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值