【问题标题】:Add the buffer to the existing table and spatial join将缓冲区添加到现有表和空间连接
【发布时间】:2021-08-24 20:14:07
【问题描述】:

我有一个包含多个表的空间数据库,我为带有点的表创建了一个缓冲区,并希望将缓冲区添加到现有表中。并想做一个空间连接,比如使用这个缓冲区和另一个带有点的表来计算每个缓冲区内的点数,并将其作为新列添加到现有缓冲区表中。我想不通。

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)

【问题讨论】:

    标签: sql postgresql geospatial postgis spatial-query


    【解决方案1】:

    首先添加一个带有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(见 cmets):

    CREATE INDEX idx_operation_geom ON operations USING gist (geom);
    CREATE INDEX idx_supermarket_geom ON supermarket USING gist (geom);
    

    【讨论】:

    • @Aravinth 这是一个完全不同的问题,我们不鼓励在一个问题中解决多个问题,因为它可能难以理解或对社区中的其他用户几乎没有用处。完成此问题后,再发布一个包含一些数据样本(最好带有小提琴)和预期结果的问题。
    • 哦,好的,非常感谢您对提问的澄清。
    • @Aravinth 顺便说一句:如果您还没有这样做,我强烈建议您在几何列中创建一个 gist 索引.. 否则使用这么多数据的操作需要很长时间才能完成。
    • 是的,这需要很多时间,'gist' 索引是什么意思。
    • @Aravinth 哦,不。我现在看到了 :-D,我使用了 geom 列而不是 buffer :-D 刚刚更正了答案:UPDATE operations o SET pts = (SELECT count(*) FROM supermarket s WHERE ST_Contains(o.buffer,s.geom));
    猜你喜欢
    • 1970-01-01
    • 2011-04-04
    • 2011-08-29
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多