IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

Solution : Incompatibilité entre POLYGON et MULTIPOLYGON [9.3]


Sujet :

PostgreSQL

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2016
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Solution : 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.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    ça n'est pas du tout la bonne méthode que de faire cela car vous pouvez vous retrouver devant des problèmes d'interprétation.

    Vous pouvez parfaitement "descendre" ou "monter" de niveau géométrique à l'aide d'une fonction
    POLYGON => MULTIPOLYGON
    MULTIPOLYGON => POLYGON

    Exemple :
    ST_GeometryN(MaGeoMULTI, 1) = MaGeo

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2016
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci pour la correction apportée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Incompatibilité entre les objets
    Par bastoonet dans le forum Designer
    Réponses: 1
    Dernier message: 22/02/2007, 08h51
  2. Incompatibilitée entre SDL et SDL_net ?
    Par lichman dans le forum SDL
    Réponses: 2
    Dernier message: 09/12/2006, 18h27
  3. objet incompatibilité entre Flash8 et Flash9
    Par Heptaeon dans le forum Flash
    Réponses: 1
    Dernier message: 20/10/2006, 23h56
  4. Incompatibilité entre doctype et javascript
    Par Orionmel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/11/2005, 15h03
  5. Réponses: 2
    Dernier message: 25/05/2004, 11h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo