利用PostGIS中的九交模型解决选址问题

2020-03-30  本文已影响0人  XiaohuanJiang

1. 问题描述

file

2. 九交模型介绍

2.1 空间要素的组成部分

2.2 九交模型

两个几何图形的空间关系,可以用以下矩阵表示:

file

举例来说,就是以下的表达方式,点-点、点-线、点-面、线-线、线-面、面-面的空间关系可以依次推导:


file

2.3 一些典型的空间关系

OGC中标准的空间关系

序号 空间关系 中文名称 pg函数 解释 相交关系
1 Contains / Inside 包含 一个几何图形的内部完全包含了另一个几何图形 file
2 Croses 交叉、穿过 一个几何图形的内部和另一个几何图形的边界和内部相交,在不同维度图形使用,如线和面 file
3 Disjoint 分离 两个几何图形的边界和内部不相交 file
4 Equal 相等 两个几何图形具有相同的边界和内部 file
5 Intersects 相交 两个几何图形没有分离(Non-Disjoint) 除了分离以外的所有情况
6 Overlaps 重叠 两个图形的边界和内部相交(Intersect) file
7 Touch 接触 两个几何图形的边界相交,但是内部不相交 file
8 Within 包含于 一个几何图形的内部和边界完全在另一个几何图形的内部 file

2.4 扩展

三维空间拓扑关系
点-点空间关系2种:相离、相等;
点-线空间关系3种:相离、相接、包含于;
点-面空间关系3种:相离、相接、包含于;
点-体空间关系3种:相离、相接、包含于;
线-线空间关系7种:相离、相交、交叠、相等、相接、包含于、包含;
线-面空间关系5种:相离、相接、进入、穿越、包含于;
线-体空间关系5种:相离、相接、进入、穿越、包含于;
面-面空间关系10种:相离、相接、交叠、相等、包含于、包含、覆盖、被覆盖、穿越、被穿越;
面-体空间关系8种:相离、相接、交叠、进入、包含于、包含、穿越、被穿越;
体-体空间关系8种:相离、相接、进入、相等、包含于、包含、穿越、被穿越。

3. 如何在PostgreSQL中利用9交模型解决码头选址问题?

3.1 分析:

码头必须拥有以下特征:

所以整理得到九交满足的码头标准为:1FF00F212

file

3.2 计算过程

CREATE TABLE lakes ( id serial primary key, geom geometry ); --创建带有坐标的geom表
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); --初始化码头

file
SELECT docks.* FROM docks JOIN lakes ON ST_Intersects(docks.geom, lakes.geom) WHERE ST_Relate(docks.geom, lakes.geom, '1FF00F212');--ST_Intersects先进行求交运算,判断

4. 9交模型的运算效率如何?

参考博客:
点线面拓扑关系
代数拓扑
维数扩展的9交集模型

上一篇下一篇

猜你喜欢

热点阅读