转自http://classicning.javaeye.com/blog/107261
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关系。
更多参考资料:
http://gis.hsr.ch/wiki/images/3/3d/9dem_springer.pdf
http://edndoc.esri.com/arcsde/9.1/general_topics/understand_spatial_relations.htm