Message posté par : Nighthawk
----------------------------------------
Bonjour,
Le titre est un poil court pour tout expliquer donc laissez-moi détailler ma question.
Il s'agit de trouver un moyen, par le biais du générateur de géométries,
d'étiqueter ou non certains polygones en fonction d'une couche d'Atlas.
C'est à dire que j'ai des zones qui couvrent plusieurs communes et je voulais
n'afficher que les étiquettes concernant la commune affichée sur l'Atlas en cours.
J'ai déjà un bout de solution.
1. En farfouillant sur le github du plugin mask j'ai trouvé des solutions pour trier
les étiquettes à afficher selon l'emprise géographique de l'entité de l'atlas
concernée. Il s'agit notamment, dans l'onglet rendu des étiquettes, de
"Montrer l'étiquette" suivant une formule :
-----------------
Code :
intersects( geometry( get_feature('COUCHE_COMMUNES','NOM_COMMUNE',
attribute( @atlas_feature ,'NOM_COMMUNE_DS_COUCHE_ATLAS'))), $geometry)
-----------------
Toutes les entités qui intersectent la géométrie de la commune dont le nom est identique
au nom de commune présent dans le champ 'NOM_COMMUNE_DS_COUCHE_ATLAS' verront leur
étiquette affichée. Seulement voilà, avec de grandes entités je me retrouve avec des noms
un peu partout autour de ma commune (dans le masque finalement) et c'est pas trop
"joli"...
2. Du coup je me suis aidé du générateur de géométrie dans l'onglet position des
étiquettes. Je ne voulais utiliser que les géométries présentes dans le périmètre de la
commune :
-----------------
Code :
intersection( $geometry , geometry( get_feature( 'COUCHE_COMMUNES',
'NOM_COMMUNE', attribute( @atlas_feature ,
'NOM_COMMUNE_DS_COUCHE_ATLAS'))))
-----------------
Ici je ne garde que la géométrie résultant de l'intersection entre ma couche de zone
et la géométrie de la commune dont le nom est identique au nom de commune présent dans le
champ 'NOM_COMMUNE_DS_COUCHE_ATLAS'. J'ai donc des étiquettes qui sont placées
à l'intérieur de mon périmètre de commune.
Seulement j'ai un dernier problème qui survient : j'ai parfois des petites zones
qui trainent après cette intersection (en limites de communes), et qui me font un tas
d'étiquettes qui viennent polluer les bords de ma carte. Pour simplifier la lecture de
mes cartes je voulais limiter l'affichage des étiquettes aux géométries résultant de
l'intersection dont la surface est supérieure à 10m² (filtre largement suffisant pour
des cartos au 5000e).
J'ai donc remplacé ma première fonction par un truc du genre :
-----------------
Code :
area( intersection( $geometry , geometry( get_feature(
'Contour_com_CCLP_NEW_a75d8c06_74f1_4e84_8d8f_daf69128a6dc', 'NOM_COM',
attribute( @atlas_feature , 'NOM_COM')))))>10
-----------------
Et là ça ne marche pas comme voulu parce que quand je fais l'intersection d'une
entité par une autre, les différentes géométries résultant de cette intersection forment
une géométrie multi-partie dont la surface (cumulée), dépasse mon seuil...
Est-ce que quelqu'un saurait comment je peux éclater une géométrie (donc ici le
résultat de mon intersection) afin d'en mesurer la surface, depuis le constructeur de
chaîne d'expression de QGIS.
Je note tout de même que les algorithmes fournis par QGIS permettent de créer une
géométrie multi-parties à partir de plusieurs géométries (collect_geometries),
d'utiliser une géométrie d'une entité multi-parties (geometry_n), ou encore de
compter les géométries d'une entité multi-parties (num_geometries). Seulement voilà,
je ne sais pas trop quelle fonction peut m'être utile, s'il faut que j'en
fasse une par le biais de l'éditeur de fonctions (mais je ne connais pas le python,
donc je ne sais pas trop par où commencer),...
Quelqu'un aurait-il une piste pour résoudre ce problème ?
D'avance merci ! :)
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=342330#p342330
Pour y répondre : qgis_fr(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net