我在数组中设置了多边形(不在数据库中)。我想检查那些与另一个多边形相交的多边形。
示例:
input: [[], [], [], [], []] - set of polygons
want to checks those with another one polygon.
Return an array of true or false
ST_intersects一次只支持两个多边形。 有没有办法一次检查所有?如果不是,我必须遍历所有输入多边形并逐个检查。
感谢。
答案 0 :(得分:1)
您可以将ST_DUMP
和ST_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
答案 1 :(得分:0)
如果您想知道至少有一个输入多边形是否与目标多边形相交,则可以将输入表示为MultiPolygon数据类型。这基本上就是你拥有的数组。然后ST_Intersects
采用Multipolygon单元格。但是,没有选项可以返回布尔值数组(true或false)。
您可以在WKT wiki page中看到MultiPolygon的WKT表示,构建它并使用ST_GeomFromText转换为PostGIS二进制文件