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 Thu 13 May 2021 19:54

Jkerebel04
Participant occasionnel
Lieu: Oraison
Date d'inscription: 21 Apr 2020
Messages: 26

QGIS / Postgis: fonction "Group by" - attribut du groupe incorrect

Bonsoir à tous
Je sollicite votre aide pour une difficulté que je n'arrive pas résoudre

Tout d'abord le contexte :

J’ai une table bâtiment « tab_bat » cette dernière comprend un champ « type » qui peut être à "1" s’il s’agit d’un bâtiment massif, et à "2" s’il s’agit d’un bâtiment léger.
J’ai une deuxième table parcelle « tab_par »
Il arrive souvent qu’il y ait plusieurs groupes de bâtiments sur une parcelle. les bâtiments composants ces groupes peuvent être des deux types (1 ou 2 ).
Je souhaite unir dans une même géométrie les groupes de bâtiments mitoyens et donner à cette union le "type" le plus petit.
Avec le code ci-dessous, j’arrive bien à créer les unions des groupes de bâtiments mitoyens souhaités,

mais j’ai un soucis avec le champ "type" :

Le type est le même pour toutes les nouvelles géométrie créer sur la parcelle.
Dans le cas où tous les bâtiments sont de type 2, les nouvelles géométrie seront de type 2.
Mais il suffit, qu’un des bâtiments élémentaires soit de type 1 pour que l’ensemble des nouvelles entités issues des groupes de bâtiments élémentaires soit de type 1.
Je ne sais par quel bout le prendre.
Vous remerciant par avance pour votre aide,

Bien sincèrement,

Jérôme

Code:

CREATE TABLE tab_union AS SELECT
    -- Crée un identifiant unique pour la nouvelle géométrie créer par l'union de géométrie
    DISTINCT ROW_NUMBER() OVER() AS gid,
    -- Créé la géométrie unique à partie des différents polygones
    (st_dump(st_union(a.geom))).geom AS geom,
    -- avec comme référence d'union l'id de la parcelle
    b.id AS id_parc,
    -- "type 1" sont les bâtiments massifs et "type 2" bâtiments légers. Je souhaite renvoyer ici renvoyer le type de bâtiment de plus faible soit type=1 s'il existe un bâtiment élémentaire de ce type dans le groupe à unir.
    MIN(type) AS tab_bat_type,
    
FROM tab_bat AS a
LEFT JOIN tab_par AS b ON  st_intersects(ST_PointOnSurface(a.geom),b.geom)
GROUP BY b.id;

Dernière modification par Jkerebel04 (Fri 21 May 2021 15:14)


« Patience et longueur de temps font plus que force et ni que rage » -  Jean de La Fontaine, Le Lion et le Rat.

Hors ligne

 

Pied de page des forums

Powered by FluxBB