PostgreSQL从2个查询中插入行,其中一个值是从另一查询派生的

时间:2019-06-09 22:12:55

标签: sql postgresql postgis

我有一张表Images,正在使用该表(与PostGIS一起使用)来计算重叠的多边形。下图显示了一个超级简单的示例。

enter image description here

使用以下查询,将此空间查询的几何结果推入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);

0 个答案:

没有答案