【问题标题】:PostGIS Intersection of multiple tables多个表的 PostGIS 交集
【发布时间】:2018-03-28 12:06:15
【问题描述】:

在我的 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 中的所有几何字段都在同一个投影中。

谢谢

【问题讨论】:

    标签: sql postgis


    【解决方案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 相交,那么恕我直言,我们应该有一个相交。所以看起来像:

     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 
    

    【讨论】:

    • 我想在一个新表中创建新的多边形(我在第 1 篇文章中将其称为输出表),它由 TableA、B、C 中多边形的相交区域定义。 st_intersects 可能不是正确使用的函数。是不是更清楚了?如果您熟悉 Qgis,该函数在 Vector Geoprocessing 工具菜单下名为“Intersect” - 我也想做同样的事情(如果可能一次使用 3 个表,但如果有两个表的解决方案,我可以运行它两次)。
    • 不确定如何定义交集,如果有三个表,即使有交集(我的意思是 A 与 B 相交,A 与 C 相交,但是这两个交点是否相互相交?? ),但对于两个人来说,这很简单。所以我添加了那个例子。然后我扩展了应该适用于三个相交几何图形的查询。
    猜你喜欢
    • 2013-03-15
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多