#1 Thu 05 September 2013 14:38
- Shetty
- Juste Inscrit !
- Date d'inscription: 5 Sep 2013
- Messages: 9
Import d'une vue de PostGis dans Qgis
Bonjour,
je débute avec postgis/qgis, que j'utilise via PGAdminIII.
J'ai un problème avec la création de mes vues : une fois ma requête créée et testée, je créé une vue, comprenant un champ gid et un champ geom.
Le problème est que, une fois dans QGis, cette vue n'apparait pas dans la liste des tables avec géométrie. Dans PGAdmin, elle n'est pas non plus référencée dans la vue geography_columns.
Je ne sais pas si ma question est très claire, mais j'ai l'impression d'avoir loupé quelque chose à la création de la vue, qui me permettrait de la considérer comme contenant des objets géographiques et donc de visualiser la carte avec QGis.
Je n'ai rien trouvé de vraiment simple sur l'utilisation des vues avec Qgis/postGis, je suis donc preneuse de toute documentation, et si il vous faut plus d'infos pour m'aider n'hésitez pas...
Merci
Hors ligne
#2 Thu 05 September 2013 16:49
- JP LLORENS
- Participant assidu
- Date d'inscription: 12 Nov 2008
- Messages: 231
Re: Import d'une vue de PostGis dans Qgis
Bonjour.
Il faut que tu références à la main ta vue (comme une table ) dans la table geography_column en prenant soin de mettre le bon srid et le bon type (polygon, linestring, multilinestring...)
JPL
Hors ligne
#3 Sun 08 September 2013 03:03
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: Import d'une vue de PostGis dans Qgis
Bonjour, quelle version de postgis as-tu? 1.5 ou 2.0? As-tu regardé dans la table geometry_columns, sinon?
Arrives-tu à ouvrir la(les) table(s) postgis (dont tu extraies la vue) sous qgis? et si oui, peut-on avoir la requête de création de ta vue?
Hors ligne
#4 Mon 09 September 2013 09:45
- Shetty
- Juste Inscrit !
- Date d'inscription: 5 Sep 2013
- Messages: 9
Re: Import d'une vue de PostGis dans Qgis
Bonjour,
merci pour vos réponses.
J'utilise PostGIS 1.5. Mes requêtes n'apparaissent pas dans la table geometry_columns non plus...
Je peux ouvrir les tables postgis (ici Table1) sous qgis sans problème et afficher les cartes.
Voilà la requête :
Code:
SELECT "Table1".gid, "Table1".lib, "Table1".aire, "Table1".code, "Table1".cd_sig, "Table1".the_geom FROM "Table1" WHERE "Table1".code::text = '40'::text;
N'y a t-il vraiment aucun autre moyen que de renseigner la table geography_columns à la main?
Je peux le faire, mais les personnes qui vont utiliser ma BdD après moi ne savent pas se servir du logiciel, cette opération va complexifier l'utilisation de la base...
Merci
Hors ligne
#5 Mon 09 September 2013 12:28
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Import d'une vue de PostGis dans Qgis
Bonjour,
Vous avez plusieurs solutions:
• Vous pouvez appeler des fonctions de gestion de Postgis pour renseigner automatiquement la table geometry_columns: Populate_Geometry_Columns (http://postgis.net/docs/manual-1.5/Popu … lumns.html), soit après chaque création de vue, à la main, soit de facon automatique par une table planifiée.
• Vous pouvez migrer sur Postgis 2.1, où la gestion des colonnes géo est automatique.
Nicolas
Hors ligne
#6 Mon 09 September 2013 19:54
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3945
Re: Import d'une vue de PostGis dans Qgis
Bonjour,
Je peux le faire, mais les personnes qui vont utiliser ma BdD après moi ne savent pas se servir du logiciel, cette opération va complexifier l'utilisation de la base...
Pas du tout! une fois que votre colonne géométrique est référencée comme telle, c'est bon, c'est intégré dans votre base. Il sera accessible via qgis comme n'importe quelle autre table. Les utilisateurs (notamment sous QGiS) n'auront donc aucune action à mener sur ce point.
Mais si vous êtes au début de Postgis et qu'il n'y a pas de contrainte particulière liée à ce qui existe déjà dans votre boîte, pourquoi ne pas directement aller sur une version plus récente, avec plus de fonctions?
Hors ligne
#7 Tue 24 September 2013 08:20
- Shetty
- Juste Inscrit !
- Date d'inscription: 5 Sep 2013
- Messages: 9
Re: Import d'une vue de PostGis dans Qgis
Bonjour,
merci pour cette réponse, je vais tenter de migrer sur Postgis 2.1.
Merci à tou.te.s
Hors ligne
#8 Wed 16 October 2013 12:10
- Benoit91
- Participant assidu
- Date d'inscription: 2 Oct 2008
- Messages: 263
Re: Import d'une vue de PostGis dans Qgis
Bonjour
J'ai un peu le même problème mais pas tout à fait. Je m'explique:
J'ai une table postgis "om_bornes_app_volontaire" qui localise toutes les colonnes d'apport volontaires (verres, textile, journaux) sur notre territoire.
infos de la table (une partie des infos)
gid id_point_eco commune nature geom
1 PE-235-34 Fleury verre
2 PE-235-34 Fleury textile
3 PE-103-1 Bretigny verre
4 PE-549-25 Ste Genevieve journaux
Donc avec cette table, je peux avoir plusieurs colonnes d'apport volontaire sur un même espace (du point de vue carto les points ne se superposent pas)
J'ai créer une vue "vue_point_ecolo" qui me permet de synthétiser cette table en groupant par 'id_point_eco' afin d'avoir
id_point_eco commune nature geom
PE-235-34 Fleury verre,textile
PE-103-1 Bretigny verre
PE-549-25 Ste Genevieve journaux
Le but de cette vue est de me permettre de cartographier chaque lieux d'apport volontaires avec une symbologie différente qui renseigne directement sur la nature de la ou les colonnes présentes.(voir image jointe)
Pour ce faire j'ai créer la requête suivante:
Code:
CREATE OR REPLACE VIEW dechets_om.vue_point_ecolo AS SELECT tab_A.id_point_eco, tab_A.commune, tab_A.adresse, string_agg(tab_B.nature, '-') AS nature_pt, tab_A.geom FROM ( SELECT om_bornes_app_volontaire.id_point_eco, om_bornes_app_volontaire.commune, om_bornes_app_volontaire.adresse, st_centroid(st_union(om_bornes_app_volontaire.geom)) AS geom FROM dechets_om.om_bornes_app_volontaire GROUP BY om_bornes_app_volontaire.id_point_eco, om_bornes_app_volontaire.commune, om_bornes_app_volontaire.adresse) AS tab_A LEFT JOIN ( SELECT om_bornes_app_volontaire.id_point_eco, om_bornes_app_volontaire.nature FROM dechets_om.om_bornes_app_volontaire GROUP BY om_bornes_app_volontaire.id_point_eco, om_bornes_app_volontaire.nature) tab_B ON tab_a.id_point_eco = tab_B.id_point_eco GROUP BY tab_A.id_point_eco, tab_A.commune, tab_A.adresse, tab_A.geom;
Dans pgadmin, pas de problème j'ai bien ma vue mais lorsque je veux l'ouvrir sous QGIS j'ai ce message d'erreur "la couche n'est pas une couche valide et ne peut être ajoutée à la carte"
Par contre si je vais cette vue test:
Code:
CREATE OR REPLACE VIEW dechets_om.vue_test AS SELECT id_point_eco, st_centroid(st_union(geom)) AS the_geom FROM dechets_om.om_bornes_app_volontaire GROUP BY id_point_eco
Je peux l'importer dans QGIS.
Ces deux vues s'affichent dans la vue "geometry columns" avec en type de geometry la valeur "geometry".
J'avoue ne pas comprendre où çà bloque...pourquoi ma vue test s'affiche et pas l'autre.
Pour info, je travail avec QGIS 2.0.1, postgresql 9.2 et postgis 2.
Par avance merci de votre aide.
Dernière modification par Benoit91 (Wed 16 October 2013 12:12)
Hors ligne
#9 Wed 16 October 2013 12:58
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: Import d'une vue de PostGis dans Qgis
Bonjour,
Peut etre une difference dans la structure des deux vues (identifiant non unique ou type de données que QGIS n'aime pas comme identifiant ?)
Quelles sont les structures de ces deux vues ? (\d+ <vue> dans psql, par exemple)
Nicolas
Hors ligne
#10 Wed 16 October 2013 13:58
- Benoit91
- Participant assidu
- Date d'inscription: 2 Oct 2008
- Messages: 263
Re: Import d'une vue de PostGis dans Qgis
Merci pour ce premier retour rapide.
Pour les 2 vues, je considère comme identifiant unique le champ "id_point_eco". Il n'y a pas de doublon d'identifiant dans le résultat des vues.
En premier j'ai crée ma vue "vue_point_ecolo" (la plus complète), comme j'ai eu le message d'erreur QGIS, j'ai voulu tester une requête plus simple (en groupant simplement le id_point_eco et la géométrie).
voir images jointes pour la structure.
Dernière modification par Benoit91 (Wed 16 October 2013 13:59)
Hors ligne
#11 Wed 16 October 2013 14:11
- Benoit91
- Participant assidu
- Date d'inscription: 2 Oct 2008
- Messages: 263
Re: Import d'une vue de PostGis dans Qgis
Pour completer:
Sous QGIS 2.0.1, j'importe mes vues via la fonction "parcourir" (celle qui permet d'avoir l’arborescence des fichiers).
Je viens de remarquer que lorsque je fais "couche"=> "ajouter une couche postgis" le champ considéré comme primary key est mon champ "nature_pt" (voir image jointe)
Si je le change avec mon champ "id_point_eco" je peux charger ma vue "vue_point_ecolo".
D'où ma question, comment forcer le primary key sur un champ spécifique de la vue ?
Dernière modification par Benoit91 (Wed 16 October 2013 14:11)
Hors ligne
#12 Wed 16 October 2013 14:34
- florent vanhoutte
- Participant actif
- Lieu: Compiègne
- Date d'inscription: 27 Apr 2006
- Messages: 110
Re: Import d'une vue de PostGis dans Qgis
Bonjour,
En espérant répondre à votre problématique, Qgis implique une contrainte technique sur les vues postgis en imposant la présence d'un champ de type serial (int4) comme identifiant. A défaut, il prend un champ de la table source et là, au petit bonheur la chance. Soit les valeurs de ce champ respectent le principe d'unicité et dans ce cas, la vue est dispo en chargement, sinon pas de chargement possible dans qgis.
A voir du côté de la v2.1 de postgis si une parade est possible.
source http://docs.qgis.org/1.8/fr/docs/user_m … _data.html
Cordialement
FV
Dernière modification par florent vanhoutte (Wed 16 October 2013 14:35)
1/2 décision = bordel²
Hors ligne
#13 Wed 16 October 2013 14:53
- Benoit91
- Participant assidu
- Date d'inscription: 2 Oct 2008
- Messages: 263
Re: Import d'une vue de PostGis dans Qgis
Merci pour ces réponses, mais je viens de trouver une solution.
Effectivement je vois que QGIS prend un champ au hasard.
Dans ma requête de création de vue j'ai donc intégré la fonction row number() over () afin d'avoir un identfiant en integer
Voici la requête:
Code:
CREATE OR REPLACE VIEW dechets_om.vue_point_ecolo AS SELECT row_number()OVER(ORDER BY tab_A.id_point_eco) as gid, tab_A.id_point_eco, tab_A.commune, tab_A.adresse, string_agg(tab_B.nature, '-') AS nature_pt, tab_A.geom FROM ( SELECT om_bornes_app_volontaire.id_point_eco, om_bornes_app_volontaire.commune, om_bornes_app_volontaire.adresse, st_centroid(st_union(om_bornes_app_volontaire.geom)) AS geom FROM dechets_om.om_bornes_app_volontaire GROUP BY om_bornes_app_volontaire.id_point_eco, om_bornes_app_volontaire.commune, om_bornes_app_volontaire.adresse) AS tab_A LEFT JOIN ( SELECT om_bornes_app_volontaire.id_point_eco, om_bornes_app_volontaire.nature FROM dechets_om.om_bornes_app_volontaire GROUP BY om_bornes_app_volontaire.id_point_eco, om_bornes_app_volontaire.nature) tab_B ON tab_a.id_point_eco = tab_B.id_point_eco GROUP BY tab_A.id_point_eco, tab_A.commune, tab_A.adresse, tab_A.geom;
L'import s'effectue correctement.
Merci pour votre aide.
Hors ligne
#14 Wed 16 October 2013 15:03
- florent vanhoutte
- Participant actif
- Lieu: Compiègne
- Date d'inscription: 27 Apr 2006
- Messages: 110
Re: Import d'une vue de PostGis dans Qgis
Effectivement je vois que QGIS prend un champ au hasard.
pas tout à fait il me semble, d'après mes tests, qu'il prend le premier champ par ordre alphabétique.
A creuser.
Cordialement
FV
1/2 décision = bordel²
Hors ligne
#15 Tue 17 March 2015 13:12
- v_roux
- Participant occasionnel
- Date d'inscription: 21 Mar 2007
- Messages: 30
Re: Import d'une vue de PostGis dans Qgis
Bonjour,
Même si le post date d'un peu... tout d'abord, merci pour l'info qui me permet enfin d'afficher mes vues (Postgis 2.0) dans QGis (2.6) et aussi pour la fonction row_number() qui me manquait depuis un moment...
Ce que je constate de mon côté, c'est que l'affichage des vues dans QGIS ne fonctionne que sous les conditions suivantes :
- la geometrie dans la table source est définie > geom type geometry(Point, 2154)
- le tout premier champ de la vue est l'identifiant en int4
D'après mes essais, QGis ne prend pour identifiant ni le premier par ordre alphabétique, ni au petit bonheur, ni le champ qui s'appelle gid, mais le tout premier champ de la liste (je suis donc obligée de reprendre toutes mes vues qui commençaient par le champ geom...) - à confirmer.
Bonne journée,
VR
Hors ligne
#16 Tue 17 March 2015 16:06
Re: Import d'une vue de PostGis dans Qgis
Bonjour,
QGis affiche les vues spatiales quelque soit le type de géométrie. Si votre vue contient une géométrie de type non restreint (geometry(GEOMETRY,2154) alors il vous faut décocher la case "ne pas résoudre le type pour les géométries non restreintes" de l'assistant de connexion à PostGIS.
Concernant l'identifiant, vous pouvez choisir la colonne concernée lors de la sélection de la table.
Mathieu BOSSAERT
Association GeoRezo
Hors ligne