Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Mon 15 April 2013 20:29

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3807

[Postgis2.0] créer une table d'aggrégation + ajout champs modifiables

Bonjour,
Je suis en train de salement m'empêtrer dans un truc pas cool donc avant qu'il ne soit trop tard, je fais appel à la communauté.
Sous Postgis, j'ai une table sous la forme

Code:

CREATE TABLE foncier.site_identifie
(  gid serial NOT NULL,
  insee character varying(5) not null,
  numero integer,
  nom character varying (50) ,
  statut character varying(25) not null,
  zonage character varying(20),
  num_parcelle character varying(14),
  surface integer,
  geom geometry(MultiPolygon,2154),
  CONSTRAINT site_pkey PRIMARY KEY (gid)
  );

Il s'agit d'un recensement fait sur des parcelles. Ainsi à chaque parcelle retenue, on attribue son code insee, un statut et un numero (ou pas). Ainsi plusieurs parcelles peuvent avoir le même (insee, statut, numero). insee et statut sont non null mais pas numero.
Regroupées selon le numéro insee, le statut et le numéro de site, ces parcelles constituent un unique site.
J'ai créé une vue qui me permet d’agréger le contenu de cette table afin d'avoir une ligne unique pour l'ensemble (insee, numero, statut) et d'avoir des statistiques sur toutes les parcelles. Ça donne quelque chose comme

Code:

  CREATE OR REPLACE VIEW site_regroupe AS 
 SELECT row_number() OVER ()::integer AS id, insee, nom, 
    numero AS "numéro de site", statut, 
    sum(surface) AS "surface totale", 
    count(paf.num_parcelle) AS "nbre de parcelles", 
    st_multi(st_union(geom)) AS geom
   FROM foncier.site_identifie
  GROUP BY insee, nom, numero, statut
  ORDER BY insee, statut DESC, numero;

Ce que je souhaiterais en fait, c'est de pouvoir qualifier mes "site_regroupe" c'est-à-dire de disposer d'une table qui contiennent les valeurs agrégées de mes sites (comme le fait la vue) et de nouveaux champs que je pourrais renseigner à ma guise. Les champs issus de la table d'origine se mettraient à jour au rythme des modifications (delete, update, insert de parcelles) qui pourraient y avoir.
Quelqu'un a-t-il une piste?
J'ai lu des discussions sur du insert instead of mais vu que mes géométries notamment changent entre les deux tables, je ne sais pas trop si ça le fera.
J'ai pensé créer une fonction avec un trigger after. Mais, si les situations d'insertion et de suppression semblent fonctionner correctement (et relativement simples à concevoir), pour le update, c'est une toute autre histoire. Novice en plpgsql, je me retrouve à devoir imaginer des cas très variés et complexes (des sous-conditions de conditions de conditions...) qui me prennent la tête pour le moment hmm donc si quelqu’un a une piste plus fun ou connaît des fonctions susceptibles de me faire avancer dans la réflexion, ce serait trop cool.
Merci

Dernière modification par SANTANNA (Mon 15 April 2013 20:30)

Hors ligne

 

#2 Mon 15 April 2013 22:32

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1132

Re: [Postgis2.0] créer une table d'aggrégation + ajout champs modifiables

Salut,
j'écris en réfléchissant, mais si j'ai bien compris tu veux associer des attributs aux tuples insee, nom,numero,statuts ?
Pourquoi ne pas créer une table avec ces attributs avec ce même tuple comme "clef primaire" ?
Ensuite pour agréger tout çà, tu crées une vue supplémentaire qui s'occupera de joindre ta table d'attribut à ta table site_regroupe ?

Hors ligne

 

#3 Tue 16 April 2013 14:45

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3807

Re: [Postgis2.0] créer une table d'aggrégation + ajout champs modifiables

Salut et merci de réfléchir avec moi smile

tumasgiu a écrit:

si j'ai bien compris tu veux associer des attributs aux tuples insee, nom, numero,statuts ?


Oui, c'est bien cela, je veux lui associer de nouveaux attributs qui seront renseignées par différents utilisateurs, surement sous QGIS.

tumasgiu a écrit:

Pourquoi ne pas créer une table avec ces attributs avec ce même tuple comme "clef primaire" ?


Ça peut effectivement être une solution...  Resterait alors à créer une fonction qui assure la recopie/suppression des tuples en fonction de la création de nouveau site ou de la suppression définitive d'un autre. Je dois avoir dans ce que j'ai commencé à écrire, un bout de code qui assure cela mais je me demande s'il vaut mieux que cette fonction agisse depuis la table d'origine "site-identifie" ou plutôt depuis la vue d'agrégat "site-regroupe"? Un conseil?

Et, est-ce que ça ne fait pas trop de "tables" (au moins trois) à gérer pour l'utilisateur final (sous QGIS et/ou Excel) qui n'est pas forcément géomaticien?

Dernière modification par SANTANNA (Tue 16 April 2013 14:46)

Hors ligne

 

#4 Tue 16 April 2013 20:30

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1132

Re: [Postgis2.0] créer une table d'aggrégation + ajout champs modifiables

Ça peut effectivement être une solution...  Resterait alors à créer une fonction qui assure la recopie/suppression des tuples en fonction de la création de nouveau site ou de la suppression définitive d'un autre. Je dois avoir dans ce que j'ai commencé à écrire, un bout de code qui assure cela mais je me demande s'il vaut mieux que cette fonction agisse depuis la table d'origine "site-identifie" ou plutôt depuis la vue d'agrégat "site-regroupe"? Un conseil?


Je verrai plutôt un trigger avant insertion dans la table d'attribut qui contrôlerait si au moins une entrée dans la table site_identifié corresponds au tuple inséré.

Et, est-ce que ça ne fait pas trop de "tables" (au moins trois) à gérer pour l'utilisateur final (sous QGIS et/ou Excel) qui n'est pas forcément géomaticien?


Et bien, je dirai que tout dépend du public auquel s'adresse le système. Et puis, ça ne fait réellement que deux table ou la mise à jour est possible + une vue de consultation. Je ne pense pas qu'il soit nécessaire d'être géomaticien pour créer une nouvelle ligne dans une table attributaire sous qgis.

Hors ligne

 

#5 Wed 17 April 2013 09:34

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3807

Re: [Postgis2.0] créer une table d'aggrégation + ajout champs modifiables

Salut

Je ne pense pas qu'il soit nécessaire d'être géomaticien pour créer une nouvelle ligne dans une table attributaire sous qgis.


Là, tu as parfaitement raison smile et en y réfléchissant, ça fait pas tellement de tables à gérer non plus, du moment que l'utilité de chacune est clairement avérée.

Je verrai plutôt un trigger avant insertion dans la table d'attribut qui contrôlerait si au moins une entrée dans la table site_identifié corresponds au tuple inséré


Le schéma que tu proposes suppose que dans la "table d'attributs", les nouveaux tuples "clef" soient insérés "à la main" (avec risque des messages d'erreur parce qu'on aurait mal saisi un champ, un numéro..., même si le trigger nous assure qu'à la fin, on aura  que des valeurs existantes).
Pour épargner ces différents désagréments et parce qu'en une session de travail, on peut avoir à créer plusieurs sites nouveaux, je pense que je vais plutôt opter pour un trigger (after sur site_identifie) qui injecterait dans la "table d'attributs" tout nouveau tuple créé dans la table "site_identifie". Comme cela, on est sûr de la cohérence (pas de message d'erreur à craindre, tous les nouveaux sites sont pris en compte), c'est automatique et rapide (la personne n'a pas à saisir le même site plusieurs fois).
A moins que je n'aie pas totalement compris ta proposition....

Hors ligne

 

#6 Wed 17 April 2013 10:16

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1132

Re: [Postgis2.0] créer une table d'aggrégation + ajout champs modifiables

Les deux sont valides, je pense. Le trigger sur site_identifie s'exécutera néanmoins beaucoup plus souvent que celui sur la table d'attributs. Si tu envisage des ajouts massifs de données dans site_identifie, çà doit être quelque chose a prendre en compte également.
Mais je suis d'accord que l'expérience utilisateur serait sans doute meilleure avec ta méthode.
Le mieux c'est de tester les deux.

Hors ligne

 

Pied de page des forums

Powered by FluxBB