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

时间:2014-02-12 06:04:04

标签: postgresql postgis geoserver

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

非常感谢所有有用的建议

3 个答案:

答案 0 :(得分:19)

我使用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

答案 1 :(得分:14)

您可以将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"和"测试"是原始表中每行的值。 generate_series创建一系列数字,从1到每行中的几何数。

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

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

希望这能回答你的问题。

答案 2 :(得分:1)

导入到临时表中,然后使用ST_DUMP将多个部分制成单个部分并使用它来填充目标表。

更新

您将所需的所有数据导入到临时表中(我们称之为multi),然后使用ST_DUMP将多重几何中断分解为单个几何:

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 
相关问题