2016-06-02 7 views
0

私は200ポイント(=先住民族のコミュニティ)を持っています。各プロットを中心に3つのバッファ領域(生態系サービス需要の領域)をプロットしました。私が本当に必要なの代わりに円周のリング状ではない円周の中心から始まる2番目と3番目のバッファであり、それは前のバッファを終了したところから、バッファ領域のIDを消去する

BUFFER 1 = 0〜8キロ

バッファ2 = 8〜14キロメートル(ない0-14)

バッファ3 = 14〜18キロメートル(ない0-18)

Iは "消去" 機能を使用する場合、バッファはそう、supperimposedれます私はいい結果を得られない:図に示されているように、リングがそれらの間で切断される... 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によって各消去機能を「個別化」という句を追加する必要があると思いますが、私はそれをする方法を知らない!なにか提案を?

ありがとうございました!!!!私はそれがループを使用して作られた

+0

「私は、各消去機能をIDごとに「個別化」する句を追加する必要があると思いますが、どうやったらそれを行うのかわかりません。可能であれば、探している回答の簡単な例を記入してください。 – Alex

+0

私が「個別化」と言うとき、同じID(つまり、今のようにすべての8kmバッファを解凍するのではなく)で1つの小さなバッファで各バッファを「消去」する必要があるということです。 私は毎回異なるIDを選択することを考えていました。結果は、完全なリングを持つ多角形でなければなりません。悪い点は、私はPostgreSQLのループで使われていないことです! – Maria

答えて

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

感謝!

関連する問題