Est-il possible d'importer un fichier de forme contenant des multipolygones dans un seul polygone dans PostGIS? Chaque fois que j'essaie d'importer un fichier de forme d'un polygone, il est stocké en tant que multipolygone (par opposition à un seul polygone) dans une colonne geom
. Ainsi, je ne peux pas l'extraire comme une seule valeur de polygone du multipolygone.
Toutes les suggestions utiles très appréciées
Vous pouvez utiliser ST_GeometryN avec ST_NumGeometries et la fonction generate_series pour obtenir ce dont vous avez besoin.
Supposons que vous ayez le tableau de l'exemple de 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
);
Celui-ci contient un multipolygone, un id et une autre colonne.
Pour obtenir chaque polygone unique de la table, y compris tous les autres attributs, essayez quelque chose comme:
SELECT id, test, ST_GeometryN(poli, generate_series(1, ST_NumGeometries(geom))) AS geom
FROM multi
"id" et "test" sont les valeurs de chaque ligne du tableau d'origine. generate_series crée une série de nombres de 1 au nombre de géométries dans chaque ligne.
Par conséquent, vous diviserez chaque géométrie multiple en ses parties géométriques uniques distinctes et les valeurs des autres colonnes resteront les mêmes.
Remplacez simplement les colonnes et le tableau dans l'exemple par les colonnes de votre fichier de formes exporté et vous obtiendrez le tableau avec les polygones simples.
J'espère que ça répond à ta question.
J'ai utilisé ST_DUMP pour convertir une table de géométries multipolygones dans PostgreSQL en une nouvelle table avec des géométries polygonales et d'autres colonnes de données.
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;
Mise à jour: Je pense que cela pourrait être accompli beaucoup plus facilement avec cette requête.
CREATE TABLE polygon_table AS
SELECT id, example_column, (ST_DUMP(geom)).geom::geometry(Polygon,4326) AS geom FROM multipolygon_table
Importez dans une table intermédiaire, puis utilisez ST_DUMP pour freiner le multigeom en morceaux individuels et utilisez-le pour remplir la table de destination.
Vous importez toutes les données dont vous avez besoin dans une table intermédiaire (appelons-la multi
), puis utilisez ST_DUMP
pour diviser la mutligeométrie en géométries simples:
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