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

Postgresql PostGIS-将多多边形转换为单个多边形,postgresql,postgis,geoserver,Postgresql,Postgis,Geoserver,是否可以将包含多多边形的形状文件导入PostGIS中的单个多边形?每当我尝试导入多边形的形状文件时,它都会作为多多边形(与单个多边形相反)存储在geom列中。因此,我无法将其从多多边形中提取为单个多边形值 非常感谢的所有有用建议导入到暂存表中,然后用于将multigeom分解为各个部分,并使用这些部分填充目标表 更新 您可以将所需的所有数据导入一个暂存表(我们称之为multi),然后使用ST_DUMP将互几何分解为单个几何体: WITH multi AS( SELECT 1 as id, 2 a

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


非常感谢的所有有用建议

导入到暂存表中,然后用于将multigeom分解为各个部分,并使用这些部分填充目标表

更新 您可以将所需的所有数据导入一个暂存表(我们称之为
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 
您可以与和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(geom, generate_series(1, ST_NumGeometries(geom))) AS geom 
FROM multi
“id”和“test”是原始表中每一行的值。 generate_series创建从1到每行几何图形数的一系列数字

因此,您将在其单独的单个几何图形部分中拆分每个多几何图形,并且其他列中的值保持不变

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

希望这能回答您的问题。

我曾在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

你能解释一下吗?我们有一个形状文件,并使用postgis 2.0形状加载器导出到postgesql。这是高级答案。geom::geometry(Polygon,4326)用于什么?@Richard,因为他们正在创建表,所以他们需要告诉postgres/postgis几何列的SRID