重複ポリゴンを1つにまとめて、属性を,区切りで保存する手順(PostGISとQGIS)

概要

PostGISとQGISを使用して、重複ポリゴンを一つにまとめて、属性を,区切りで表示させる手順になります。

地番図などの修正作業で使うことになりそうです。

元々pluginなどで重複ポリゴンを抽出しようとしましたが、上手くいかず、方法を模索した結果、postgisを使用することで抽出できました。

情報保護の観点から、説明の画像を一部黒塗りしておりますので、ご了承ください。

 

手順詳細

postgis

postgisのインストール方法やshpの取り込み方は、こちらのサイトを参考にしてみてください。

localhostに作業用のDBを作成しておくとよいです。また、拡張機能でpostgisを追加しておきます。

重複を抽出したいshpを作業用のDBに追加します。ここではsagyoというDBを作成して、tochi2011という名前のshpを取り込んでいます。

 

以下のsqlを流して、重複ポリゴンの抽出を行います。

tochi_chofukuという新たな重複のあるデータのみのテーブルを作成します。

geom列(座標を文字列で表したもの)で、同じデータを抽出します。

CREATE TABLE tochi_chofuku AS

SELECT t1.*, t2.重複数

FROM “tochi2011” AS t1

INNER JOIN (

SELECT geom, COUNT(*) AS 重複数

FROM “tochi2011”

GROUP BY geom

HAVING COUNT(*) >= 2

) AS t2 ON t1.geom = t2.geom;

 

tochi2011から、tochi_chofukuを削除したテーブル(tochi_chofuku_sakujo)を作成します。

まずは、tochi2011のテーブルをコピーして、tochi_chofuku_sakujoというテーブルを作成します。

下記のsqlで作成します。

CREATE TABLE tochi_chofuku_sakujo AS

SELECT * FROM tochi2011;

 

次に、作成したtochi_chofuku_sakujoのテーブルに対して、下記のsqlを流します。

gidはidのことです。ユニークな値であれば、何でも大丈夫です。

DELETE FROM “tochi_chofuku_sakujo”

WHERE gid IN (

SELECT gid

FROM “tochi_chofuku”

);

 

tochi_chofukuのテーブルをもとに、重複しているポリゴンごとにフラグを付けたテーブル(tochi_chofuku_group_id)を作成します。

下記のsqlを流します。

(CREATE TABLE tochi_chofuku_group_id AS )

 

SELECT

a.*,

DENSE_RANK() OVER (ORDER BY a.geom) AS group_id

FROM “tochi_chofuku” AS a

 

QGIS

ここからQGISを使用します。

QGISを起動して、PostgreSQLからsagyoのDBに接続して、tochi_chofuku_group_idを追加します。

 

プロセシングツールボックス → ベクタジオメトリ → 集計 を選択します

 

入力レイヤをtochi_chofuku_group_id、グループ化のための式を「group_id」とします。

集計関数は、一つでよいものはminimum、,区切りにしたいものは、concatenateを選択します。

shpに名前を付けて(今回はtochi_chofuku_gattai.shp)、実行をクリックします。

すると、group_idごとにまとまったshpが出力されます。

 

 

土地重複部分を削除したデータ(tochi_chofuku_sakujo)と重複分のデータ(tochi_chofuku_gattai)をマージします。

PostgreSQLからsagyoのDBに接続して、tochi_chofuku_sakujoを追加します。

 

プロセシングツールボックス → ベクタ一般 → ベクタレイヤをマージ を選択します。

 

入力レイヤに、土地重複部分を削除したデータ(tochi_chofuku_sakujo)と重複分のデータ(tochi_chofuku_gattai)を選択して、出力レイヤに名前を付けて(ここでは、tochi_final)、実行します。

 

 

1つにまとまったポリゴンが完成します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です