GIS算法基础(一) 计算几何基础(上)

最近在学习GIS算法,在学习过程中,想把一些经典的算法或者思想记录下来,分享给大家

计算几何基础本来是计算机图形学的内容,但是GIS在图像处理中是离不开计算机处理的,所以GIS算法基础第一个应该是计算几何基础。

如何把空间实体的点线面以及他们之间的关系(例如,相交,包含,邻接,叠置等等)用计算机语言表达出来,应该是这里解决的第一个问题。前人已经有过这样这样的解决模型---DE-9IM模型(Dimensionally Extended nine-Intersection Model

DE9IM模型是一种拓扑模型,他用于描述多边形之间的关系。现有两个多边形,如果他们相交,那他们的边界,内部,外部的交集情况是怎么样的?如果相离呢?情况又是怎样的?DE9IM实际上就是一个3X3的矩阵,他存储着两个多边形,边界,内部,外部,的交集情况。

假如交集的结果用维数dim ={-1,0,1,2} 表示,-1代表无交集,0代表交集为一个点,1代表线,2代表面。

上面这个图能很好的说明这个问题。 a,b代表两个面,他们边界,内部,外部,相交的结果就是 红色的部分

例如a的内部和b的内部  交集应该是一个面,所以是2;a的边界和b的边界,交集应该是两个点,所以是0;

总结一下:dim = -1 无交集;

                  dim = 0 交集中不包含线和面,但至少包含一个点

                  dim = 1  交集中不包含面,但至少包含一个面

                  dim = 2 交集至少包含一个面

 现在多边形之间的问题的模型解决了,那么如何用计算机语言表达呢?

上面也说了,这个交集的结果可以用一个3x3的矩阵表达。例如上边的a,b交集结果 表达为:

2 1 2

1 0 1

2 1 2

于是,空间关系的描述可以归纳为:两个几何体,以表示两个几何体的DE-9IM结果的矩阵输入,然后把这个矩阵转为字符串,例如上面这个就变为"212101212"了

如果我们说两个多边形相交,那就是他们的结果要有 0,1,2 也就是交集中游点或线或面

在计算机中就是 (0,1,2) ->true

                           (-1) ->false

                            (-1,0,1,2)->*

那么上面那个字符串就可以表示成"TTTTTTTTT"

经过前人的整理,空间关系的判断可以通过特定的一些模式进行判断

谓词 返回值   描述
相等(Equals) T*F**FFF* 边界上的点和内部的点全部重合。属于相交的一种
相离(Disjoint) FF*FF**** 不相交,与相交相反
相接(Touches) FT*******\F**T*****\F***T**** 只有边界上有共同点,内部没有。属于相交的一种
覆盖(Covers) T*****FF*\*T****FF*\***T**FF*\****T*FF* b上的每个点都在a上(边界和内部),且所有点都不在a外部。属于相交的一种  
叠置(Overlaps) T*T***T**\1*T***T** a和b相交,且具有一部分共同点,但不是全部内部点。属于相交的一种

所以,只要我们得到了两个多边形的DE9IM矩阵结果,我们就可以判断他们之间的关系了。

那怎样获得两个多边形的交集结果呢?这关系到点,线,面-点,线,面 之间的判断,这也是GIS算法计算几何中的一大部分的内容,这些我之后在写把

猜你喜欢

转载自blog.csdn.net/weixin_41154636/article/details/82968255