【php精品源码栏目提醒】:以下是网学会员为您推荐的php精品源码-JTS拓扑套件开发指南 - 其它资料,希望本篇文章对您学习有所帮助。
GDBC/CTI-S GeoConnections JAVA 事务服务拓扑套件-版本 1.4 开发者指南 Java事务服务拓扑套件 开发者指南 版本 1.4 VIVID 解决方案 页码:1GDBC/CTI-S GeoConnections JAVA 事务服务拓扑套件-版本 1.4 开发者指南 文档改变检验 修改版本编号 发布日期 作者 所作改变主要描述 1.4 2003 年 10 月 17 日 Jonathan Aquino 为 JTS 1.4 版本创建的最初稿 VIVID 解决方案 页码:2GDBC/CTI-S GeoConnections JAVA 事务服务拓扑套件-版本 1.4 开发者指南 内容表 1. 概述 ....................................................................................................................... 4 1.1 其他资源..........................................................................................................4 2. 准备开始 ...............................................................................................................4 3. 处理空间关系 ...................................................................................................... 5 4. 处理叠加操作 ...................................................................................................... 5 5. 缓冲处理 .............................................................................................................. 7 5.1 基本的缓冲.................................................................................................... 7 5.2 帽端形式(END CAP STYLE)................................................................... 7 5.3 详述近似值数字化……................................................................................ 8 6. 多边化(多角形化)............................................................................................. 9 7. 合并一组线(LineString)…….................................................…………………10 8. 使用定制的并列顺序............................................................................................. 11 9. 提示技巧及技术.................................................................................. ...................11 9.1 联接一组线(LineString.............................................................................. 11 9.2 有效地合并很多的多边形…….....................................................................12 VIVID 解决方案 页码:3GDBC/CTI-S GeoConnections JAVA 事务服务拓扑套件-版本 1.4 开发者指南 1.概述 Java Transaction Service(Java 事务服务)拓扑套件,是一种能够利用清楚精确的模型和强大的几何算法来实现一套核心空间数据操作的 JAVA 应用编程接口 。
(API) 它提供一种详细说明 2-D线性几何图形(Geometry)的完善模式。
许多在计算几何学的普通操作(Operation)和空间数据处理在一个清晰的,一致的,完整的应用程序接口(API)是无掩蔽的。
Java 事务服务(JTS)是为了致力于能够支持确定性,清洁性,完整性和对空间数据进行查询的应用软件的发展。
本文档适合于那些愿意使用 JTS 的开发者去满足他们对空间数据处理的需求。
它描述了 JTS 应用程序接口 API 并且提供了
源码范例。
注意:本文档正在完善中 1.1 其他资源 ltOpenGIS 对 SQL 的简单特征规范gt 修订版本 1.1(在本文相关规范称为 SFS)。
即对空间数 据模型和空间谓项以及 JTS 实现功能的参考规范。
ltJTS 技术规范gt 关于在 JTS 中实现类,方法和运算法则的设计规范。
ltJTS Javadocgt 关于所有 JTS 中类,方法和运算法则的文件。
2.准备开始 最普通的 JTS 任务包括创造和使用几何(geometry)对象。
用人工方式去建立几何对象的最简单办法是使用 WKTReader(Well-Known Text Reader)去产生一个 WKT 字符串,例如: Geometry g1 new WKTReader.readquotLINESTRING 0 0 10 10 20 20quot JTS 技术规范提供了 WKT 的准确详述。
同时,很多 WKT 的例子可以在 test 目录下的文件夹里面做到。
在一个真正的项目中,更容易去使用 GeometryFactory,因为你不需要去建立一个 WKT 字符串,而是直接地面向对象进行工作。
Coordinate coordinates new Coordinate new Coordinate0 0 new Coordinate10 10 new Coordinate20 20 Geometry g1 new GeometryFactory.createLineStringcoordinates 一旦你建立了你的 Geometry 类,你可以利用它去处理很多事务。
你能容易的发现两个 Geometry之间的交叉点(交集)。
Geometry g3 g1.intersectiong2 VIVID 解决方案 页码:4GDBC/CTI-S GeoConnections JAVA 事务服务拓扑套件-版本 1.4 开发者指南 构造 Geometries 的其他算法包括:区域(area) 封套(envelope) 质心(centroid)和缓冲器 , , 。
(buffer) 需要了解更多关于 Geometry 的功能,可以查阅在 com.vividsolutions.jts.geom 包里关于Geometry 的 JAVADOC,以及该文档的后续部分。
3.计算空间关系 JTS 一个重要的应用是计算几何图形(Geometry)之间的空间关系,它提供了多种多样的用于处理空间关系的办法。
JTS 遵循 OGC 详细说明的维扩展九交集模型(the Dimensionally-Extended 9Intersection Matrix model)。
为计算两个几何图形的维扩展九交集模型,利用相关的办法去计算: Geometry a . . . Geometry b . . . IntersectionMatrix m a.relateb 大多数重要关系可以详细说明成为一种匹配一组交叉矩阵的模式。
JTS 同样提供了一套布尔数学体系(boolean)的能够直接计算普通空间关系的谓项(predicates 谓项,阐述)。
它们包括: 相等Equals: 几何形状拓扑上相等。
脱节Disjoint: 几何形状没有共有的点。
相交Intersects: 几何形状至少有一个共有点(区别于脱节) 接触Touches: 几何形状有至少一个公共的边界点,但是没有内部点。
交叉Crosses: 几何形状共享一些但不是所有的内部点。
内含Within: 几何形状 A 的线都在几何形状 B 内部。
包含Contains: 几何形状 B 的线都在几何形状 A 内部(区别于内含) 重叠Overlaps: 几何形状共享一部分但不是所有的公共点,而且相交处有他们自己相同的区域。
在某些例子中,谓项的准确定义是微妙的。
你应该查阅 JTS 技术规范以确定在任何给定的案例中会返回什么样的结果。
4.处理叠加操作 在先前部分讨论的正确或者错误的功能中,例如 相交(Intersects)和包含(Contains),我们现在在图 4-1 的部分插图展示 JTS 的叠加操作。
VIVID 解决方案 页码:5 GDBC/CTI-S GeoConnections JAVA 事务服务拓扑套件-版本 1.4 开发者指南 2. A 交集(B) 3. A 合并(B) 4. A 差异(B) 5. B 差异(A) 6. B 对称差异(A) 图 4-1:叠加操作 对叠加运算的描述如下列表: (更多信息请查阅《第五缓 包含所有的点在一个指定距离内的多边形和多多边形。
缓冲区分析(Buffer) 冲区计算机》第七页)凸壳分析(ConvexHull) 包含几何形体的所有点的最小凸壳多边形(外包多边形)交叉分析(Intersection) 交叉操作就是多边形 AB 中所有共同点的集合。
联合分析(Union) AB 的联合操作就是 AB 所有点的集合。
差异分析(Difference) AB 形状的差异分析就是 A 里有 B 里没有的所有点的集合。
AB 形状的对称差异分析就是位于 A 中或者 B 中但不同时在 AB 中的所有点的集对称差异分析(SymDifference) 合 关于在前面部分所述的空间关系,JTS 技术规范 提供了关于这些叠加操作的精确定义。
VIVID 解决方案 页码:6GDBC/CTI-S GeoConnections JAVA 事务服务拓扑套件-版本 1.4 开发者指南 5.缓冲区处理 在GIS中,缓冲(buffering)是一种用于计算包含在一个几何图形(Geometry)特定距离区域内所有点的的操作。
在数学术语中,这被称为通过一个与缓冲区相等的圆的半径去计算几何图形的闵可夫斯基(Minkowski)总和。
发现正的(positive)和负的(negative)缓冲,有时与操作的腐蚀(erosion)和膨胀(dilation)有关。
在CAD/CAM,缓冲曲线被称为偏移曲线(offset curves)。
你可以使用JTS,通过Geometry buffer方法或者Bufferop类,去计算一个图形的缓冲区。
缓冲操作所输入的 Geometry 可以是任何类别(包括任意的 Geometry 集合) 。
缓冲操作的结果通常是一种区域类型(area type)(多边形或者多多边形)。
结果也可能为空例如,一条线(linestring)的负缓冲。
你可以通过正的和负的缓冲距离去计算缓冲。
正距离缓冲的缓冲器Buffers经常包含输入几何图形(input Geometry)。
负距离缓冲的缓冲器经常被包含在输入Geometry的内部。
一条线的负的缓冲或者点,会导致空的Geometry。
图 5-1 正和负的缓冲 零距离的缓冲距离同样能够被支持。
你可以利用它去执行高效的多多边形的联合分析。
5.1 基本的缓冲 为了计算一个给定距离的缓冲,在 Geometry 使用 buffer()方法 Geometry g . . . Geometry buffer g.buffer100.05.2 帽端形式(END CAP STYLES) VIVID 解决方案 页码:7GDBC/CTI-S GeoConnections JAVA 事务服务拓扑套件-版本 1.4 开发者指南 缓冲多边形可以通过不同的线性 END CAP STYLE 去计算。
END CAP STYLES 决定了缓冲多边形的线路是如何在 linestring 的结尾构建的。
支持以下几种不同的三通类型: 样式名称 描述 CAP_ROUND 普通的圆形 帽末端形状(end cap) CAP_BUTT 在线路末端被削平的帽末端形状 CAP_SQUARE 在线路末端缓冲距离之后的地方被弄成方形的帽形末端 以下图表说明了指定不同的 END CAP STYLES 的效果: 图 5-2 不同的帽形末端样式 为了详细说明缓冲帽末端样式,直接使用 com.vividsolutions.jts.operation.buffer 包中的BufferOp 类。
Geometry g . . . BufferOp bufOp new BufferOpg bufOp.setEndCapStyleBufferOp.CAP_BUTT Geometry buffer bufOp.getResultGeometrydistance5.3 详述近似值量子化(数字化)SPECIFYING THE APPROXIMATION QUANTIZATION 既然一个 Geometry 的准确缓冲轮廓通常包括圆形部分,缓冲必须经过 JTS 支持的线性几何学(Geometry)的约计。
近似的程度可以由用户控制。
在 JTS 中,这是通过用于约计四分之一圆的指定扇形片段(quadrant segments)的数字完成的。
指定一个大的片段数目会导致更好的实际面积的近似值,也会导致大量的线段在所要计算的多边形里面。
为象限段指定一个值,要使用 Geometry buffer 方法和第二变量(second argument): Geometry g . . . Geometry buffer g.buffer100.0 16 片段的默认数值为 8。
这使所计算曲线近似值与实际缓冲曲线的距离相差少于 2的最大限度距离。
使用数值 12 能够将这个错误减少至低于 1。
下图显示了增加曲线段数值的效果: VIVID 解决方案 页码:8GDBC/CTI-S GeoConnections JAVA 事务服务拓扑套件-版本 1.4 开发者指南 图 5-3 使用不同的曲线近似程度 6. 多角形化(多边化) 多边化(Polygonization)是一个从围住某区域的线路组成多边形的过程。
组成多边形的线路必须是充分连接的。
也就是说,线(linestring)不能交叉,同时必须在端点接触。
JTS 提供 Polygonizer 类去完成多边化。
这个 Polygonizer 类获得一组完整连接的线(linestring),组成所有的由线围成的多边形。
多边化错误,例如虚悬的线(dangling lines)或者相交线(cut lines)等能够被鉴别和报告。
Collection lines new ArrayList lines.addreadquotLINESTRING 0 0 10 10quot // isolated edge lines.addreadquotLINESTRING 185 221 100 100quot //dangling edge lines.addreadquotLINESTRING 185 221 88 275 180 316quot lines.addreadquotLINESTRING 185 221 292 281 180 316quot lines.addreadquotLINESTRING 189 98 83 187 185 221quot lines.addreadquotLINESTRING 189 98 325 168 185 221quot polygonizer.addlines Collection polys polygonizer.getPolygons Collection dangles polygonizer.getDangles Collection cuts polygonizer.getCutEdges 如果这一组线没有正确的联接,Polygonizer 类仍然会在它们上面运作,但是因而发生的多边形的 Geometry 会是无效的。
多线性联合技术(MultiLineString union technique)能够被用于连结一组的线。
(见 9.1 连接一组直线 第 11 页) VIVID 解决方案 页码:9GDBC/CTI-S GeoConnections JAVA 事务服务拓扑套件-版本 1.4 开发者指南 输入__一套完整联接的线性字符串 输出__多边形,虚悬直线以及交叉线 图 6-1 多边化操作 7. 合并一组线性字符串 有时,像合并(union)等空间操作会产生一连串的小线段(LineStrings.)。
JTS 的线合并器(LineMerger)是一种简单的用于缝合这些短线在一起的工具。
示例如下: 输入——一组完全联接的线 输出——合并的线 图 7-1 线合并操作 线合并器(LineMerger)假定输入线(input LineStrings)是联接的(例如,它们不交叉,只有它们的端点是接触的。
见 9.1 节 联接一组线性字符串 第 11 页)。
注意输出线(output LineStrings)同样是联接的。
VIVID 解决方案 页码:10GDBC/CTI-S GeoConnections JAVA 事务服务拓扑套件-版本 1.4 开发者指南 如果要合并的线(linestring)没有相同的方向,那么结果的线的方向将与大多数线的方向相同。
使用线合并器(LineMerger)办法如下: LineMerger lineMerger new LineMerger Collection lineStrings . . . lineMerger.addlineStrings Collection mergedLineStrings lineMerger.getMergedLineStrings 8. 使用定制的坐标序列USING CUSTOM COORDINATE SEQUENCES JTS 默认使用 Coordinate(坐标)的排列去描绘图形(Geometry)的点和线。
这可能存在一些你想 Geometry 利用其他一些工具存储它们的点的情况。
例如,为了节省内存,你可能会想利用更多较紧密的序列工具,比如一组 x 和 y 的排列。
另外的可能性是使用一种定制的同等的类在每个坐标上存储额外的信息。
例如线性参考措施(measures for linear referencing) 。
你可以通过执行 CoordinateSequence 和 CoordinateSequenceFactory 接口来达到上述的目的。
然后创建一个以 CoordinateSequenceFactory 为参数化的 Geometry,使用这个 GeometryFactory去创建新的 Geometry。
所有这些新的 Geometry 将使用你的 CoordinateSequence 工具。
举一个例子,请看下面在 com.vividsolutions.jtsexample.geom 包的范例程序:ExtendedCoordinateExample 一个使用基本坐标表示增加信息的例子TwoArrayCoordinateSequenceExample 一个使用更高效记忆内存的序列工具的例子 在性能方面的一个注意提示:如果你的 CoordinateSequence 不是基于 JTS 的 Coordinates(或者 Coordinates 的子集)标准的一个排列,可能会导致一个小的性能损失。
这是由于所要求的编组和未编组信号(marshalling and unmarshalling)为用户的 coordinates 转换成 JTS 的 coordinates的排列。
9. 提示技巧和技术 9.1 联接一组线(linestrings) 许多空间操作假定它们的输入数据是联接的(noded),意味着线(LineStrings)从不会相交。
例如,早先描述的JTS Polygonizer和JTS LineMerger都假定它们的输入是联接的。
联接过程把交叉的线(LineStrings)分离成为较短的,在点或者节点上相连的线(LineString)。
图示如下: VIVID 解决方案 页码:11GDBC/CTI-S GeoConnections JAVA 事务服务拓扑套件-版本 1.4 开发者指南 未联接(3 条线段) 已联接(9 条线段) 图 9-1 联接之前和之后 一.
上一篇:
OA方案
下一篇:
“群众路线”:内涵、逻辑与特质心得体会