LoginSignup
3
1
記事投稿キャンペーン 「2024年!初アウトプットをしよう」

【PostGIS】マルチポリゴンをシングルポリゴンに変換

Last updated at Posted at 2024-01-30

地理データを扱うシステムを開発する際に、 PostGIS のマルチポリゴンのデータをシングルポリゴン(単一ポリゴン)に変更する機会があったので、その方法を記しておきます。

シングルポリゴンとマルチポリゴンのテーブル

以下のようなシングルポリゴンのテーブルがあるとします。

CREATE TABLE areas (
    area_id integer NOT NULL,
    wkb_geometry public.geometry(Polygon,4326)
);

上記のテーブルに、以下のマルチポリゴンのテーブルのデータをシングルポリゴンに変換して入れようと思います。

CREATE TABLE areas_multi (
    area_id integer NOT NULL,
    wkb_geometry public.geometry(MultiPolygon,6668)
);

変換 SQL

前提として area_id は 2つのテーブル間で重ならないとします。
以下の SQL で areas_multi.wkb_geometry のマルチポリゴンをシングルポリゴンに変換して、 areas.wkb_geometry に挿入します。

BEGIN;

INSERT INTO areas (area_id, wkb_geometry)
SELECT area_id, (ST_Dump(ST_Transform(wkb_geometry, 4326))).geom FROM areas_multi;

COMMIT;

まず、空間参照系が異なりますので、 SRID:6668 の参照系から SRID:4326 の参照系へ ST_Transform を用いて変換します。
次に ST_Dump でマルチポリゴンをシングルポリゴンに変換しています。

ST_Dump はマルチポリゴンを変換した場合、 geometry_dump(geom, path) の形式の複数のレコードに変換されます。
今回は geom だけを挿入しましたが、各ポリゴンをユニークに扱いたい場合は、 path を含めた複合キーを作るなど、工夫が必要です。

参考

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1