空间查询 |
点、线、面空间几何对象都有明确的边界矩形(Envelop)、边界(Boundary)、内部(Interior)和外部(Exterior),具体定义见表 2.1。几何对象的空间位置关系比较,实质上就是对相互间边界矩形、边界、内部和外部关系的比较。明确这些定义,将非常有助于理解空间查询各算子的含义。
表 2.1 几何对象相关定义
几何对象 |
边界矩形 |
边界 |
内部 |
外部 |
点 |
没有边界矩形 |
没有边界 |
点对象本身 |
点对象本身外的区域 |
线 |
线对象的最小外接矩形 |
线对象的端点 |
线对象本身除去端点的部分 |
线对象本身外的区域 |
面 |
面对象的最小外接矩形 |
面对象控制边的并集 |
面对象除去边界后的区域 |
面对象本身外的区域 |
SuperMap 组件产品 采用OGC的九交模型来定义不同维度、不同类型的几何对象之间的空间关系。这个模型分别用I(a)、B(a)、E(a)表示几何对象 a 的内部、边界和外部的集合,通过对两个几何对象的外部、边界、内部集合进行求交,并将求交结果填充到九交模型表中,如表 2.2所示的。九交模型在计算机内部以数组形式存储为一个3*3的矩阵。九交模型适合于所有几何对象。
表 2.2 九交模型表
|
内部I(b) |
边界B(b) |
外部E(b) |
内部I(a) |
dim(I(a) ∩ I(b)) |
dim(I(a) ∩ B(b)) |
dim(I(a) ∩ E(b)) |
边界B(a) |
dim(B(a) ∩ I(b)) |
dim(B(a) ∩ B(b)) |
dim(B(a) ∩ E(b)) |
外部E(a) |
dim(E(a) ∩ I(b)) |
dim(E(a) ∩ B(b)) |
dim(E(a) ∩ E(b)) |
几何对象的内部、外部、边界求交时,函数dim()返回求交结果集合的维数,分别为-1、0、1和2四个值,我们会根据dim()的取值,为九交模型进行赋值,规则如下:
1. 若dim()=0,1或2,则交集存在,赋值为T;
2. 若dim()= -1,则交集不存在,赋值为F;
3. 若不考虑此种相交情况,则不管交集存在与否,赋值为*。
下面用面部分重叠为例来说明九交模型的赋值,如图 2‑1所示,面a与面b部分重叠,在此我们定义一个String类型数组Matrix[9]来存储九交模型的值,则:
1. dim(I(a) ∩ I(b))=2,则九交模型中Matrix(0)=T,在这里需要说明的是,若线与线overlap,则dim(I(a) ∩ I(b))=1;若点与点overlap,则dim(I(a) ∩ I(b))=0。
2. dim(I(a) ∩ B(b))=1、dim(B(a) ∩ I(b))=1,但是对于面部分重叠,我们不关心a、b的内部与边界交集情况,因此Matrix(1)= Matrix(3)=*;
3. dim(I(a) ∩ E(b))=2,则九交模型中Matrix(2)=T;
4. dim(B(a) ∩ B(b))=0,但是对于面部分重叠,我们不关心a的边界与b的边界交集情况,因此Matrix(4)=*;
5. dim(B(a) ∩ E(b))=1、dim(E(a) ∩ B(b))=1,但是对于面部分重叠,我们不关心a、b的边界与外部的交集情况,因此Matrix(5)= Matrix(7)=*;
6. dim(E(a) ∩ I(b))=2,则九交模型中Matrix(6)=T;
7. dim(E(a) ∩ E(b))=2,但是对于面部分重叠,我们不关心a的内部与b的边界交集情况,因此Matrix(8)=*。
|
|
图 2‑1 举例说明“面部分重叠”与其九交模型 |