我有一张表Images
,正在使用该表(与PostGIS一起使用)来计算重叠的多边形。下图显示了一个超级简单的示例。
使用以下查询,将此空间查询的几何结果推入geom
表的overlay
列中。
INSERT INTO overlay(geom)
(
SELECT ST_AsEWKB(geom) AS geom FROM ST_Dump((
SELECT ST_Polygonize(the_geom) AS the_geom FROM (
SELECT ST_Union(the_geom) AS the_geom FROM (
SELECT ST_ExteriorRing((ST_DUMP(footprint_latlon)).geom) AS the_geom
FROM images AS lines
) AS noded_lines
))
)
然后,我运行第二个查询以计算对叠加层有贡献的Images
多边形。这些是图像中的字母,结果填充在Overlay
表中的数组中。具体来说,
UPDATE overlay
SET intersections = imgs.iid
FROM (
SELECT array_agg(images.id)
FROM overlay, images
ST_INTERSECTS(overlay.geom, images.footprint_latlon)
GROUP BY overlay.id
) AS intersections
WHERE imgs.id = overlay.id;
我一直在试图找出是否可以一次通过。也就是说,从Images
表中计算出相交的几何图形,对上一个结果进行ST_INTERSECTS
检查,然后 then 进入该行。这将使两遍方法变为一遍方法。
到目前为止,我已经尝试了以下变化,但均无济于事。感谢所有可能将我推向正确方向的建议或文档链接。
INSERT INTO overlay(geom,intersections)
(SELECT ST_AsEWKB(geom) FROM ST_Dump((
SELECT ST_Polygonize(the_geom) AS the_geom FROM (
SELECT ST_Union(the_geom) AS the_geom FROM (
SELECT ST_ExteriorRing((ST_DUMP(footprint_latlon)).geom) FROM images) AS the_geom)
as geom)),
(SELECT array_agg(images.id)
WHERE ST_INTERSECTS(geom, images.footprint_latlon) AS iid);