#1 Tue 14 May 2024 21:18
- Erone
- Juste Inscrit !
- Date d'inscription: 14 May 2024
- Messages: 4
QGIS: Intersection entre couches
Bonjour,
Pouvez vous m'aider à simplifier cette requette qui crée un bug dans Qgis ?
Je cherche à compléter un attribut sur la couche une quand l'objet intersecte des objets d'une seconde couche.
Code:
CASE WHEN aggregate('zonage_pente_bretagne', 'concatenate_unique', "label", filter:=intersects(geometry(@parent), $geometry)) = '7 - 9.99' THEN '7' ELSE '' END || CASE WHEN aggregate('zonage_pente_bretagne', 'concatenate_unique', "label", filter:=intersects(geometry(@parent), $geometry)) = '10 - 14.99' THEN '7' ELSE '' END || CASE WHEN aggregate('zonage_pente_bretagne', 'concatenate_unique', "label", filter:=intersects(geometry(@parent), $geometry)) = '> 15' THEN '7' ELSE '' END
Merci beaucoup
Hors ligne
#2 Wed 15 May 2024 07:59
- LPlante
- Participant occasionnel
- Date d'inscription: 17 Nov 2021
- Messages: 44
Re: QGIS: Intersection entre couches
Bonjour
Pourquoi l'utilisation de || qui sert à concatener des valeurs?
La requete serait plus simple
CASE
WHEN aggregate('zonage_pente_bretagne', 'concatenate_unique', "label", filter:=intersects(geometry(@parent), $geometry)) = '7 - 9.99' THEN '7'
WHEN aggregate('zonage_pente_bretagne', 'concatenate_unique', "label", filter:=intersects(geometry(@parent), $geometry)) = '10 - 14.99' THEN '7'
WHEN aggregate('zonage_pente_bretagne', 'concatenate_unique', "label", filter:=intersects(geometry(@parent),$geometry)) = '> 15' THEN '7
ELSE ''
END
Visiblement, peu importe le cas, c'est uniquement la valeur 7 qui est renvoyée
Dernière modification par LPlante (Wed 15 May 2024 08:01)
Hors ligne
#3 Wed 15 May 2024 08:47
- Erone
- Juste Inscrit !
- Date d'inscription: 14 May 2024
- Messages: 4
Re: QGIS: Intersection entre couches
Merci beaucoup pour votre retour.
Néanmoins c'est toujours une source de plantage de Qgis 3.22, sans que j'en trouve la raison.
Hors ligne
#4 Wed 15 May 2024 10:35
- LPlante
- Participant occasionnel
- Date d'inscription: 17 Nov 2021
- Messages: 44
Re: QGIS: Intersection entre couches
Que dit l'erreur?
Plus d'infos sur où et comment seraient utile pour comprendre.
Plusieurs pistes
Pourquoi utiliser 'concatenate_unique'? Si le besoin est de comparer une valeur, 'min' ou 'max' suffirait
Est ce que "label" est un champs varchar pour etre comparée à la valeur '7 - 9.99'?
Hors ligne
#5 Thu 16 May 2024 10:04
- Erone
- Juste Inscrit !
- Date d'inscription: 14 May 2024
- Messages: 4
Re: QGIS: Intersection entre couches
Je n'ai pas de code erreur mais ça entraîne le blocage complet de Qgis puis sa fermeture dès que je crée ou modifie un objet sur la couche en question.
Mon besoin est uniquement d'apporter une valeur numérique non nulle dans un champs d'une couche A, lorsque un objet linéaire de cette couche A intersecte n'importe quel objet surfacique d'une couche B ('zonage-pente-bretagne')
Idéalement uniquement si au moins 25% de l'entité de la couche A intersecte un polygone de la couche B.
Merci beaucoup pour votre aide
Hors ligne
#6 Thu 16 May 2024 11:49
- Papiroux77
- Participant occasionnel
- Date d'inscription: 26 Mar 2024
- Messages: 10
Re: QGIS: Intersection entre couches
Voici une proposition
CASE
WHEN intersects(geometry(@parent), $geometry) THEN
CASE
WHEN "label" IN ('7 - 9.99', '10 - 14.99', '> 15') THEN '7'
ELSE ''
END
ELSE ''
END
Petite précision:
- Assurez-vous que l'attribut "label" dans la couche "zonage_pente_bretagne" est un type de données texte ou chaîne, car l'expression simplifiée utilise une comparaison de chaînes.
- Si vous traitez un ensemble de données volumineux, envisagez d'utiliser des index sur les attributs "géométrie" et "label" pour améliorer les performances.
A tester...
Hors ligne
#7 Fri 17 May 2024 16:59
- Erone
- Juste Inscrit !
- Date d'inscription: 14 May 2024
- Messages: 4
Re: QGIS: Intersection entre couches
Bonjour et merci beaucoup pour ces éléments.
Ca fonctionne quasiment à la limite près que je dois probablement insérer la référence à la couche intersectée 'zonage_pente_bretagne'... pourriez vous m'aider sur ce point ?
Merci encore
Hors ligne