Afficher uniquement les marqueurs de points lorsque les étiquettes sont affichées dans QGIS?

8

Est-il possible de définir une règle de style QGIS pour afficher uniquement les marqueurs de point lorsque leur étiquette est affichée?

Mon objectif est d'exclure tous les points qui ne sont pas étiquetés à cause d'une collision entre les étiquettes.

Exemple:

comment changer les points invisibles lorsque leurs étiquettes s'effondrent

Jakob
la source
Pouvez-vous fournir des captures d'écran de votre tableau d'attributs et des points actuels affichés sur la carte?
whyzar
@whyzar Une image exemple est téléchargée
Jakob
2
La collision peut également être réduite si vous définissez l'option "Décourager les étiquettes de recouvrir les fonctions" dans l'onglet Rendu.
MAP
Je ne pense pas que cela puisse être fait. Rien dans l'API non plus pour vérifier si une étiquette est visible: qgis.org/api/classQgsLabel.html
HeikkiVesanto
Une autre question a été posée qui couvre le besoin / désir de détecter quelles fonctionnalités sont étiquetées ou non. Toute réponse utile à cela pourrait bien donner à quelqu'un un nouvel angle pour aborder celui-ci.
Phil G

Réponses:

3

Ce n'est pas idéal, mais si vous êtes d'accord avec l'étiquette apparaissant toujours sur le marqueur, vous pouvez utiliser un arrière-plan sur votre étiquette comme solution de contournement.

  1. Allez dans Propriétés du calque, et sous Style choisissez "Pas de symboles" (oui, vous avez bien lu).
  2. Sous Étiquettes, choisissez Arrière-plan dans le sous-menu (ressemble à un symbole d'autoroute Interstate). J'utilise généralement un SVG, mais un cercle peut fonctionner correctement pour ce que vous voulez.
  3. Dans le sous-menu Arrière-plan, choisissez votre type de taille: tampon ou fixe. Avec Buffer, le symbole s'agrandira jusqu'à ce qu'il soit assez grand pour englober tout le texte, donc je suppose que vous voudrez qu'il soit corrigé. L'exemple ci-dessous utilise un tampon.
  4. En haut de la section Étiquettes, choisissez le champ que vous souhaitez étiqueter ou entrez une expression.
  5. Assurez-vous que l'emplacement n'est pas décalé.

Inconvénients:

  1. Complique l'affichage du symbole dans une légende dans un compositeur d'impression (il existe des solutions de contournement en créant un autre calque et en le référençant dans la table des matières, avant de désactiver et de verrouiller les calques)
  2. Le texte est centré sur le symbole. Vous pouvez concaténer des espaces à l'avant de l'étiquette pour la déplacer vers la droite, mais d'autres étiquettes sont masquées et ne s'affichent pas. Vous n'avez pas la possibilité de déplacer les étiquettes autour des points pour un minimum de conflits.
  3. Vous perdez beaucoup de fonctionnalités dans la mise en forme des symboles, comme les échelles de couleurs.
  4. Il semble que les conflits d'étiquettes doivent parfois être plus graves pour masquer l'étiquette - les miens se chevauchent parfois sans quelques embrouilles. Cela peut être le résultat de l'utilisation du type de taille de tampon.

Un exemple qui prend un nom de fichier de "field_1" et supprime l'extension .jpg pour former le texte de l'étiquette pour les emplacements des photos:

réglages

Les resultats:

zoom avant: Zoomé et zoom arrière: dézoomé

(note - la direction vers laquelle pointe l'icône svg a été définie par une expression faisant référence à un autre champ du tableau)

Nate Wanner
la source
-2

Sélectionnez simplement toutes les valeurs qui ont une étiquette à l'aide d'une requête, exportez vers un nouveau calque puis utilisez le nouveau calque.

NULL.Dude
la source
Pouvez-vous me donner un court exemple de requête pour sélectionner des valeurs qui affichent actuellement une étiquette?
Jakob
Assurez-vous de fournir une capture d'écran de la table d'attributs avec laquelle vous travaillez et des champs contenant les étiquettes que vous souhaitez.
NULL.Dude
Je viens de réaliser que c'est pour QGIS que je travaille principalement avec ArcGIS mais en théorie, le processus devrait être le même, pour sélectionner toutes les données associées aux valeurs qui ont les étiquettes, puis créer une nouvelle couche avec ces valeurs sélectionnées.
NULL.Dude
-3

Définissez une règle (style basé sur des règles) sur votre symbole :

"label" IS NOT NULL

(en supposant que votre champ d'étiquettes s'appelle "étiquette")

Maintenant, les symboles seront affichés si le champ des étiquettes n'est pas vide.

CARTE
la source
2
Je ne pense pas que ce soit ce que demande OP. Les valeurs dans l'étiquette ne seront pas nulles, elles ne sont simplement pas affichées car elles se chevauchent avec d'autres étiquettes.
HeikkiVesanto
@Vesanto Oui, les valeurs ne sont pas NULL.
Jakob