是否可以在PostGIS中将包含多个多边形的形状文件导入单个多边形?每当我尝试导入多边形的形状文件时,它都会在geom
列中存储为多面(而不是单个多边形)。因此,我无法将其从多面体中提取为单个多边形值。
非常感谢所有有用的建议
答案 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_GeometryN和ST_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