问题描述
我有一个包含多个表的空间数据库,我为带有点的表创建了一个缓冲区,并希望将缓冲区添加到现有表中。并且想要做一个空间连接,比如使用这个缓冲区和另一个带有点的表来计算每个缓冲区内的点数,并将其添加为现有缓冲区表中的一个新列。我想不通。
SELECT ST_Buffer(geom::geography,100) FROM public.operation;
UPDATE operations SET buffer = ST_Buffer(geom::geography,100)::geometry;
FROM "Supermarket" AS pts,"geom" as ST_Buffer
WHERE ST_Contains( the_geom,pts.location)
解决方法
首先添加一个带有 AddGeometryColumn
.. 的新几何列
SELECT AddGeometryColumn ('public','operations','buffer',4326,'POLYGON',2);
.. 然后在新列中插入缓冲区并进行更新
UPDATE operations SET buffer = ST_Buffer(geom::geography,100)::geometry;
编辑 1:向表“操作”添加一个新列,并用另一个表中与新缓冲区空间重叠的点数填充它:
ALTER TABLE operations ADD COLUMN pts int;
UPDATE operations o
SET pts = (SELECT count(*) FROM supermarket s
WHERE ST_Contains(o.buffer,s.geom));
编辑 2(见评论):
CREATE INDEX idx_operation_geom ON operations USING gist (geom);
CREATE INDEX idx_supermarket_geom ON supermarket USING gist (geom);