2016-11-16 65 views
0

我想创建一个100米左右的缓冲区。但我不想选择第一个20米缓冲区。我试过这样的:两个缓冲区的差异

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

但是在QGIS中检查它没有工作。我该如何解决这个问题?

+1

'EXCEPT'不打算在这里做。这将返回第一个查询中不在第二个中的任何***行***。它不会修改这些行的列。我想你想要的是一个圆环? – Schwern

+0

@Schwern,没错。但我怎么得到它? – TD1995

回答

3

EXCEPT不打算在这里做。这将返回第一个查询中不在第二个查询中的任何行。它不会修改这些行的列。 st_buffer的结果是单个行geometry

取而代之,您可以通过雕刻较大圆圈中的较小圆圈来构建圆环面圈。我相信(我没有PostGIS方便),你可以做两个缓冲区,然后从st_difference减去较大的较小者。

select 
    st_difference(
     st_buffer(l.geom, 100), 
     st_buffer(l.geom, 20) 
    ) as torus 
from line l 
+1

谢谢,这完成了这项工作。 – TD1995