#1 Fri 13 December 2013 11:01
- monique
- Participant actif
- Date d'inscription: 7 Oct 2005
- Messages: 146
QGIS 2.0 : Copier coller d'une couche à une autre
Bonjour,
Avec la version 2, il y a un réel changement pour le copier coller entre 2 couches concernant les attributs.
Avant (avec la 1.7.2) Qgis ne tenait pas compte de l’intitulé des colonnes, il fallait que les colonnes soient organisées de la même façon dans les 2 couches.
Maintenant (V2), Qgis tient compte de l'intitulé des colonnes peu importe l'ordre.
Sauf que nous utilisons des fichiers shape (colonne limité à 10 caractères) pour mettre à jour des tables PostgreSQL/PostGIS qui ont des champs avec des libellés de plus de 10 caractères.
La mise à jour consiste à ajouter des enregistrements d'un fichier shape dans une table PostgreSQL/PostGIS déjà existante.
Donc maintenant nous ne pouvons plus mettre à jour tous les champs puisque le shape n'accepte pas des colonnes de plus de 10 caractères.
Quelqu'un aurait-il une piste pour contourner cette nouveauté qui devient pour nous un problème, sans avoir à refaire toute la structure de PostgreSQL.
Monique
Hors ligne
#2 Mon 16 December 2013 16:41
- Romary
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 17 Jun 2011
- Messages: 211
Re: QGIS 2.0 : Copier coller d'une couche à une autre
Bonjour,
Il faudrait :
1) intégrer le shape dans postgresql via le plugin "shape file to postGIS Importer" dans une table qui sera temporaire.
2) renommer les intituler de cette table
3) Intégrer la table dans QGIS
4) faire la manip habituelle
ou
1) intégrer le shape dans postgresql via le plugin "shape file to postGIS Importer" dans une table qui sera temporaire.
2) créer un requête ou insert en prenant les données de cette table pour les insérer dans la table désirée.
Cette solution est plus "pro" et sera plus rapide les fois suivantes (vu que vous allez sauvegarder votre requête).
cordialement,
Hors ligne
#3 Mon 16 December 2013 17:10
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3947
Re: QGIS 2.0 : Copier coller d'une couche à une autre
Bonjour,
Dans la continuité de la seconde option de Romary, si l'utilisation d'une interface graphique telle QGIS est requise et que les "recopieurs" n'ont pas forcément accès à PGAdmin, on peut penser à une table postgis "bâtarde" ayant la même structure que le shapefile et dans lequel les copies seront faites. Un trigger, calibré comme il faut, pourrait alors se charger de recopier ses entités dans la bonne table postgis. Par contre, ça veut dire que les utilisateurs auront à jongler peut-être avec deux tables à contenu presque identique.
-- Là, je commence à réfléchir à haute voix---
je ne connais pas super bien les modalités d'utilisation d'un trigger mais est-ce qu'il ne serait pas possible d'en créer un qui lors de la recopie depuis le shapefile ferait les correspondances entre les champs? Si Postgresql arrive à identifier les champs qui sont nommés à l'identique, je suppose qu'il arrive donc à lire leur nom dans le shapefile. Pour autant que vos shapefiles aient la même structure, ne peut-on donc penser à une fonction dans laquelle on ferait les correspondances de champs et qui serait appelée par un trigger before?
Est-ce possible? Si oui, je ne vois pas le début du code donc avis aux experts...
Hors ligne
#4 Mon 16 December 2013 18:45
- VianneyD
- Participant assidu
- Date d'inscription: 30 May 2011
- Messages: 153
Re: QGIS 2.0 : Copier coller d'une couche à une autre
Bonjour,
J'avance une autre piste :
Exporter votre table en .shp depuis QGIS puis utiliser la commande ogrinfo comme suit pour renommer vos colonnes
Code:
ogrinfo votre_table.shp -sql "ALTER TABLE votre_table RENAME COLUMN colonne_qgis TO colonne_pgis"
Ensuite, vous pouvez executer shp2pgsql avec l'option -a pour mettre à jour votre table postgis, le tour est joué (enfin il me semble)
Vianney Dugrain
Hors ligne