PostGIS - 将多面转换为单个多边形

19 postgresql postgis geoserver

是否可以在PostGIS中将包含多边形的形状文件导入单个多边形?每当我尝试导入多边形的形状文件时,它都会在geom列中存储为多面(而不是单个多边形).因此,我无法将其从多面体中提取为单个多边形值.

所有有用的建议非常感谢

Tyl*_*ler 24

我使用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;
Run Code Online (Sandbox Code Playgroud)

更新:我认为使用此查询可以更轻松地完成此操作.

CREATE TABLE polygon_table AS 
    SELECT id, example_column, (ST_DUMP(geom)).geom::geometry(Polygon,4326) AS geom FROM multipolygon_table
Run Code Online (Sandbox Code Playgroud)

  • `.geom::geometry(Polygon,4326)` 有什么用? (3认同)

小智 20

您可以将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
);
Run Code Online (Sandbox Code Playgroud)

这个包含一个多字形,一个id和另一列.

要从表中获取包含所有其他属性的每个单个多边形,请尝试以下操作:

SELECT id, test, ST_GeometryN(geom, generate_series(1, ST_NumGeometries(geom))) AS geom 
FROM multi
Run Code Online (Sandbox Code Playgroud)

"id"和"test"是原始表中每行的值.generate_series创建一系列数字,从1到每行中的几何数.

因此,您将在其单独的单个几何体零件中拆分每个多重几何体,并且其他列中的值保持不变.

只需使用导出的shapefile中的列替换示例中的列和表,您将获得包含单个多边形的表.

希望这能回答你的问题.