[Whitebox GAT 3.2 – QGIS 2.x] Automatiser le calcul de longueur et d’orientation d’un polygone.

Objectif : Ce tuto est issu de mes pérégrinations pour résoudre deux demandes récurrentes : d’une part calculer automatiquement la longueur des tranchées de diagnostics archéologiques et d’autre part récupérer l’orientation générale de plusieurs fosses sépulcrales.

1_Objectifs

Pour ce faire nous allons utiliser l’application SIG Whitebox GAT développée par le Dr. John Lindsay du département de géographie de l’université de Guelph au Canada, et en particulier l’outil LongAxis. Ainsi que notre logiciel SIG préféré 😉

Note: depuis la version 2.14 de QGIS et de l’extension Processing (Traitement) qui va bien avec il est possible de créer l’emprise orientée minimale (OMBB) directement dans la boîte à outils Traitement ! voir le paragraphe 5- QGIS 2.14 en fin de billet…

 1- Postulat

Nous disposons d’un shapefile de tranchées -des polygones rectangulaires avec parfois des excroissances que sont les extensions- et nous aimerions récupérer automatiquement la longueur de celles-ci voire leur orientation.

OU

Nous disposons d’un shapefile de fosses de sépultures –des polygones plus ou moins réguliers- et nous souhaiterions dessiner « une sorte d’axe médian » et calculer automatiquement son orientation.

2- Whitebox GAT

Le logiciel est téléchargeable ici => http://www.uoguelph.ca/~hydrogeo/Whitebox/download.shtml , il est distribué sous licence GNU GPL (v3). Le blog dédié au logiciel est ici => http://whiteboxgeospatial.wordpress.com/

Téléchargez donc la dernière version (celle utilisée pour ce tutoriel est la version 3.2 avec le doux nom de Iguazu).

Décompressez le fichier WhiteboxGAT.zip puis double-cliquez sur le fichier exécutable Whitebox.jar 2_icone_WBOX_jar  … pas besoin d’installateur !

Déroulez le menu sous l’onglet Outil > Analyse SIG > Outils Vectoriels et double-cliquez sur l’outil Long Axis

3_WBox_Outils

Une boite de dialogue s’ouvre et vous permet :

4_BoiteDialogue_LongAxis

1. de choisir le shapefile de polygone sur le quel vous voulez travailler : pour nous Tranchees.shp

2. Le shapefile de ligne que vous voulez créer : pour nous TR_Axis.shp

3. D’exécuter le script en appuyant sur le bouton [OK]

Et c’est tout… ou presque….

Arrêtons-nous juste quelques secondes sur l’outil avant d’ouvrir notre logiciel préféré parce que certains hurlent déjà au fond de la salle…. « La longueur d’un polygone et son orientation !! Mais qu’est ce que ça veux dire ça ?! »

La réponse se trouve, pour les anglophones, dans la petite fenêtre d’aide à droite de la boîte de dialogue :

« Cet outil peut être utilisé pour cartographier l’axe long d’un polygone. Le grand axe est le plus long des deux axes principaux de la boîte de délimitation minimum (MBB) , c’est à dire la plus petite boîte englobante d’un objet. (Plus exactement le plus petit rectangle englobant NDLR). Le grand axe est tracé pour chaque polygone de telle sorte qu’il passe par le centroïde du Rectangle englobant. Le fichier de sortie est à cet effet un vecteur de simples polylignes formées par deux points.  »

En image cela donne :

5_Schema_MBR_Axis

Note : le plus petit rectangle englobant peut être obtenu grâce à l’outil Minimum Bounding Box du même logiciel Whitebox GAT, sous forme de Polyligne ou de Polygone.

Vous avez compris le schmilblick ? on continue… 

3- Ouverture dans QGIS

Rien de plus simple : il suffit d’ajouter nos deux couches vecteurs : Tranchees.shp et TR_Axis.shp

On ouvre la table attributaire de TR_Axis.shp et là :

1. Ouaouh 😉 on a effectivement un champ LENGHT avec la longueur du plus grand axe du plus rectangle englobant (allez on répète !) ainsi que son orientation dans le champs ORIENT.

2. Bouououh 😦 le champ d’identifiant PARENT_ID ne correspond pas aux identifiants de mon shape Tranchees.shp

Pleure pas petit diagnostiqueur laborieux (ou anthropologue fainéant ou infographe pressé au choix) on va arranger cela….

 4- Jointure dans QGIS (et finitions)

En effet le champs PARENT_ID semble correspondre à l’indexation du shape d’origine, en clair a la chronologie de création des entités dans celui-ci.

Il suffit donc dans le shape d’origine (Tranchees.shp) de créer une nouvelle colonne Parent_ID (par exemple) et d’utiliser la calculatrice de champ et la fonction $rownum comme ceci :

6_Calculatrice_RownumLes 2 tables attributaires on donc un identifiant commun :

7_Tables_attrib_Parent_ID

On remarque que la fonction $rownum a numéroté les enregistrements selon l’ordre d’enregistrement des entités et ne correspond pas forcément a celui de la colonne ID (enregistrement de terrain)

On peut donc faire une jointure à partir du shape Tranchees.shp (clic droit > Propriétés > jointures) et joindre le shape TR_Axis avec comme champs commun PARENT_ID et Parent_ID.

Et s’est marre ! Alors ça vous plait le calcul de longueur et d’orientation d’un polygone ?

5- QGIS 2.14: plus simple et intégré: l’emprise orientée minimale (OMBB)

Encore une fois, j’en ai rêvé, QGIS l’a fait ! (et Yo toujours au taquet l’a repéré! merci pour l’info et l’impression écran) En effet avec la version 2.14 de QGIS et la mise à jour de l’extension Processing, il est désormais possible d’utiliser le géotraitement:

Géotraitements QGIS > Outils généraux vecteurs > Emprise orientée minimale (OMBB)

OMBB_QGIS214

Une nouvelle couche est créée avec comme attributs la surface de chaque entité, son périmètre son orientation, sa longueur et sa largeur…

Reste encore une fois le problème de la perte de l’identifiant de la couche de départ… mais une petite jointure spatiale devrait faire l’affaire !

5- Conclusion

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/

Bonus Si vous êtes très motivés et que vous voulez traduire les orientations obtenues (angle de 0 à 180° par rapport au Nord en sens horaire) en orientation pour l’étiquetage (angle de 0 à 360° par rapport à l’axe des abscisses et en sens antihoraire) voici ma formule SQL pour remplir un champ Rotation_Etiquette (par exemple) :

CASE

WHEN « ORIENT » > 0 AND « ORIENT » <= 90 THEN abs ( « ORIENT » – 90 )

WHEN « ORIENT » > 91 AND « ORIENT » <= 180 THEN 360 – ( « ORIENT » – 90 )

END

Publicités

7 réflexions sur “[Whitebox GAT 3.2 – QGIS 2.x] Automatiser le calcul de longueur et d’orientation d’un polygone.

  1. Yoann dit :

    RHAAAA !!! Lovely !!!!!!
    merci Sly !!!

  2. The Dude dit :

    Super Sly! Et pour les sondages qui ne sont pas droits? Bon, j’abuse mais c’est déjà un bon début.

    Ciao.

  3. Gladal dit :

    Très bien ça ! Je viens de faire le test et pour la majorité des cas cela fonctionne bien ! Reste le problème des tranchées avec des ouvertures de chaque côté et des tranchées à orientation multiple où les résultats pour le calcul de la longueur et de l’orientation ne convient pas à ce que nous recherchons… Reste à traiter ces objets au cas par cas ! En cas, merci Sly, c’est chouette !

  4. Yoann dit :

    Hello, Sly
    j’utilise assez fréquemment ta procédure faut dire, et c’est vraiment d’la balle.
    Par contre il y a un blème un peu embêtant :
    les valeurs retournées sont des nombres entiers. Même si le format des champs produit sont en relatif, les valeurs sont systématiquement du genre xxx,00.
    Pour les orientations, on peut s’en accommoder, mais pour les longueurs c’est plus enquiquinant. Une tranchée de 13,50 m ne fait pas 13 m ou 14 m.
    J’ai essayé de paramétrer WhiteBox, mais sans succès.
    une idée ?

  5. LJ01 dit :

    bonjour
    avec « Emprise orientée minimale (OMBB) » a priori on a des valeurs entre -180° et 180°
    et selon la façon dont on a dessiné le polygone il prend la valeur – ou + !?
    comment faire/voir le calcul qui est fait ?
    merci LJ

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 :