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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Tue 09 July 2019 09:34

Julien Gondellon
Participant actif
Date d'inscription: 17 Apr 2014
Messages: 67

BdD Majic 3 - Regroupement de bati

Bonjour,

Nous travaillons sur une couche Bati d'un cadastre.
Nous souhaitons fusionner les bâtiments accolés qui ont le même nom de propriétaire mais aussi en fonction d'autres critères. Voici les critères :
     1. Le nom du propriétaire est identique,
     2. Distance entre les deux bâtiments = 0 (ou bâtiments accolés).
Attention, il s'agit d'une double condition.

Nous avons essayé plusieurs solutions :
    1. L'outil regroupé de Qgis (mais cela ne marche pas),
    2. Postgis avec des requêtes sql (st_union, within, group_by).

Nous sommes arrivés à groupé un lot de bâtiments accolés mais nous n'avons pas réussi à grouper en fonction du critère nom du propriétaire.
Et inversement, nous avons réussi à grouper les bâtiments appartenant au même propriétaire mais sans prendre en compte la considération qu'ils devaient être accolés.

Merci de votre retour.

Hors ligne

 

#2 Tue 09 July 2019 11:11

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

Re: BdD Majic 3 - Regroupement de bati

Salut,

la fonction st_clusterwithin devrait répondre
à votre problème.

Code:

SELECT 
proprietaire,
st_union(unnest(st_clusterwithin(the_geom, 0)))
FROM bati 
GROUP BY proprietaire

Hors ligne

 

#3 Tue 09 July 2019 11:40

Julien Gondellon
Participant actif
Date d'inscription: 17 Apr 2014
Messages: 67

Re: BdD Majic 3 - Regroupement de bati

Merci pour ce premier retour très rapide.

Voici le message d'erreur que je reçoit en retour

ERREUR:  les appels à la fonction d'agrégat ne peuvent pas contenir des appels à des
fonction SETOF
LINE 3:  st_union(unnest(st_clusterwithin(b.geom, 0)))
                  ^

Je comprends pas pourquoi.

Hors ligne

 

#4 Tue 09 July 2019 12:08

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

Re: BdD Majic 3 - Regroupement de bati

Oups, comme à l'habitude, tapé trop vite.

On peut pas imbriquer des fonctions qui renvoient
des setof dans des fonctions d'agrégats.
De plus, même si c'était possible la requête aurait été fausse,
puisqu'elle aurait renvoyé une seule geom par propriétaire.

Et puis, on ne peut apparemment pas utiliser la valeur 0 avec st_clusterwithin,
mais vous pouvez peut être essayer avec st_clusterintersecting.

Cette requête devrait renvoyer un multipolygone par groupe
de bâti contiguë avec le même propriétaire.

Code:

    SELECT 
     proprietaire,
     st_collectionhomogenize(unnest(st_clusterintersecting(the_geom))) g
    FROM bati 
    GROUP BY proprietaire

Dernière modification par tumasgiu (Tue 09 July 2019 14:07)

Hors ligne

 

#5 Tue 09 July 2019 16:54

Julien Gondellon
Participant actif
Date d'inscription: 17 Apr 2014
Messages: 67

Re: BdD Majic 3 - Regroupement de bati

Nous avons essayé cette manipulation.
Ça ne marche pas trop et d'ailleurs, nous ne comprenons pas comme se fait cette analyse.
Il groupe bien des logements ensemble cette union semble se faire de manière aléatoire.

Du coup voila ce que fait la requête :
Elle agglomère bien des bâtiments accolés. Mais ces derniers n'ont pas forcément le même nom de propriétaire. Alors que sur d'autres secteurs cela marche.

On coince. 

En pièce jointe quelques exemples : on avons sélectionnée un bâtiment et résultats, ce tous les bloques des bâtiments accolés qui sont sélectionner avec des noms des propriétaires différents.


Merci.


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#6 Tue 09 July 2019 16:58

ppluvinet
Participant assidu
Lieu: VALENCE
Date d'inscription: 6 Aug 2007
Messages: 617

Re: BdD Majic 3 - Regroupement de bati

Bonjour,
ne serait-ce pas plus simple de faire :

Code:

SELECT 
     proprietaire,
     (st_dump(st_union(geom))).geom as geom
    FROM bati 
    GROUP BY proprietaire

Bon courage,

Dernière modification par ppluvinet (Tue 09 July 2019 17:11)


Pascal PLUVINET

Hors ligne

 

#7 Tue 09 July 2019 17:15

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

Re: BdD Majic 3 - Regroupement de bati

Bonjour,
ne serait-ce pas plus simple de faire :

Code:

SELECT
     proprietaire,
     (st_dump(st_union(geom)).geom as geom
    FROM bati
    GROUP BY proprietaire

Bon courage,


Très bien vu Pascal, c'est plus simple, plus portable,
et certainement plus rapide.
On perd juste les limites des polygones.

Sinon pour expliquer la requête avec cluster :

st_clusterintersecting ->
renvoie un tableau de geometry collection.
C'est une fonction d'agrégat qui fonctionne avec la clause
GROUP BY proprietaire.
Ca renverra donc pour chaque propriétaire un tableau
de geometries, chaque élément du tableau étant un ensemble
de bâti qui se "touchent".

unnest->
c'est une fonction qui transforme un tableau en ensemble de lignes.

st_collectionhomogenize->
essaie de trouver la représentation la plus simple d'une geometry.
Exemple :
GEOMETRYCOLLECTION(POINT (1 1), POINT (2 2), MULTIPOINT((3 3)))
-> MULTIPOINT((1 1), (2 2), (3 3))

Dernière modification par tumasgiu (Tue 09 July 2019 17:16)

Hors ligne

 

#8 Tue 09 July 2019 17:35

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

Re: BdD Majic 3 - Regroupement de bati

Si vous voulez bien poster votre requête,
nous pourrions mieux vous aider.

Hors ligne

 

#9 Thu 11 July 2019 09:42

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3199
Site web

Re: BdD Majic 3 - Regroupement de bati

Bonjour,

Regrouper par propriétaire est un non sens.
La seule possibilité est de regrouper par compte communal. La relation entre un immeuble (parcelle) et une personne est de type n à n.
Une parcelle a un à n "propriétaire" (titulaire de droit réel en fait)
Une personne exerce des droits sur une à n parcelles

Cela se traduit dans le compte communal.


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

Pied de page des forums

Powered by FluxBB