【问题标题】:POSTGIS multiple polygons ST_Intersects checkPOSTGIS 多个多边形 ST_Intersects 检查
【发布时间】:2017-06-21 05:53:44
【问题描述】:

我在一个数组中有一组多边形(不在数据库中)。我想检查这些多边形是否与另一个多边形相交。

例子:

input: [[], [], [], [], []] - set of polygons
want to checks those with another one polygon.
Return an array of true or false  

ST_intersects 一次只支持两个多边形。 有没有办法一次检查所有?如果不是,我必须遍历所有输入多边形并一一检查。

谢谢。

【问题讨论】:

  • AFAIK 没有办法做到这一点。你必须循环

标签: postgresql postgis


【解决方案1】:

您可以将 ST_DUMPST_INTERSECTS 函数组合用于数组几何(MULTIGEOMETRY TYPE)

St_astext(parcel.geom);

MULTIPOLYGON(((398140.945672642 4542263.06495453,398140.410405475 4542262.72839343,398140.513367039 4542263.18287079,398140.945672642 4542263.06495453)),
((398147.309882976 4542261.32904395,398146.58758329 4542258.33481488,398144.165643562 4542262.18667092,398147.309882976 4542261.32904395)),
((398141.915568335 4542238.96883738,398135.522133265 4542241.15138888,398138.811826236 4542255.67218681,398140.343422935 4542253.23633343,398146.254207604 4542256.95287011,398141.915568335 4542238.96883738)))

这是我数据库中的一个示例 - 已签入;

select a.objectid,b.fid ,st_intersects (a.poly,b.geom)
from region a, 
(
select objectid::text||((st_dump(poly)).path[1]::text) as fid, (st_dump(poly)).geom as geom 
    from parcel where geometrytype(poly)='MULTIPOLYGON' ) 
  as b

https://postgis.net/docs/ST_Dump.html

https://postgis.net/docs/ST_Intersects.html

【讨论】:

    【解决方案2】:

    如果您想知道至少一个输入多边形是否与目标多边形相交,您可以将输入表示为 MultiPolygon 数据类型。这基本上就是您拥有的数组。然后ST_Intersects 采用多面体单元格。但是,没有返回布尔值数组(真或假)的选项。

    您可以在WKT wiki page 中看到 MultiPolygon 的 WKT 表示,构造它并使用 ST_GeomFromText 转换为 PostGIS 二进制

    【讨论】:

    • 我需要检查所有多边形是否与另一个多边形相交,或者是否有任何多边形与另一个多边形不相交返回 false。 ?
    猜你喜欢
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 2015-09-17
    • 2016-02-16
    • 2020-01-15
    • 2011-06-17
    • 2011-09-18
    相关资源
    最近更新 更多