两个缓冲区的区别

Difference of two buffers

我想在一条线周围创建一个 100 米的缓冲区。但是我不想 select 第一个 20m 缓冲区。我试过这样的事情:

SELECT st_buffer(l.geom, 100) FROM line l
EXCEPT
SELECT st_buffer(l.geom, 20) FROM line l

但是在QGIS中查看后还是不行。我该如何解决?

EXCEPT 不会在这里做。这将 return 第一个查询中不在第二个查询中的任何行。它不会修改这些行的列。 st_buffer is a single geometry 的结果是单行。

相反,您通过从较大的圆圈中雕刻出较小的圆圈来构建一个环面,一个甜甜圈。我相信(我手边没有 PostGIS)你可以通过制作两个缓冲区然后用 st_difference.

从较大的缓冲区中减去较小的缓冲区来做到这一点
select
    st_difference(
        st_buffer(l.geom, 100), 
        st_buffer(l.geom, 20)
    ) as torus
from line l