Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Fri 22 April 2016 14:41

Alice.C
Participant occasionnel
Date d'inscription: 24 Sep 2015
Messages: 15

QGIS & PostGIS: Incompatibilité entre POLYGON et MULTIPOLYGON

Bonjour,

Nombreux sont ceux qui, lors de création de nouvelles géométries ou de diverses manipulations de géométries lors d'une connexion entre PostgreSQL/PostGIS et Qgis, ont un problème de cohérence de géométrie dans leur table et voit ce message apparaître :

Erreurs : ERREUR : 1 attribut non-ajouté.
Erreur du prestataire :
Erreur PostGIS lors de l'ajout d'entité : ERREUR: Geometry type (Polygon) does not match column type (MultiPolygon)

C'était mon cas et étonnement, je n'ai trouver que peu de sujets à ce propos et encore moins de solutions.
Soit, ayant réussi à régler mon problème je partage la marche à suivre.

La manip se fait dans Postgre

1. Je crée une nouvelle colonne que j'appelle as_text de type text :
>>> ALTER TABLE schema.matable ADD COLUMN as_text text;

2. Je mets à jour cette colonne par un UPDATE ... SET et je dis que ma nouvelle colonne est égale à ma colonne de géométrie à la seule différence que je transforme ma géométrie en texte pour voir à quel type de géométrie j'ai affaire.
>>> UPDATE schema.matable SET as_text = (SELECT ST_ASTEXT(geom) FROM schema.matable);

3. De là on peut déjà constater les géométries. Maintenant il suffit plus qu'à faire une petite requête :
>>> UPDATE schema.matable SET as_text = (SELECT ST_ASTEXT(ST_MULTI(geom)) FROM schema.matable);
Et Tadaaa! toute la géométrie devient du MULTIPOLYGON.
Il faut savoir que la géométrie qui était initialement en MULTIPOLYGON reste telle quelle.

4. Plus qu'a faire un UPDATE sur ma colonne geom
>>> UPDATE schema.matable SET geom = as_text;
Puis on peut supprimer la colonne as_text

La procédure est bien sur appliquable pour les points et lignes.
Je vous conseille ensuite de créer une contrainte dans Postgre pour ne plus qu'avoir du POLYGON ou du MULTIPOLYGON.

Voilà, personnellement j'ai galéré alors je me suis dis que le partager pouvait rendre service à d'autres.

Hors ligne

 

#2 Tue 02 August 2016 15:16

guil31
Participant actif
Date d'inscription: 22 Jan 2013
Messages: 79

Re: QGIS & PostGIS: Incompatibilité entre POLYGON et MULTIPOLYGON

Bonjour,

Merci pour ce post qui m'a bien été utile.

On peut faire le update directement:

Code:

UPDATE schema.matable SET geom = ST_ASTEXT(ST_MULTI(geom));

Dans mon cas je suis tombé sur une deuxième erreur de type:

ERREUR:  Geometry SRID (0) does not match column SRID (2154)

et j'ai résolu le problème en effectuant le update de la façon suivante (mes données étaient déjà dans le SRID 2154)

Code:

UPDATE schema.matable SET geom = ST_SetSRID(ST_ASTEXT(ST_MULTI(geom)), 2154);

Hors ligne

 

#3 Thu 02 November 2017 16:20

Tony VINCENT
Participant actif
Lieu: Poitiers
Date d'inscription: 13 Jan 2010
Messages: 86

Re: QGIS & PostGIS: Incompatibilité entre POLYGON et MULTIPOLYGON

Bonjour,

J'ai eu le même problème lors de ajout de données dans une table en utilisant la fonction ST_Union.

Après quelques recherche sur la toile et ayant vu ce post, je me permet d'ajouter une autre solution.

Ce qui posait problème :

Code:

ST_Union(geom)

Qui générait l'erreur suivante :
ERREUR: Geometry type (Polygon) does not match column type (MultiPolygon)

En modifiant mon code comme ceci, plus de message d'erreur :

Code:

ST_Multi(ST_Union(ST_Multi(a.geom)))

Cordialement,

Tony VINCENT

Hors ligne

 

Pied de page des forums

Powered by FluxBB