PostGIS多个表的交集

时间:2018-03-28 12:06:16

标签: sql postgis

在我的postGIS DB中,我需要从多个多边形图层的交集创建一个新图层,同时保持所有图层(或表格)中的所有字段(或列)==>在输出表中,我需要3个输入表的所有列

我认为它必须包含ST_Intersects,但我无法找到正确的语法。您能否帮助我设计SQL命令行,了解以下通用表名称:

- TableA (with the columns: GeomA (geometry), ColumnA1, ColumnA2)
- TableB (with the columns: GeomB (geometry), ColumnB1)
- TableC (with the columns: GeomC (geometry), ColumnC1)

TableA,TableB和TableC中的所有几何字段都在同一个投影中。

由于

1 个答案:

答案 0 :(得分:1)

为清楚起见,因为"与多个多边形层的交互"有点模糊,可能意味着:

  • 您想要查找A中与B中的多边形和C
  • 中的多边形相交的所有多边形
  • 或A与B,B与C
  • 或A与B,A与C和B与C

为简单起见,让我们假设第一个场景,我认为其他场景很容易推断:

 select A.*, B.*, C.*
 from A, B, C
 where st_intersects(A.geomA, B.geomB) = true
   and st_intersects(A.geomA, C.geomC) = true 

[编辑]不只是找到行,但如果交叉点本身很重要,我们可以执行以下操作(在两个几何相交的简单情况下)

 select A.*, B.*, st_intersection(A.geomA, B.geomB) as geomAB
 from A, B
 where st_intersects(A.geomA, B.geomB) = true

我简化了这种情况,因为如果A与B相交,并且A与C相交,则甚至不能确定这两个交点是否再次交叉并且有结果。

如果我们假设A与B交叉,B与C和C与A相交,那么我们应该有一个交叉点imho。所以这看起来像:

 select A.*, B.*, C.*, st_intersection(A.geomA, st_intersection(B.geomB, C.geomC)) as geomABC
 from A, B, C
 where st_intersects(A.geomA, B.geomB) = true
   and st_intersects(A.geomA, C.geomC) = true 
   and st_intersects(B.geomB, C.geomC) = true