摘要: GEOS是“Geometry Engine, Open Source”的缩写,是一个集合形状的拓扑关系操作实用库,简单得说,就是判断两个几何形状之间关系和对两个几何形状进行操作以形成新的几何形状的库。它提供了OGC规范中简单几何要素对象操作的C++语言的实现。...
GEOS是“Geometry Engine, Open Source”的缩写,是一个集合形状的拓扑关系操作实用库,简单得说,就是判断两个几何形状之间关系和对两个几何形状进行操作以形成新的几何形状的库。它提供了OGC规范中简单几何要素对象操作的C++语言的实现。在地理信息系统领域,拓扑模型是重要的,其计算方法简单但是难得以实现。而GEOS不同于其他项目的是“空间谓词”与“空间操作”。
空间谓词是比较两个空间对象并返回一个布尔变量值作为结果,它表明了存在于两个空间对象之间特殊的关系。比如典型的空间谓词有Contains(), Intersects(), Touches(), and Crosses()函数等。GEOS项目中对该些函数的实现是异常强壮的,即使是奇异几何对象或是临时的坐标系统运算也不能使其运算不正常或计算错误。目前绝大多数的商业软件仍然在最基础的空间谓词处理上相对成熟,这正是GEOS项目的重要意义。“空间操作”则主要是对两个几何对象进行计算并且返回一个新的几何实体。比较典型的操作函数如Difference(), Union()以及Buffer()等。GEOS中的操作算法已经被广泛的经过了测试。GEOS类库被各类开源空间信息软件项目广泛应用,使用GEOS,它们可以基于最新的规范的几何实体来完成,同时也拥有了复杂空间方法的实现。
GEOS主要支持的操作和计算主要有以下几种:
一、空间关系计算和主要支持的几种计算
相等(Equals): 几何形状拓扑上相等。
脱节(Disjoint): 几何形状没有共有的点。
相交(Intersects): 几何形状至少有一个共有点(区别于脱节)。
接触(Touches): 几何形状有至少一个公共的边界点,但是没有内部点。
交叉(Crosses): 几何形状共享一些但不是所有的内部点。
内含(Within): 几何形状A的线都在几何形状B内部。
包含(Contains): 几何形状B的线都在几何形状A内部(区别于内含)
重叠(Overlaps): 几何形状共享一部分但不是所有的公共点,而且相交处有他们自己相同的区域。
以上的运算返回的都是true或者false。
二、空间叠加分析操作
缓冲区分析(Buffer): 包含所有的点在一个指定距离内的多边形和多多边形。
凸壳分析(ConvexHull): 包含几何形体的所有点的最小凸壳多边形。
交叉分析(Intersection): 交叉操作就是多边形AB中所有共同点的集合。
联合分析(Union): AB的联合操作就是AB所有点的集合。
差异分析(Difference): AB形状的差异分析就是A里有B里没有的所有点的集合。
对称差异分析(SymDifference): AB形状的对称差异分析就是位于A中或者B中但不同时在AB中的所有点的集合。
此外还支持多边形化,连接有向线段,压出节点等等操作。