代码改变世界

收藏:用DE-9IM判断二维空间位置关系

2007-10-12 14:13  flyingfish  阅读(1477)  评论(0编辑  收藏  举报

很有用的一篇资料,经常用,经常找,不如搬过来。感谢原作者!

来源:Classicning Daily Log

http://www.classicning.com/blog/post/388.html

DE-9IM:The Dimensionally Extended Nine-Intersection Model要使用DE-9IM首先要建立几何对象的interior,boundary和exterior。首先boundary是指对几何进行一次降维之后得到对 象,举例来说一个点的boundary为空,未封闭的线的boundary为其两个端点,封闭线的boundary为空,多边形的boundary为它的 环状边界。interior是指几何对象的边界被移除之后剩下的部分。exterior则是指不在boundary和interior中点构成的几何对 象。

约定:以I(a),B(a),E(a)表示几何对象a的interior,boundary和exterior,以dim(a)表示几何对象的维度,在二维空间中他的取值为{-1, 0, 1, 2},其中-1代表空。为了便于表示,用下面一些符号来表示取值的集合:
T : {0, 1, 2}
F : {-1}
* : {-1, 0, 1, 2}
0 : {0}
1 : {1}
2 : {2}

那么就可以用这样一个矩阵来判断几何对象a和b的位置关系:

 

Interior

Boundary

Exterior

Interior

dim(I(a)∩I(b))

dim(I(a)∩B(b))

dim(I(a)∩E(b))

Boundary

dim(B(a)∩I(b))

dim(B(a)∩B(b))

dim(B(a)∩E(b))

Exterior

dim(E(a)∩I(b))

dim(E(a)∩B(b))

dim(E(a)∩E(b))

另外,将零维对象简写为P,一维对象简写为L,二维对象简写为A。

根据这个矩阵的值可以构造一个字符串,这个字符串称为IntersectionPattern。另外JTS中的IntersectionMatrix也封装了这个矩阵。

以下是几个预定义的空间关系
Equal 两个几何对象完全相同,它的定义表示为DE-9IM即"TFFFTFFFT"
Disjoint 两个对象的边界和内部都没有任何公共部分,表示为DE-9IM是"FF*FF****"
Intersection Disjoint取反
Touches 简单地说Touches表示两个对象的边缘相接触,这个关系是以下几类几何对象间特有的:A/A, L/L, L/A, P/A ,P/L。用DE-9IM表示,可以为"FT*******", "F**T*****"或"F***T****"
Crosses Crosses表示一个对象穿过另一个对象,它应用于P/L, P/A, L/L和L/A之间。用DE-9IM表示为:"T*T******"(P/L, P/A,L/A),"0********"(L/L)
Within 包含于。DE-9IM表示:"T*F**F***"
Overlaps 相叠,应用于A/A, L/L 和P/P之间。DE-9IM:"T*T***T**"(A/A, P/P),"1*T***T**"(L/L)
Contains 包含,对立于Within。

JTS的Geometry类实现了以上的所有方法,而由于这些方法不能表示全部的空间位置关系,因此OGC的Simple Feature Specification和JTS都提供了一个relate方法,用来测试指定的DE-9IM关系。