简介
以下文档是我对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);
<