在我的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中的所有几何字段都在同一个投影中。
由于
答案 0 :(得分:1)
为清楚起见,因为"与多个多边形层的交互"有点模糊,可能意味着:
为简单起见,让我们假设第一个场景,我认为其他场景很容易推断:
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