[QGis 1.8] Calculer l’orientation d’une polyligne

Objectif: Calculer l’orientation d’une sépulture c’est à dire l’angle qu’elle forme avec un axe Nord-Sud.

Le tout dans un Système de Coordonnées de Référence métrique (ici en Lambert 93) et en SQL (pour pouvoir être calculé grâce à la calculatrice de champs de QGis)…

L’exemple de ce tutoriel concerne une hypothétique sépulture mais il est bien évidemment valable pour toute autre polyligne: limites cadastrales, fossés d’enclos, etc

1) Un petit peu de théorie: retour au collège

Nous avons donc une sépulture représentée dans notre logiciel SIG préféré par une ligne [AB]

De la photo de la sépulture au triangle rectangle

2) Comme on le voit ci-dessus, cette ligne [AB] est l’hypoténuse d’un triangle rectangle qui forme un angle α avec l’axe Nord-Sud  [CA] pour côté adjacent et  [CB] pour côté opposé.

3) Si l’on se rappelle de ses cours de collège ou lycée (ou que l’on a des collègues qui s’en souviennent mieux que nous…merci Ali), on est capable de calculer les trois angles d’un triangle rectangle si l’on connaît les longueurs des côtés dudit triangle. Et donc, de l’angle α grâce aux longueurs de son côté adjacent [CA] et de son côté opposé [CB].

Mais si, rappelez vous les rapports trigonométriques d’un triangle rectangle:

<< Dans un triangle rectangle, la tangente d’un angle aigu est le quotient du côté opposé à l’angle sur le côté adjacent à l’angle >>

autrement dit:

tan (angle aigu) = côté opposé / côté adjacent

4) On pourra donc en déduire, la mesure de l’angle α  grâce à une calculatrice scientifique quelconque avec la fonction inv tan ou un tableur avec la fonction ATAN.

5) Application dans QGis…

Revenons à nos moutons, ou plutôt notre macchabée…en tout cas la polyligne qui le représente:

– Nous devons donc calculer dans un premier temps les longueurs des côtés « imaginaires »  [CB] et  [CA]

coordonnées cartésiennes des côtés adjacent et opposé

=> Rien de plus simple puisque les longueurs des côtés [CB] et [CA]  correspondent à la différence entre les valeurs en ordonnées et en abscisses des extrémités (comme expliqué dans le graphique ci-dessus):

 CB = xB-xA    et     CA = yB-yA

=> Et cela tombe très bien puisque QGis est capable de récupérer les coordonnées x et y des deux extrémités d’une polyligne dans la calculatrice de champs grâce aux opérateurs SQL (géométrie) xat et yat:

fonction SQL geometrie xat ()

xat(O) et yat(O) : coordonnées x et y du point de départ de la polyligne

xat(-1) et yat(-1) pour les coordonnées de fin de la polyligne

Note: Si ces coordonnées vous intéressent vous pouvez donc facilement les récupérer dans une nouvelle colonne de votre table attributaire.

– Nous avons donc les longueurs des côtés adjacent et opposé à l’angle  α qui nous intéresse… reste a pouvoir calculer « l’inverse de la tangente »… 

=> Encore une fois cela tombe très bien puisque QGis contient dans sa calculatrice de champs la fonction mathématique ATAN:

fonction ATAN dans la calculatrice de champs (QGis 1.8)

5) Et la formule magique est … ATAN ( (xat(0)-xat(-1))/(yat(0)-yat(-1)) )*180/3.1416

Alors on récapitule, on veut l’inverse de la tangente ATAN du quotient (/) du côté opposé à l’angle  (xat(0)-xat(-1)) sur le côté adjacent à l’angle (yat(0)-yat(-1))

Attention: Le résultat étant en radians, pour le transformer en degrés le résultat doit être multiplié par 180 et divisé par PI d’où le *180/3.1416

6) ET voilà !

Il nous suffit donc de créer une nouvelle colonne dans la table attributaire de notre shapefile de polylignes (qui représentent les axes longitudinaux des sépultures dans cet exemple)

Puis dans la calculatrice de champs de taper la formule magique mathématique:

ATAN ( (xat(0)-xat(-1))/(yat(0)-yat(-1)) )*180/3.14159

Les résultats sont en degrés, les valeurs de 0° à 90° sont des orientations EST et les valeurs de 0° à -90° sont des orientations OUEST !!

Attention: La direction des polylignes n’est pas prise en compte les orientations seront donc comprises entre -90° (Plein Ouest) et 90° (plein Est) en passant par 0° (plein Nord)

7) ET PUIS LOG… (Jeu de mot pourri…)

Évidemment je ne suis pas le seul à avoir chercher à calculer l’orientation d’une polyligne et en cherchant encore un peu je suis tombé sur un plus fort que moi 😉 ICI qui permet de récupérer l’orientation en degrés (de 0° à 360°) .

Attention le point de départ de création de la polyligne et le point d’arrivée comptent pour le calcul. Dans le cas des sépultures par exemple les points doivent toujours être reliés dans le même sens, celui des pieds puis celui du crâne.

Bon allez je vous la donne cette formule:

(atan((xat(-1)-xat(0))/(yat(-1)-yat(0)))) * 180/3.14159 + (180 *(((yat(-1)-yat(0)) < 0) + (((xat(-1)-xat(0)) < 0 AND (yat(-1) - yat(0)) >0)*2)))

Le début de la formule est bien la même que la mienne (ça me rassure… et la suite permet d’ajouter soit 180 soit 360 au résultat obtenu par cette dernièreafin d’obtenir une orientation entre 0° et 360°.

Publicités
Tagué , , ,

15 réflexions sur “[QGis 1.8] Calculer l’orientation d’une polyligne

  1. Vincent Buccio dit :

    Bonjour,
    Félicitations pour ce blog, que je découvre.
    Confronté il y a quelques années à la question de l’orientation des tombes (mais sous ArcGIS), j’avais mis en place une solution comparable, décrite par d’autres sur le forumSIG.
    Le gros soucis, pour moi, avait été d’automatiser le « tracé » de l’orientation (ta ligne AB).
    A l’époque, j’avais trouvé une solution qui marchait pas trop mal en définissant des rectangles externes au plus proche de la forme (avec l’outil HullRectangle), comme expliqué là :
    http://soi.cnr.it/~archcalc/indice/Suppl_3/Suppl_3.pdf ; un peu de pub en passant, à modérer si tu veux)
    J’ai changé de service depuis et travaille sous QGIS. As-tu réfléchi à (voire trouvé) une solution pour automatiser cette ligne ? Quant il y a plusieurs centaines de tombes, c’est un peu fastidieux à la main…
    Vincent

    • archeomatic dit :

      Bonsoir et merci,
      Pour le tracé automatique regarde du côté de l’extension Point2One de Goyo (qui en plus vient de passer sur le « repository » officiel de QGis) voire avec l’extension Points to Paths
      Au plaisir de te relire !

      PS: mille merci pour le lien !! j’y étais et me rappelle bien d’un chantier plein de sépultures 😉 mais ne savais pas que c’était publié !

      • archeomatic dit :

        En fait j’avais pas compris… tu n’a pas deux points au départ mais des polygones… c’est ça ?
        J’ai essayé avec
        Menu Vecteur > Outils de géométrie > Polygones vers lignes
        PUIS
        Menu Vecteur > Outils de géométrie > Simplifier la géométrie … (avec une « Tolérance de simplification » de 0,5)
        le résultat ne me parait pas très probant mais bon… faudrait tester les paramètres ou
        voir avec un « plus petit rectangle englobant » version QGis..

      • Vincent Buccio dit :

        C’est ça : j’ai au départ le dessin des contours des sépultures tracé d’après photo redressée. Par pure flemme, je n’ai pas voulu tracer à la main la ligne qui définit l’orientation des tombes. L’idée du rectangle enveloppant le polygone au plus proche est assez satisfaisant, parce que ses grands côtés sont grosso modo parallèle à la tombe (sauf forme très bizarre, bien entendu).
        Y’a des outils sous ArcGIS qui tracent ce rectangle tout seul, d’autres qui donnent même directement son azimuth !
        J’ai regardé rapidement : on doit pouvoir faire ce genre de rectangles sous R ou sous SpatiaLite, mais j’ai jamais joué avec pour le moment. Si je trouve une solution propre, je n’hésiterai pas à t’en faire part !

    • Saadia dit :

      Bonjour Vincent,

      je travaille sur la même chose sous Arcgis, des recherches sur google ne me font que perdre le fil plus !

      pourriez vous m’orienter et me montrer d’où commencer ?

  2. LANDAIS Alice dit :

    Bonjour,

    Bien le tuto, et même on révise les maths en même temps, c’est le bonheur !
    Seul « hic » à mon niveau, un message d’erreur qui me dit : « une erreur s’est produite lors de l’évaluation de la chaîne de calcul : l’index est hors de portée ». En-dessous, ds ma table attributaire, je vois le nv champ créé avec les valeurs qui apparaissent, mais dès que je clique OK au message d’erreur, le nv champ s’efface… c’est vexant !

    une idée de ce qu’il peut se passer?

    • archeomatic dit :

      Euh il faudrait reussir a reproduire lerreur.. Es tu certaine du type de ton champs (entier ou decimal) et de la longueur suffisante ? Question subsidiaire : quelle version de QGIS ?

    • GUEGAN dit :

      Bonjour.
      J’ai eu le même problème que vous, je viens tout juste de le résoudre.

      Je vous conseille de créer un champ virtuel dans lequel vous calculerez l’azimuth (et oui QGis veut bien le calculer, mais que dans un champ virtuel…). Vous regardez ensuite dans votre champ quels sont les objets avec les valeurs « null ». Ce sont eux qui posent problème. On peut essayer de résoudre le problème mais personnellement ça ne concernait que 3 de mes objets sur 3000 donc j’ai supprimé et recréé. Et ensuite vous n’avez plus qu’à créer un champ « en dur » et y calculer l’azimuth.

  3. Michelot dit :

    Bonjour,

    Merci pour ce tuto! Je débute sous QGIS et j’aurais une question (relativement simple j’imagine mais je ne m’en sors pas bien), alors j’en profite pour utiliser ce forum!
    J’ai sous QGIS une couche de polyligne. J’aimerais récupérer les coordonnées de début et fin de mes lignes, et ai bien essayé avec xat et yat. Seulement le résultat rendu est un nombre entier, et j’aimerais pouvoir avoir le résultat en degré minute. Est-ce possible avec QGIS? (mes couches sont en Lambert 93, j’ai essayé avec WGS 84 mais le résultat reste le même).
    ce n’est peut-êtrer pas le bon endroit pour poser ce type de question, mais merci par avance!

  4. […] A noter quand même que les orientations sont indiquées sous la forme d’un angle de 0 à 180 degrés par rapport au Nord, en même temps vu que vous avez une Polyligne vous n’avez qu’à vous referez au tutoriel dédié à l’orientation d’une Polyligne sur ce même blog => https://archeomatic.wordpress.com/2012/10/20/qgis-1-8-calculer-lorientation-dune-polyligne/ […]

  5. Calduch Séb dit :

    ceci dis , on peut exporter en shape le calque des axes de coupe (changer l’unité de grade en degré) l’orientation des « lignes » …

  6. Thérèse HUGEROT dit :

    (suite du commentaire précédent) : j’ai trouvé une feinte avec la toolbox d’arcgis raster-surface-exposition… c’est une solution précaire mais qui donne un résultat correct. Il suffit de rasteriser les polylignes.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :