检查某些多边形是否相互重叠

obc*_*don 1 sql postgresql postgis

我试图确定某些多边形是否相互重叠。所有多边形都在同一层中。

PostGis函数ST_OVERLAPS可以确定两个几何元素是否重叠。但我找不到一种方法来应用此函数来检查一个或多个多边形是否彼此重叠。

我想要这样的东西:

SELECT * 
FROM MyGeometricTable g
WHERE ST_OVERLAPS(g.geom,g.geom) = 1
AND g.id <> g.id                      --The polygon that overlap another polygon is not the same.
Run Code Online (Sandbox Code Playgroud)

MyGeomtricTable 包含例如 100 个多边形。

谢谢

Laj*_*pad 5

您需要使用笛卡尔乘法来完成此操作,如下所示:

\n\n
SELECT * \nFROM MyGeometricTable g1, MyGeometricTable g2\nWHERE ST_OVERLAPS(g1.geom,g2.geom) = TRUE \nAND g1.id <> g2.id;\n
Run Code Online (Sandbox Code Playgroud)\n\n

要应用 John Bar\xc3\xa7a 的改进,我们可以执行以下操作:

\n\n
select g1.id, g2.id\nfrom MyGeometricTable g1, MyGeometricTable g2\nwhere ST_OVERLAPS(g1.geom,g2.geom) = TRUE\nAND g1.id > g2.id\n
Run Code Online (Sandbox Code Playgroud)\n

  • 更好的是,您可以使用“Select g1.id .... AND gi.id &gt; g2.id;”将运行时间减少一半。 (3认同)