web-dev-qa-db-ja.com

PostGIS-マルチポリゴンを単一のポリゴンに変換

複数ポリゴンを含むシェイプファイルをPostGISの単一ポリゴンにインポートすることはできますか?ポリゴンのシェイプファイルをインポートしようとするたびに、geom列に(1つのポリゴンではなく)マルチポリゴンとして保存されます。したがって、マルチポリゴンから単一のポリゴン値として抽出することはできません。

すべての有用な提案は大歓迎

18
user3012604

ST_GeometryNST_NumGeometries およびgenerate_series関数と一緒に使用して、必要なものを取得できます。

Jakubの例のテーブルがあると仮定しましょう。

CREATE TABLE multi AS(
SELECT 1 as id, 2 as test, ST_GeomFromText('MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0)),((1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))') AS geom
);

これには、マルチポリゴン、ID、および別の列が含まれます。

他のすべての属性を含むテーブルから各ポリゴンを取得するには、次のようにします。

SELECT id, test, ST_GeometryN(poli, generate_series(1, ST_NumGeometries(geom))) AS geom 
FROM multi

「id」と「test」は、元のテーブルの各行の値です。 generate_seriesは、1から各行のジオメトリの数までの一連の数値を作成します。

したがって、各マルチジオメトリを個別の単一ジオメトリパーツに分割し、他の列の値は同じままにします。

例の列と表をエクスポートしたシェープファイルの列に置き換えるだけで、単一のポリゴンを含む表が得られます。

これがあなたの質問に答えることを願っています。

17
mdomnita

ST_DUMP を使用して、PostgreSQLのマルチポリゴンジオメトリのテーブルを、ポリゴンジオメトリと他のデータ列を持つ新しいテーブルに変換しました。

CREATE TABLE poly AS                       --poly will be the new polygon table
WITH dump AS (
    SELECT id, test,                       --columns from your multipolygon table 
      (ST_DUMP(geometry)).geom AS geometry 
    FROM multi                             --the name of your multipolygon table
) 
SELECT id, test, 
  geometry::geometry(Polygon,4326)         --type cast using SRID from multipolygon
FROM dump;

更新:これは、このクエリではるかに簡単に達成できると思います。

CREATE TABLE polygon_table AS 
    SELECT id, example_column, (ST_DUMP(geom)).geom::geometry(Polygon,4326) AS geom FROM multipolygon_table
23
Tyler

ステージングテーブルにインポートしてから、 ST_DUMP を使用してマルチジオムを個々のピースにブレーキし、それを使用して宛先テーブルに入力します。

更新

必要なすべてのデータをステージングテーブルにインポートし(multiと呼びましょう)、ST_DUMP mutligeometryを単一のジオメトリに分割するには:

WITH multi AS(
SELECT 1 as id, 2 as test, ST_GeomFromText('MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0)),((1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))') as poli
)
,dump AS(
SELECT  id
    ,test
    ,ST_DUMP(poli) as d
FROM    multi)
SELECT  id
    ,test
    ,(dump.d).path
    ,ST_AsTEXT((dump.d).geom)
FROM dump 
1
Jakub Kania