Message posté par : Jérémie
----------------------------------------
Hum... je ne comprends pas pourquoi vous avez fait un nouveau sujet sur le forum, votre
besoin est toujours le même que dans l'autre sujet ?
Dans le premier sujet, il y avait un doute : orienter l'atlas selon la parcelle ou
selon la ligne électrique ?
Ici vous parlez d'un atlas des pylônes et d'orienter selon la ligne électrique. Je
suppose que votre couche de couverture pour l'atlas est la couche des pylônes ?
Si c'est bien le cas, je propose de calculer pour chaque pylône son orientation selon
la ligne électrique la plus proche.
Pour ça on peut utiliser un champ virtuel dans lequel on calcule l'orientation avec
l'expression suivante :
-----------------
Code :
-- création de la variable geom qui sera utilisé juste après
with_variable('geom',
-- intersection entre le perimetre du buffer de 50m autour du pylône et la ligne
électrique la plus proche
intersection(
--exterior ring permet de récupérer le périmètre du buffer
exterior_ring(buffer($geometry,50)),
-- overlay_nearest() récupère la valeur du champ id de la ligne la plus proche, ligne
étant le nom de la couche
-- get_feature() récupère l'entité ayant cette valeur de champ id
-- geometry() récupère la géométrie de cette entité
-- si vous avez déjà dans un champ des pylônes l'identifiant de la ligne électrique
correspondante il est possible de se passer du overlay_nearest()
geometry(get_feature('ligne','id',array_to_string(overlay_nearest('ligne',"id"))))
),
-- calcul de l'orientation en degrés selon les deux points sur la ligne électrique à
50m autour du pylône
round(degrees(azimuth(
-- point_n() permet de récupérer le premier ou le deuxième point de la géométrie
résultante de l'intersection (un multipoint)
-- try() pour gérer le cas ou le pylône est en début ou fin de ligne électrique et donc
l'intersection a donné seulement un unique point après le début/avant la fin, dans ce
cas on prend le point lui-même pour premier point ou deuxième point
try(point_n(@geom,1),$geometry),
try(point_n(@geom,2),$geometry)
)))
)
-----------------
Ensuite dans le composeur d'impression (mise en page) il suffit d'utiliser 90 - la
valeur de l'attribut orientation calculé :
-----------------
Code :
90-orientation
-----------------
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=354438#p354438
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