Lignes droites de l'étiquette à l'entité dans QGIS?

11

Ce que j'essaie de faire, c'est d'étiqueter une série d'entités ponctuelles, mais en raison de la densité des entités ponctuelles, je vais devoir éloigner les étiquettes des entités ponctuelles. Je veux ensuite utiliser une simple ligne droite (pas une flèche) pour montrer quelle étiquette fait référence à quel point.

J'ai utilisé le plugin "Easy Custom Labels" pour générer les étiquettes et les déplacer là où je les veux. Mais ce que je ne peux pas faire, c'est créer une simple ligne droite mince entre le point et la table.

Le mieux que j'ai réalisé est de changer le "type de calque de symbole" (Calque d'étiquettes> Propriétés> Style) en "flèche", décochez "flèches courbes" et décochez "répéter la flèche sur chaque segment". Et puis faites la longueur et l'épaisseur de la tête 0 et faites la "largeur de flèche" et "largeur de flèche au début" comme ceci possible. Mais cela crée toujours une ligne épaisse. Voir l'image A.

J'ai essayé de définir le «type de symbole ultérieur» sur «ligne simple» mais cela se traduit par des lignes avec des plis / sommets / coins. Voir l'image B.

Idéalement, je voudrais des lignes droites entre les étiquettes et l'entité (comme dans l'image A) qui sont d'une largeur similaire à celles de l'image B.

Exemples de deux types d'étiquetage

QGIS_Noob
la source

Réponses:

11

Vous pouvez utiliser une expression pour créer une ligne entre l'étiquette et la géométrie

entrez la description de l'image ici

Expresion:

CASE 
 WHEN (label_x IS NOT NULL AND label_y IS NOT NULL) THEN
  make_line(centroid($geometry),make_point(label_x -2,label_y), make_point(label_x ,label_y))
ELSE
  NULL
END

Et cela devrait aboutir:

entrez la description de l'image ici

Carlos López Quintanilla
la source
Juste un sidenote, si les étiquettes sont déplacées manuellement à l'aide de la barre d'outils des propriétés d'étiquetage et que la position est stockée dans le projet, les variables label_x, y changent en champs appelés "AUXILIAIRE_STOCKAGE_LABELING_POSITIONX" et "AUXILIAIRE_STOCKAGE_LABELING_POSITIONY".
Gabriel C.
1
En plaçant votre point central 2 unités à l'ouest comme vous le faites ici make_point(label_x -2,label_y), les étiquettes sur la côte ouest seront drôles. De plus, travailler à une échelle différente rendra cela inutile. Cela fonctionnerait mieux en définissant ce point par rapport à la distance à votre étiquette et à la position relative de votre centre de gravité.
Albert
2

La réponse de Carlos fait d'un leader aligné horizontalement à la fin de l'étiquette un seul point de moins dans le générateur de géométrie donne des lignes droites. Dans mon exemple, j'ai déplacé les étiquettes manuellement à l'aide de la barre d'outils d'étiquetage dans QGIS 3.0.3. Notez que la technique se trouve à la question 232709 .

Les seules modifications que je devais apporter sont les valeurs x, y dans mon expression:

CASE
   WHEN ("auxiliary_storage_labeling_positionx" IS NOT NULL AND "auxiliary_storage_labeling_positiony" IS NOT NULL) THEN
        make_line(centroid($geometry),make_point("auxiliary_storage_labeling_positionx","auxiliary_storage_labeling_positiony"))
   ELSE
      NULL
END

Quant aux lignes de repère elles-mêmes, l'arbre de symbologie se présente comme suit:

  • Remplir
    • Générateur de géométrie
      • Ligne
        • Ligne de marqueur
          • Marqueur
            • Marqueur simple
          • Ligne simple

Pour vous assurer que les lignes de repère se terminent au centre de l'étiquette, modifiez simplement les valeurs dans l'alignement défini par les données des étiquettes sur «Centre» pour horizontal et «Demi» pour vertical. Pour styliser la ligne selon vos besoins, utilisez la ligne simple imbriquée dans la ligne de marqueur.

Gabriel C.
la source