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



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

所有有用的建议都非常感谢

我使用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
您可以将

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(geom, generate_series(1, ST_NumGeometries(geom))) AS geom 
FROM multi
"

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

因此,您需要将每个多几何拆分为其单独的单个几何零件,并且其他列中的值保持不变。

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

希望这能回答你的问题。

导入到

临时表中,然后使用 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 

最新更新