#1 Thu 14 April 2022 14:21
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1656
QGIS: Orientation atlas
Bonjour,
Je dois effectuer un atlas sur les parcelles traversées par une ligne électrique.
La ligne électrique est grosso-modo nord sud. Je voudrais qu'elle s'affiche pour chaque plan à l'horizontale.
Comment faire?
Merci.
Hors ligne
#2 Thu 14 April 2022 15:22
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 992
Re: QGIS: Orientation atlas
[off] C'est assez impressionnant le nombre de demandes que vous faites quotidiennement sur QGis.
Personnellement, je ne sais pas répondre à la question "comme ça". Mais en cherchant sur GeoRezo, sur les moteurs de recherche, on fini par trouver : la quête est souvent plus formatrice qu'une solution donnée.
[/off]
Du coup, voici comment je procèderais :
1) j'ajouterais un champ "orientation_ligne_elec" à la couche sur laquelle est basée l'Atlas (ici des parcelles)
2) je calculerais ce champs l'orientation moyenne de la ligne électrique pour chaque entité de l'Atlas (chaque parcelle, donc)
3) dans le composeur d'impression, dans les propriétés de la carte (sous l'échelle), je modifierais le champ "rotation de la carte", par défaut à 0, par une expression de type :
Code:
attribute(@atlas_feature,'orientation_ligne_elec')
Pour l'étape n°2, ce n'est pas si évident, mais en recherchant sur G**gl*, on trouve par exemple ceci :
https://archeomatic.wordpress.com/2012/ … polyligne/
Sylvain M.
Hors ligne
#3 Thu 14 April 2022 15:39
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1656
Re: QGIS: Orientation atlas
[off]
C'est assez impressionnant le nombre de demandes que vous faites quotidiennement sur QGis.
Personnellement, je ne sais pas répondre à la question "comme ça". Mais en cherchant sur GeoRezo, sur les moteurs de recherche, on fini par trouver : la quête est souvent plus formatrice qu'une solution donnée.
Oui je sais. Si je fais autant de demandes, c'est parce que les demandes sont multiplies et variées qui supposent une réponse rapide.
Désolé j'espère ne pas être trop encombrant.
[/off]
Hors ligne
#4 Thu 14 April 2022 15:43
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 992
Re: QGIS: Orientation atlas
Pour le 2) en lisant les commentaires de la page d'Archeomatic, il propose une formule plus simple à la fin :
Code:
degrees( azimuth( start_point($geometry), end_point($geometry) ) )
Ce qui doit être calculé pour chaque tronçon de ligne électrique, découpée par les parcelles cadastrales, puis renvoyé dans la couche des parcelles via une jointure spatiale ou attributaire.
Sylvain M.
Hors ligne
#5 Thu 14 April 2022 15:48
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 992
Re: QGIS: Orientation atlas
c'est parce que les demandes sont multiplies et variées qui supposent une réponse rapide.
Il faut parfois savoir temporiser les demandes Pas toujours facile, mais attention à ne pas encourager les demandes avec des délais trop courts.
Sylvain M.
Hors ligne
#6 Thu 14 April 2022 16:13
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1656
Re: QGIS: Orientation atlas
mais attention à ne pas encourager les demandes avec des délais trop courts.
Merci du conseil.
En fait ma demande est imprécise. L'atlas est au 1/2500ème.
Il s'agit de mettre l'ensemble de la ligne sur le plan de la parcelle de l'atlas.
Il faut que la ligne soit lue comme allant d'est en ouest, ou d'ouest en est si vous voulez, l'important est qu'elle doit être lue de manière horizontale.
Merci encore.
Hors ligne
#7 Thu 14 April 2022 16:51
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 992
Re: QGIS: Orientation atlas
En fait ma demande est imprécise. L'atlas est au 1/2500ème.
Cela ne change rien à la solution proposée, qui ne concerne que l'orientation de la mise en page.
La solution que je propose fonctionne "en théorie" avec un atlas à échelle fixe.
Sylvain M.
Hors ligne
#8 Thu 14 April 2022 17:02
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 992
Re: QGIS: Orientation atlas
Je viens de tester la formule [1] proposée avec un Atlas dans QGis, ça fonctionne bien :
capture écran QGis
[1] formule de calcul d'après un champ "orientation_ligne_elec" dans les attribut de la couche d'Atlas :
Code:
attribute(@atlas_feature,'orientation_ligne_elec')
Dernière modification par Sylvain M. (Thu 14 April 2022 17:06)
Sylvain M.
Hors ligne
#9 Thu 14 April 2022 17:21
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1656
Re: QGIS: Orientation atlas
Mais il peut y avoir plusieurs inclinaisons de la ligne qui est représentée dans le plan de la parcelle.
Si j'ai bien compris, il faut :
- calculer l'inclinaison de chaque segment de la ligne. Problème la ligne ne comporte qu'une seule entité. Il faudrait éclater la ligne à chaque changement de direction
- une fois calculé l'inclinaison de chaque segment, il faut attribuer à ce segment un angle qui le rende lisible à l'horizontale (comment faire?)
- ensuite attribuer au plan de l'atlas, l'inclinaison du segment, dont l'inclinaison à l'horizontale a été calculé, qui intersecte la parcelle de l'atlas.
Hors ligne
#10 Thu 14 April 2022 17:34
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1656
Re: QGIS: Orientation atlas
Il est vrai que je partais sur une fausse piste, je partais sur le calcul des angle de la ligne. Il faut autant que possible rester sur la couche de l'atlas. C'est plus facile.
J'ai utilisé l'expression sur la couche des parcelles de l'atlas
degrees( azimuth( start_point($geometry), end_point($geometry) ) )
mais cela ne calcule que l'angle sur une seule entité...
Hors ligne
#11 Fri 15 April 2022 19:43
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1656
Re: QGIS: Orientation atlas
En supposant que j'arrive à calculer intégralement l'angle de chaque parcelle, je voudrais savoir comment peut-on l'incliner de façon à la voir de façon horizontale comme expliqué dans ma pièce jointe?
Merci.
Hors ligne
#12 Sat 16 April 2022 12:47
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1656
Re: QGIS: Orientation atlas
je voudrais savoir comment peut-on l'incliner de façon à la voir de façon horizontale
Dans l'atlas
Hors ligne
#13 Wed 20 April 2022 09:55
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 992
Re: QGIS: Orientation atlas
Dans votre pièce jointe, la demande ne correspond plus à la demande initiale :
- initial : orientation de la mise en page en fonction de la ligne électrique
- PJ : orientation de la mise en page en fonction de l'orientation de la parcelle
Quel que soit le besoin, la solution proposée précédemment fonctionne :
- soit en calculant l'orientation de la ligne électrique au sein de la parcelle (par découpage puis calcul de l'azimuth pour l'entitée découpée)
- soit en calculant l'orientation de la parcelle
Sylvain M.
Hors ligne
#14 Wed 20 April 2022 10:12
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 992
Re: QGIS: Orientation atlas
Sinon, pour le calcul de l'orientation de la parcelle, il y a une nouvelle fonction depuis QGis 3.16 : main_angle($geometry)
Sylvain M.
Hors ligne
#15 Wed 20 April 2022 17:52
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1656
Re: QGIS: Orientation atlas
Merci j'arrive à moduler l'inclinaison de la carte en fonction de l'angle de la ligne qui est intersectée dans la parcelle de l'atlas.
Mais, l'angle de la ligne est le réel, or ce que je voudrais c'est de mettre la ligne électrique à l'horizontale.
Si la ligne est à 60°, alors elle sera à 0°.
Ce que j'ai pu faire :
- calculer effectivement l'angle de la ligne réel dans un champ "angle"
- dans un champ angle 2 :
- pour les valeurs d'angle inférieures à 90° dans le champ "angle", faire le calcul suivant : 90 - "angle"
- pour les valeurs d'angle supérieures à 90° dans le champ "angle", faire le calcul suivant : (360 - "angle") + 90
Ces calculs permettent à chaque fois de voir la ligne à l'horizontale dans l'atlas.
Hors ligne
#16 Wed 20 April 2022 17:56
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1656
Re: QGIS: Orientation atlas
Si la ligne est à 60°, alors elle sera à 0°.
Si la ligne est à 60°, alors elle sera à 60°.
Hors ligne
#17 Fri 22 April 2022 11:04
- Sylvain M.
- Participant assidu
- Lieu: Saint-Pierre-des-Nids (53)
- Date d'inscription: 8 Sep 2005
- Messages: 992
Re: QGIS: Orientation atlas
Ces calculs permettent à chaque fois de voir la ligne à l'horizontale dans l'atlas.
Du coup, si je comprends bien, vous avez réussi ?
Ou vous bloquez encore sur quelque chose ?
Sylvain M.
Hors ligne
#18 Fri 22 April 2022 11:15
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1656
Re: QGIS: Orientation atlas
Du coup, si je comprends bien, vous avez réussi ?
C'est tout bon. Je vous remercie pour vos pistes.
Par contre, pour y parvenir je dois créer un champ "angle" pour calculer l'angle réel et un champ "angle 2" pour l'angle à l'horizontale.
- pour les valeurs d'angle inférieures à 90° dans le champ "angle", faire le calcul suivant : 90 - "angle"
- pour les valeurs d'angle supérieures à 90° dans le champ "angle", faire le calcul suivant : (360 - "angle") + 90
J'ai bien essayé de calculer directement sur un seul champ l'angle à l'horizontale avec cette expression :
Case when main_angle($geometry) < 90 then 90 - main_angle($geometry) else 360-main_angle($geometry)+90 end
Mais cela ne fonctionne que pour les valeurs d'angle réel < 90
Hors ligne
#19 Fri 22 April 2022 15:53
- conejo
- Participant assidu
- Lieu: Lunel
- Date d'inscription: 2 Dec 2005
- Messages: 1656
Re: QGIS: Orientation atlas
Case when main_angle($geometry) < 90 then 90 - main_angle($geometry) else 360-main_angle($geometry)+90 end
main_angle($geometry) est l'expression qui permet de calculer l'angle réel dans le champ "angle"
Hors ligne