美文网首页
利用PostGIS中的九交模型解决选址问题

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

作者: XiaohuanJiang | 来源:发表于2020-03-30 00:40 被阅读0次

    1. 问题描述

    • 有一批港口的选址方案,符合标准的选址方案是:港口(线型)的一端必须与湖岸相交,并且港口的所有其他部分都要在湖中。目前有5个选址的方案,这些方案哪些是符合标准的?
    file

    2. 九交模型介绍

    2.1 空间要素的组成部分

    • 首先,定义所有的空间要素都有

      • 内部(interior)
      • 边界(boundary)
      • 外部(exterior)
    • 面:

      file
    • 线:


      file
    • 点:
      I B(为空) E


      file

    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 分析:

    码头必须拥有以下特征:

    • 码头一端与湖岸相接→B(a)∩B(b) = 0
    • 码头在湖中→I(a)∩I(b) = 1
    • 码头不在湖以外的地区 → I(a)∩E(b) = F
    • 码头的另外一端在湖中 → B(a)∩I(b) = 0

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

    file

    3.2 计算过程

      1. 数据初始化
    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
      1. 进行相交分析
    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交集模型

    相关文章

      网友评论

          本文标题:利用PostGIS中的九交模型解决选址问题

          本文链接:https://www.haomeiwen.com/subject/igzpuhtx.html