GIS 空间关系:维度扩展九交模型

关注我,带你一起学GIS ^

前言

空间关系用于描述几何对象之间的拓扑结构,如何确定空间对象位置及其空间关系是GIS首要解决的问题。而九交模型的提出和实现为GIS空间关系的确定奠定了基础。

上一篇文章讲解了九交模型的起源以及基本概念,本文在之前的基础上进行剖析,主要介绍以九交模型为拓展的维度拓展九交模型

1. 维度拓展九交模型基本概念

先看以下来自网络的不同定义方式:

  • postgis:“维度扩展的九交模型” (DE9IM) 是一个用于模拟两个空间对象如何交互的框架。

  • KingbaseGIS参考手册:九交模型是一个九元组加维数扩展的空间拓扑关系数学描述框架。

  • Yukon(禹贡)数据库:维度扩展九交模型(Dimensionally Extended 9-Intersection Model,DE9IM)是对九交模型的应用延展,可以表达更加多样化的空间拓扑关系。

维度拓展九交模型英文叫做Dimensionally Extended 9-Intersection Model,简称DE9IM。简单理解就是用于确定几何对象空间关系的函数。

九交模型(9-Intersection Model)与维度扩展九交模型(DE-9IM)是空间拓扑关系分析的核心理论工具,二者既有继承性又有显著差异。

2. 两种九交模型的联系和区别

下表从数学基础、提出者和核心结构三个方面进行对比。九交模型属于不二矩阵,仅记录交集信息;而维度拓展九交模型是字符矩阵,并且额外记录最高维度信息(0=点,1=线,2=面)

维度

九交模型

DE-9IM

数学基础

基于点集拓扑学的闭包运算

继承九交模型,增加维度代数理论

提出者

Egenhofer & Franzosa

Egenhofer & Herring

核心结构

3×3布尔矩阵(∅/¬∅)

3×3字符矩阵(0/1/2/F/T)

DE-9IM通过以下改进克服原始模型局限:

维度编码规则

  • '0':点状交集(如顶点相遇)
  • '1':线状交集(如边重叠)
  • '2':面状交集(如区域重叠)
  • 'F':无交集(False)
  • 'T':有交集但维度不限(True)

3. 维度拓展九交模型应用

根据OpenGIS Simple Features Implementation Specification for SQL规范“比较两个几何对象关系的基本方法是对这两个几何对象的内部与内部之间、边界与边界之间、外部与外部之间进行相交试验,而区分两个几何对象之间的关系要根据相交矩阵来区分。”

  1. Boundary(边界)

几何对象的边界是比该几何对象低一个维度的几何对象的集合。对于 Point 对象,维度为 0,其边界也是空集。LINESTRING 的边界是两个端点。对于 POLYGON 对象,其边界是线条类对象,这些线条组成了POLYGON 的内环和外环。

  1. Interior(内部)

一个几何对象的内部,是指几何对象上除边界之外的点的集合。对于点来说,点的内部就是点自身。对于 LINESTRING 来说,其内部就是起点和终点之间的真实点。对于 POLYGON 多边形来说,其内部就是多边形内部的面。

  1. Exterior(外部)

几何对象的外部,是指除了几何对象占有的空间之外,其他的空间。换句话说,所有不在几何对象内部和边界上的点都是几何对象的外部。(在 OGC 规范中)几何对象的外部是一个二维的、不封闭的面。

 

内部(Interior

边界(Boundary)

外部(Exterior

维度

点(Point)

本身

空集

本身之外

0

线(LineString)

本身

两个端点

本身之外

1

面(Polygon)

本身

线条

本身之外

2

对于给定输入几何对象 a 和 b,如果 I(a)、B(a)、和 E(a) 分别表示 a 的内部、边界、外部, I(b)、B(b)、和 E(b) 分别表示 b 的内部、边界、外部,那么 a 和 b 的相交矩阵如下:

Dim(dimension) 函数返回计算的维度,其值有**{-1,0,1,2,T,F}。**表示含义如下:

  • 0:存在交集,相交于点。
  • 1:存在交集,相交于线。
  • 2:存在交集,相交于面。
  • T:存在交集,分别相交于点、线和面。
  • F:不存在交集,即空集

对于更松散的模式搜索,三参数允许在模式字符串中使用替换字符。

  • “*”表示“此单元格中的任何值都是可接受的”。
  • “T”表示“任何非假值 (0、1 或 2) 都是可接受的”。

对于两个叠加的多边形对象,其维度拓展九交模型如下:

从左到右读,从上到下读,维度矩阵表示为:“212101212”。

4. 在PostGIS中的应用

以下是一个线串部分进入多边形的另一个示例

交互的 DE9IM 矩阵如下

注意,这两个对象的边界实际上并没有相交(线的终点与多边形的内部相交,而不是边界,反之亦然),因此 B/B 单元格用“F”填充。

虽然可以用视觉模型表达维度矩阵,但在PostGIS中,可以利用 ST_Relate 函数做到这一点。

前面的例子可以用一个简单的盒子和线来简化,它们具有与我们的多边形和线字符串相同的空间关系。
打开pgAdmin管理器或者其他数据库管理工具,在 SQL 查询中生成 DE9IM 信息。

SELECT ST_Relate(
   'LINESTRING(0 0, 2 0)',
   'POLYGON((1 -1, 1 1, 3 1, 3 -1, 1 -1))'
);

答案 (1010F0212) 与我们用视觉方式计算的结果相同,但以 9 个字符的字符串形式返回,将表格的第一行、第二行和第三行连接在一起。

然而,DE9IM 矩阵的强大之处不在于生成它们,而在于将它们用作匹配键来查找与彼此具有非常特定关系的几何图形。

CREATE TABLE lakes ( id serial primary key, geom geometry );
CREATE TABLE docks ( id serial primary key, good boolean, geom geometry );

INSERT INTO lakes ( geom )
  VALUES ( 'POLYGON ((100 200, 140 230, 180 310, 280 310, 390 270, 400 210, 320 140, 215 141, 150 170, 100 200))');

INSERT INTO docks ( geom, good )
  VALUES
        ('LINESTRING (170 290, 205 272)',true),
        ('LINESTRING (120 215, 176 197)',true),
        ('LINESTRING (290 260, 340 250)',false),
        ('LINESTRING (350 300, 400 320)',false),
        ('LINESTRING (370 230, 420 240)',false),
        ('LINESTRING (370 180, 390 160)',false);

在数据库管理工具中执行以上语句。

假设我们有一个数据模型,其中包含 Lakes 和 Docks,并且假设码头必须位于湖泊内部,并且必须在一端接触其包含的湖泊的边界。我们能否找到数据库中所有符合该规则的码头?我们的合法码头具有以下特征:

  • 它们的内部与湖泊内部有线性 (1D) 交点。
  • 它们的边界与湖泊内部有点 (0D) 交点。
  • 它们的边界也与湖泊边界有点 (0D) 交点。
  • 它们的内部与湖泊外部没有交点 (F)。

因此,它们的 DE9IM 矩阵如下所示:

因此,要找到所有合法码头,我们需要找到所有与湖泊相交的码头(我们用于连接键的 潜在候选者的超集),然后找到该集合中具有合法关系模式的所有码头。

SELECT docks.*
FROM docks JOIN lakes ON ST_Intersects(docks.geom, lakes.geom)
WHERE ST_Relate(docks.geom, lakes.geom, '1FF00F212');

执行以上语句能够查询出两条符合条件的记录。

但是不知道我的为啥只能查出来一条记录(蒜鸟蒜鸟)。

5. 参考资料

  • 博客:https://www.cnblogs.com/jiujiubashiyi/p/17031742.html
  • KingbaseGIS参考手册:https://help.kingbase.com.cn/v8.6.7.24/PDF/KingbaseGIS%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C.pdf
  • postgis:https://postgis.net.cn/workshops/postgis-intro/de9im.html
  • Yukon(禹贡)数据库:https://yukon.supermap.io/2.0/demos/demo_de9im.html

OpenLayers示例数据下载,请在公众号后台回复:ol数据

全国信息化工程师-GIS 应用水平考试资料,请在公众号后台回复:GIS考试

GIS之路公众号已经接入了智能助手,欢迎大家前来提问。

欢迎访问我的博客网站-长谈GIShttp://shanhaitalk.com

都看到这了,不要忘记点赞、收藏+关注 

本号不定时更新有关 GIS开发  相关内容,欢迎关注 

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部