对于超级缓冲区域,通过ID擦除功能

时间:2016-06-02 10:02:54

标签: postgresql qgis

我有200分(=土着社区),我在每个地块的中心绘制了3个缓冲区(=生态系统服务需求区)。我真正需要的是第二个和第三个缓冲区不是从圆周中心开始,而是从它结束前一个缓冲区开始,就像一个环而不是一个圆周

BUFFER 1 = 0到8 km

BUFFER 2 = 8到14 km(不是0-14)

BUFFER 3 = 14到18 km(不是0-18)

缓冲区是超级的,所以当我使用“擦除”功能时,我不会得到一个好结果:在它们之间切割Rrings,如图所示...... This is the bad result!!

我试图在QGIS中使用以下代码在POSTGRESQL中执行此操作,但未成功:

CREATE TABLE maria.buffer_km14_erase AS
SELECT gid, buff_dist, id_comu, ST_DIFFERENCE (the_geom,  
    (SELECT ST_UNION (the_geom) FROM maria.buffer_km08)) AS the_geom
FROM maria.buffer_km14;

我想我需要添加一个通过ID“个性化”每个擦除功能的子句,但我不知道该怎么做!有什么建议吗?

非常感谢!!!!

1 个答案:

答案 0 :(得分:1)

@Alex

我使用循环制作...以下是代码:

首先,我创建了一个空表:

CREATE TABLE maria.buffer_km14_erase (id_comu int, the_geom geometry(Polygon,96842))  -- col names & type

其次,我应用了循环!

DO
$do$
BEGIN 
FOR i IN 1..202 LOOP  -- 202 is the maximum n
   INSERT INTO maria.buffer_km14_erase (id_comu, the_geom) -- empty table and col names
   (SELECT id_comu, ST_DIFFERENCE (the_geom,  
    (SELECT the_geom FROM maria.buffer_km08 WHERE id_comu=i)) AS the_geom
    FROM maria.buffer_km14 
    WHERE id_comu=i);
END LOOP;
END;
$do$;

This is the correct result

感谢!!!