Suite

Comment définir la position de l'étiquette autour d'un point dans qgis en fonction d'un champ

Comment définir la position de l'étiquette autour d'un point dans qgis en fonction d'un champ


je travaille sur unfichier de formedansqgis(2.8.4 Wien pour Mac). Dans ce dossier j'ai plusieurs points avec une dizaine de champs. Ce qui m'intéresse, c'est d'utiliser deux de ces champs pour définir la position de l'étiquette et la rotation du symbole du point : un champ est le identifiant du point, l'autre est le rotation.

Je représente le symbole du point comme un triangle avec une petite ligne, et je le fais pivoter selon le rotation domaine (je n'ai aucun problème avec cela). Le problème principal est de placer l'étiquette de l'ID autour du point dans une position spécifique, selon le rotation, mais sans le faire pivoter.

Le champ de rotation contient évidemment des valeurs de 0 à 359.

Dans l'image ci-dessous, il y a un échantillon de ce que je veux obtenir:

Je pense qu'il est possible d'utiliser une fonction de décalage avec sinus et cosinus, mais les boutons correspondants sont désactivés sur l'interface qgis.

Il y a un moyen de faire ça ? Malheureusement, c'est une exigence du travail que je fais.


Vous pouvez définir le mode de placement de l'étiquette sur « Décalage à partir du point », puis définir un remplacement de données défini sur le champ « Décalage X,Y ». Cela nécessiterait une expression comme :

to_string("distance" * cos( "angle_radians" )) ||','|| to_string("distance" * sin( "angle_radians" ))

Où "distance" est votre distance depuis le champ du point et "angle_radians" le champ contenant l'angle du point en radians.

Notez que pour les anciennes versions de QGIS, "tostring" doit être utilisé à la place de "to_string".


En plus de la réponse liée de @MaryBeth dans le commentaire, pour QGIS 2.12.1 (lyon), il existe désormais une règle définie par les données pour le "quadrant" ou la position de l'étiquette.

Dans la boîte de dialogue d'étiquetage, sélectionnez l'onglet "Placement", puis cochez la puce radio pour "Autour du point".

Ensuite, il existe une option pour définir une expression pour le "Quadrant".

Si vous vérifiez la description, elle vous indique ce qu'elle attend comme entrée.

Dans ce cas, il attend un int (un entier).

Remplacement des données défini Actif : non (ctrl|bascule avec le bouton droit) Saisie attendue : int [0=Au-dessus de la gauche|1=Au-dessus|2=Au-dessus de la droite| 3=Gauche|4=Au-dessus|5=Droite| 6=En bas à gauche|7=En bas|8=En bas à droite] Types d'entrée valides : string, int, double Définition actuelle : undefined

Vous pouvez voir où chaque nombre représente une place dans le quadrant.

Il vous suffit donc de configurer ici l'expression de type CASE ELSE qui examine les valeurs de rotation dans votre champ de rotation.

par exemple,

CAS QUAND "rotation" = 45 ALORS 2 QUAND "rotation" = 90 ALORS 6 AUTREMENT 0 FIN

TonLORSQUEL'instruction peut également utiliser des plages,

QUAND "rotation" >= 0 ET "rotation" <= 50 ALORS…

Comme SaultDon l'a décrit, vous pouvez utiliser une expression pour le quadrant :

cas lors d'un tour (rotation / 360 * 8 + 1) % 8 = 0 puis 1 lors d'un tour (rotation / 360 * 8 + 1) % 8 = 1 puis 2 lors d'un tour (rotation / 360 * 8 + 1) % 8 = 2 puis 5 lors du tour (rotation / 360 * 8 + 1) % 8 = 3 puis 8 lors du tour (rotation / 360 * 8 + 1) % 8 = 4 puis 7 lors du tour (rotation / 360 * 8 + 1) % 8 = 5 puis 6 lors du tour (rotation / 360 * 8 + 1) % 8 = 6 puis 3 lors du tour (rotation / 360 * 8 + 1) % 8 = 7 puis 0 fin

Edit : ajouté+1offset puisque vous semblez souhaiter que l'étiquette soit dans le quadrant suivant dans le sens des aiguilles d'une montre.


Voir la vidéo: Etiquetage dynamique avec QGIS