PostGIS ST_Intersectsで地物を抽出する

はじめに

PostGISを使って、北海道に重なる基準地域メッシュ(第3次地域区画)のオブジェクト抽出を行ったので、その時の作業メモです。

f:id:Chiakikun:20210506122146p:plain

メッシュ(PostGISに「jpmesh_3」で登録、フィールド「code」にはメッシュ番号が入っています)

f:id:Chiakikun:20210518231252p:plain

拡大したところ。

f:id:Chiakikun:20210506122455p:plain

北海道(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)

ついでに北海道のオブジェクトのノードを半分程間引いて計測してみました。

間引いた後の北海道はこんな感じです

f:id:Chiakikun:20210506124536p:plain

f:id:Chiakikun:20210506124651p:plain

f:id:Chiakikun:20210506124811p:plain

赤く見えているところが、間引き前の北海道です。

INDEX作成前 Time: 4933.373 ms (00:04.933)

INDEX作成後 Time: 3123.348 ms (00:03.123)


QGISで作業する場合

f:id:Chiakikun:20210506125051p:plain

QGISで同じことをする場合は「場所による選択」を実行します。

 

f:id:Chiakikun:20210506125116p:plain

実行時間は121.43秒でした。PostGISにテーブルを登録する手間を考えると、QGISでの作業は実行時間こそかかりましたが、簡単操作でできるので、少ないレコード数のレイヤを抽出するならQGISで...ということになってしまいました。


最後までご覧いただき、ありがとうございました。