Problèmes avec PostgreSQL lors de l'édition de points / lignes / polygones dans QGIS

14

J'ai un problème avec postgresql et QGIS:

  • Je peux ajouter des points / lignes / polygones et un champ de remplissage

Mais je ne peux pas:

  • supprimer des points / lignes / polygones
  • modifier des points / lignes / polygones (déplacer ou modifier un champ)

ex: dbname = 'Europe' host = localhost port = 5432 user = 'postgres' sslmode = disable key = 'tid' estimationmetadata = true srid = 900913 type = Table de points = "public". "planet_osm_point" (way) sql =

QGIS est connecté en tant que niveau administrateur à la base de données. Avec pdAdmin III je peux tout faire (créer, supprimer, modifier ...)

La base de données postgresql est importée d'OSM avec osm2pgsql .

Sur une autre couche, comme .shp, je n'ai pas ce problème.

Une idée ?

Configuration: Ubuntu 14.04 / Posgresql 9.4 / QGIS 2.10

Mathieu
la source
Salut Mathieu, pouvez-vous clarifier la signification exacte de "je ne peux pas". Les outils sont-ils désactivés, échoue-t-il lors de l'enregistrement de la couche? Et le plus important: y a-t-il un message d'erreur? Jetez également un œil au panneau du journal des messages dans l'onglet postgis.
Matthias Kuhn
Offcourse je suis en mode édition sur le calque concerné (stylo jaune). Les outils d'édition sont tous gris sauf l'ajout d'icône d'entité. le message que je reçois est: Le Service ne prestataire pas l'effacement Supporte: Le prestataire de ne Données pas l'effacement Supporte des objets
Mathieu
1
message d'erreur en anglais: le fournisseur ne prend pas en charge la suppression: le fournisseur de données ne prend pas en charge la suppression des fonctionnalités
Mathieu
1
Modification de l'icône du haut: Tous les gris SAUF Ajouter une fonction
Mathieu
1
2015-08-08T12: 10: 22 1 La clé primaire est ctid - modification des fonctionnalités existantes désactivée (chemin; "public". "Planet_osm_point") 2015-08-08T12: 10: 23 1 La clé primaire est ctid - modification des fonctionnalités existantes désactivé (chemin; "public". "planet_osm_line") 2015-08-08T12: 10: 23 1 Type d'entité ou srid pour le chemin "public". "planet_osm_polygon" n'a pas pu être déterminé ou n'a pas été demandé.
Mathieu

Réponses:

13

Fixé. Le problème était qu'il n'y avait pas de clé primaire.

Dans pgAdmin, faites cette demande.

ALTER TABLE tableName ADD PRIMARY KEY (id);

Exemple pour la table planet_osm_line et la définition de la colonne osm_id, comme clé primaire:

ALTER TABLE planet_osm_line AJOUTER UNE CLÉ PRIMAIRE (osm_id);

jusqu'à ce que osm_id soit unique.

Mathieu
la source
C'est comme ça que tu le fais!
DPSSpatial
Vous pensez que c'est vrai?
Mathieu
Je le pense! Je peux le tester au travail et faire un rapport, mais maintenant savoir comment vous avez importé les données, c'est votre solution de contournement. Un problème cependant - pourquoi modifiez-vous ces données dans QGIS localement au lieu de modifier les données directement dans un éditeur OSM et de les contribuer à nouveau?
DPSSpatial
1
À propos d'OSM: c'est parce que nous avons juste besoin de générer une carte de sortie avec nos spécifications de conception / graphique et d'ajouter quelques autres données payantes des fournisseurs (il n'est pas possible de les rendre publiques). QGIS est un outil parfait pour cela. Contribuer est une autre chose, que nous le ferons à temps.
Mathieu
9

La solution consiste à créer une clé primaire, comme déjà mentionné.

Mais de par sa conception, osm2pgsqlne garantit pas qu'il osm_idest unique. Il peut produire plusieurs lignes avec le même osm_id .

Pour éditer des planet_osm_*tables dans QGIS, il est sage d'ajouter une autre colonne id, par exemple gid.

Pour ajouter une gidcolonne unique :

ALTER TABLE planet_osm_point ADD gid serial PRIMARY KEY;
ALTER TABLE planet_osm_line ADD gid serial PRIMARY KEY;
ALTER TABLE planet_osm_polygon ADD gid serial PRIMARY KEY;
ALTER TABLE planet_osm_roads ADD gid serial PRIMARY KEY;

QGIS a des problèmes si la colonne de géométrie est juste GÉOMÉTRIE. Certaines requêtes peuvent échouer. J'ai trouvé utile de changer la planet_osm_polygongéométrie MultiPolygonavec:

ALTER TABLE planet_osm_polygon
    ALTER COLUMN way TYPE geometry(MultiPolygon,3857) USING ST_Multi(way);
jgrocha
la source
3

Je pense que c'est une question clé primaire. Votre table doit en avoir une et celle-ci est reconnue lorsque vous affichez la table via PGAdmin.

J'ai eu ce même problème, mais j'ai rechargé la couche avec un champ de clé primaire appelé ID (arbitraire) et tous mes outils d'édition sont maintenant actifs sur la barre d'outils.

À l'aide de SQL, vous pouvez ajouter une colonne OID de type de données «série» et créer une clé primaire à l'aide de cette instruction:

ALTER TABLE schema."Tablename"

ADD ID serial NOT NULL

ALTER TABLE schema."Tablename" ADD PRIMARY KEY (id);

À l'aide d'une interface graphique, vous pouvez recharger votre couche avec une clé primaire qui sera reconnue par la base de données et donc PostGIS et QGIS:

  • ouvrir DB Manager
  • se connecter à votre base de données
  • choisissez 'importer la couche / le fichier'
  • cochez la case "Clé primaire" et entrez un nom pour la colonne "clé primaire" qui stockera les ID uniques qui permettront l'édition:

entrez la description de l'image ici

De là, revenez à PGAdmin, connectez-vous à votre base de données et cliquez sur la table que vous venez de recréer - vous pouvez maintenant voir si la colonne OID est reconnue:

entrez la description de l'image ici

DPSSpatial
la source
Sous PGAdmin aucune clé primaire. Comment recharger la couche?
Mathieu
@Mathieu Je voudrais utiliser le plugin DBManager dans QGIS et cliquer sur l'option 'clé primaire' et nommer le champ OBJECTID ou quelque chose de similaire. Cela devrait vous permettre d'avoir des fonctionnalités modifiables ... si vous avez un champ ID unique existant que vous souhaitez utiliser comme clé primaire, vous pouvez toujours le réinitialiser plus tard ...
DPSSpatial
Je suis certainement stupide mais sous DBmanager, je n'ai pas trouvé où définir la clé primaire. En fait, j'ai pour "polygone planetOSM" (et autres) un avertissement disant qu'il n'y a pas de clé primaire.
Mathieu
ok - vient de mettre à jour ma réponse, mais c'est la façon de faire de l'interface graphique ... laissez-moi savoir si cela fonctionne pour vous ...
DPSSpatial
Merci beaucoup pour la procédure, et maintenant je comprends pourquoi je ne peux pas le faire: la base de données est importée en utilisant osm2pgsql directement dans postgis à partir du fichier osm.pbf. Dans votre procédure se trouve un fichier externe qui doit être chargé. Dans mon cas, la base de données est déjà en postgis et ne dit aucune clé primaire comme indiqué dans votre capture d'écran. Il existe donc un moyen - lorsque la base de données est déjà importée - de générer sous pgsql une clé primaire?
Mathieu