#1 Wed 23 August 2023 11:13
- image95
- Participant assidu
- Date d'inscription: 6 Sep 2014
- Messages: 249
Postgis : Vue à partir de plusieurs tables heterogenes
Bonjour,
J'ai 5 tables postgis qui ont des types de geometries différentes(1 ponctuel, 1 lineaire, 3 surfaciques). Et également des structures de champs différents. Ces tables partagent des champs qui renseignent sur la même information (suivi_dossier, commune,etc). Bien que le nom de ces champs ne soit pas toujours identique selon les tables.
J'aimerais pouvoir malgré tout créer une vue qui puisse récupérer quelques champs de ces tables : les geom, les valeurs de communes, les suivi_dossier. Celà est il possible? Sauriez vous comment je peux faire ? Merci.
Hors ligne
#2 Wed 23 August 2023 12:02
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1542
Re: Postgis : Vue à partir de plusieurs tables heterogenes
Bonjour,
Oui c'est possible, il suffit de créer une vue en listant les champs de chaque table que vous voulez, en choisissant un nom pour chaque champ, par ex
Code:
create or replace view mavue as select suivi_dossier as suivi_dossier, commune as commune, geom from table1 UNION ALL select suividossier, comm, geom from table2 UNION ALL select ... from table3;
Dans une requete qui ajoute des lignes de plusieurs tables (UNION ALL), les noms des colonnes de la premiere requête definissent les noms de colonnes de la vue.
Chaque select doit définir le même nombre de colonnes ayant le meme type, vous pouvez caster certaines colonnes s'il faut en changer le type.
Une table postgis peut avoir des geom de différents types (point, ligne, polygone, etc.) mais QGIS n'aime pas ca pour l'affichage.
Des outils comme OpenJump peuvent afficher ce genre de table avec des geom composites.
(évitez de poster sur plusieurs listes le même message )
Nicolas
Dernière modification par Nicolas Ribot (Wed 23 August 2023 12:03)
Hors ligne
#3 Wed 23 August 2023 12:34
- image95
- Participant assidu
- Date d'inscription: 6 Sep 2014
- Messages: 249
Re: Postgis : Vue à partir de plusieurs tables heterogenes
Bonjour Nicolas,
Un grand merci pour votre réponse qui semble tout à fait correspondre à mon besoin. je vais tester. Concernant le style/représentation dans qgis d'une table avec des geom composites, lorsque vous dites que Qgis n'aime pas, il le gère malgré tout? Ou c'est vraiment impossible d'afficher ce genre de table ? Je serai preneur de ressources sur ce point. Je vais chercher en parallèle. Encore un grand merci.
Hors ligne
#4 Wed 23 August 2023 14:00
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1542
Re: Postgis : Vue à partir de plusieurs tables heterogenes
Concernant QGIS, je ne suis pas un spécialiste de toutes ses fonctionnalités (tellement riches) mais je ne pense pas que ce soit possible d'afficher une table/vue avec des geométries hétérogènes (hélàs).
En général, si j'ai des tables avec geom mixtes, je fais des vues par types de geom (donc le contraire de ce que vous faites) et surtout pour le debug/visualisation j'utilise OpenJump, plus proche du modele OGC qu'utilise PostGIS que QGIS (OpenJump est basé sur JTS, la lib Java portée en C++ sous le nom GEOS, qui est au coeur de Postgis)
Nicolas
Hors ligne
#5 Wed 23 August 2023 14:17
- image95
- Participant assidu
- Date d'inscription: 6 Sep 2014
- Messages: 249
Re: Postgis : Vue à partir de plusieurs tables heterogenes
Merci Nicolas. Je vais tester tout cela. Cela semble possible via qgis si on croit ce post :
https://gis.stackexchange.com/questions … recognized
https://github.com/qgis/QGIS/issues/43186
Je vais tester et vous ferai un retour.
Hors ligne
#6 Wed 23 August 2023 16:18
- image95
- Participant assidu
- Date d'inscription: 6 Sep 2014
- Messages: 249
Re: Postgis : Vue à partir de plusieurs tables heterogenes
Je me permets une dernière question. Sauriez vous comment se passe la gestion du champ identifiant unique ce cas?
Toutes mes tables sources ont 1 champ GID serial (qui pour info est clef primaire).
J'ai fait
Code:
create or replace view SCHEMA.suivi_dossier as select row_number() OVER (ORDER BY XXXX) as gid,
Dois je faire la meme opération de generation automatique de valeurs gid pour toutes les clauses select ?
Dernière modification par image95 (Wed 23 August 2023 16:39)
Hors ligne
#7 Wed 23 August 2023 17:57
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1542
Re: Postgis : Vue à partir de plusieurs tables heterogenes
Je me permets une dernière question. Sauriez vous comment se passe la gestion du champ identifiant unique ce cas?
Toutes mes tables sources ont 1 champ GID serial (qui pour info est clef primaire).
J'ai faitCode:
create or replace view SCHEMA.suivi_dossier as select row_number() OVER (ORDER BY XXXX) as gid,Dois je faire la meme opération de generation automatique de valeurs gid pour toutes les clauses select ?
Il faut mieux faire une CTE avec votre requête actuelle, et dans le select final générer la colonne id uniques, par ex:
Code:
create or replace view suivi_dossier as with tmp as ( select suivi_dossier, geom from table1 UNION ALL select suividossier, geom from table2 UNION ALL ... ) select row_number() over () as gid, * from tmp;
Nicolas
Dernière modification par Nicolas Ribot (Wed 23 August 2023 17:59)
Hors ligne
#8 Thu 24 August 2023 12:38
- image95
- Participant assidu
- Date d'inscription: 6 Sep 2014
- Messages: 249
Re: Postgis : Vue à partir de plusieurs tables heterogenes
Un grand merci Nicolas !
Votre proposition fonctionne très bien !
Hors ligne