【发布时间】:2020-08-16 09:41:37
【问题描述】:
我正在使用 PostGIS 的 ST_DWIthin() 将属性与点相关联。
UPDATE scratch.intersections AS i
SET legs = (
SELECT COUNT(r.geom)
FROM received.streets r
WHERE ST_DWithin(i.geom, r.geom, 2));
UPDATE scratch.intersections AS i
SET streets = (
SELECT ARRAY_AGG(DISTINCT r.NAME ORDER BY r.NAME)
filter (WHERE r.NAME IS NOT NULL)
FROM received.streets r
WHERE ST_DWithin(i.geom, r.geom, 2));
似乎应该可以使用单个空间查询更新多个列,但我想不出一种方法来构造它,因为我一次只能更新一个列。
有没有办法将这两个查询变成一个查询,只需要一次空间计算?
使用INNER JOIN 创建一个新的临时表,其中每行记录在一个点的 2 以内,然后从该表中设置值会更有效吗?描述它,这听起来效率较低,因为使用索引 ST_DWithin() 的性能并不差。
【问题讨论】:
-
计数是否进入
streets或名称数组?这个UPDATE多久运行一次?整张桌子?我可能有更多的建议。 -
甚至没有发布正确的代码 sn-p 抱歉,已更新。它只是将腿设置为等于进入十字路口的街道数量,然后构建一组街道名称。我经常运行这样的查询,但单个查询只运行几次,总是针对整个表。
标签: sql postgresql sql-update postgis spatial