PostGIS ST_Intersectsで地物を抽出する
はじめに
PostGISを使って、北海道に重なる基準地域メッシュ(第3次地域区画)のオブジェクト抽出を行ったので、その時の作業メモです。
メッシュ(PostGISに「jpmesh_3」で登録、フィールド「code」にはメッシュ番号が入っています)
拡大したところ。
北海道(PostGISに「北海道」で登録)
コード
INSERT INTO temp1(geom, メッシュコード) SELECT jpmesh_3.geom, jpmesh_3.code FROM jpmesh_3, 北海道 WHERE ST_Intersects( jpmesh_3.geom,北海道.geom );
上記のコードで、北海道に重なるメッシュのオブジェクトを抽出して、予め作成しておいたtemp1というテーブルに投入しています。
実行速度を計測
ネタのかさ増しのため、INDEX作成前と後で実行速度がどのくらい変わるのか計測してみました。
INDEX作成前 Time: 6547.685 ms (00:06.548)
INDEX作成後 Time: 4210.643 ms (00:04.211)
ついでに北海道のオブジェクトのノードを半分程間引いて計測してみました。
間引いた後の北海道はこんな感じです
↓
↓
赤く見えているところが、間引き前の北海道です。
INDEX作成前 Time: 4933.373 ms (00:04.933)
INDEX作成後 Time: 3123.348 ms (00:03.123)
QGISで作業する場合
QGISで同じことをする場合は「場所による選択」を実行します。
実行時間は121.43秒でした。PostGISにテーブルを登録する手間を考えると、QGISでの作業は実行時間こそかかりましたが、簡単操作でできるので、少ないレコード数のレイヤを抽出するならQGISで...ということになってしまいました。
最後までご覧いただき、ありがとうございました。