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 22 November 2022 15:22

Maury Gérard
Participant occasionnel
Date d'inscription: 19 Jun 2019
Messages: 15

QGIS 3.22: Affectation automatique et intersection

Bonjour - J'utilise QGIS 3.22

J'ai une couche, polygone, "Commune" avec un attribut "Nom de commune".

J'ai une autre couche, ponctuelle,  "Relevé-terrain', avec un attribut "Nom de commune".

Je voudrais, quand je créé une entité "Relevé-terrain", affecter automatiquement l'attribut "Nom de commune" de cette nouvelle entité par le nom de la commune sur laquelle il est créé.

Pour la partie "affectation automatique", je sais faire, c'est pour trouver l'entité "COMMUNE" qui contient le "relevé terrain" que  je vous demande de l'aide.

Cordialement

Hors ligne

 

#2 Wed 23 November 2022 15:15

GlaDal
Participant assidu
Date d'inscription: 30 Aug 2013
Messages: 1088

Re: QGIS 3.22: Affectation automatique et intersection

Bonjour,
Dans les propriétés de la couche ponctuelle, rubrique 'formulaire d'attributs', sélectionnez votre champ 'Commune' et dans défauts saisissez l'expression suivante :

Code:

aggregate(
 layer:= 'Commune',
 aggregate:='max',
 expression:="NOM",
 filter:=intersects($geometry, geometry(@parent))
 )

Ici, "NOM" correspond à la dénomination du champ qui comporte le nom des communes de la couche 'Commune'.
Cochez 'Appliquer la valeur par défaut sur la mise à jour'.

Hors ligne

 

#3 Wed 23 November 2022 15:32

Maury Gérard
Participant occasionnel
Date d'inscription: 19 Jun 2019
Messages: 15

Re: QGIS 3.22: Affectation automatique et intersection

Merci beaucoup, effectivement ca fonctionne exactement comme je l'imaginais.

Hors ligne

 

#4 Wed 23 November 2022 19:24

Tixi
Participant actif
Date d'inscription: 6 Jun 2022
Messages: 126

Re: QGIS 3.22: Affectation automatique et intersection

Je me suis connecte pour creer un nouveau message, je vais rebondir sur celui ci, vu qu il requiert un peu la meme technique.

J ai des zones de taille variable dans des communes, auxquelles je souhaite donner un nom. J utilise pour cela la couche lieu-dits, que j ai deja par ailleurs et qui provient du cadastre EDIGEO.

J ai utilise ceci pour nommer les zones :

aggregate(layer:='LIEUX-DITS',aggregate:='min',expression:="tex",filter:=intersects( $geometry, geometry(@parent)))

curieusement, min, max ca marche avec des lettres!!!!! Cependant, mes zones sont parfois grandes, ou a cheval sur plusieurs lieux dits, et le nom qui sort n'est pas toujours representatif de la localisation de la zone.
Avec concatenate, j ai tous les lieu-dits qui intersectent chaque zone, il faut corriger a la main, c est pas ideal.

Peut etre faire avec le lieu dit qui a la surface la plus grande dans la zone! Est ce que quelqu'un saurait comment faire, en une seule formule si possible?
A moins qu il n'y ait une autre piste.

Merci

Hors ligne

 

#5 Thu 24 November 2022 09:12

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

Re: QGIS 3.22: Affectation automatique et intersection

Bonjour,

Tixi a écrit:

Peut etre faire avec le lieu dit qui a la surface la plus grande dans la zone! Est ce que quelqu'un saurait comment faire, en une seule formule si possible?
A moins qu il n'y ait une autre piste.


Désolé, pas trop le temps de pondre une formule dérivée de aggregate (ou array_agg d'ailleurs, et prendre le premier index de la liste triée) mais dans les versions récentes, overlay_intersects avec son option sort_by_intersection_size devrait être plus simple à écrire.

Hors ligne

 

#6 Sun 27 November 2022 15:09

Tixi
Participant actif
Date d'inscription: 6 Jun 2022
Messages: 126

Re: QGIS 3.22: Affectation automatique et intersection

Merci,

Overlay_intersects semble s'utiliser de la maniere suivante
array_to_string(array_sort((overlay_intersects('LIEUX-DITS',tex))))
avec array to string indispensable pour pouvoir concatener les elements. En effet, la version 2.28 offre de nouvelles options, dont le classement par surface d'intersection.

Pour ma part, j'ai un peu triche, j ai pris le lieu dit qui se trouve au centroide de chaque zone, ca elimine tous les lieux dits qui sont en bordure de zone. Ca a le merite d'etre simple.
aggregate(
layer:='LIEUX-DITS',
aggregate:='min',
expression:="tex",
filter:=intersects( $geometry, centroid(geometry(@parent))))

Hors ligne

 

Pied de page des forums

Powered by FluxBB