J'essaie de créer une carte à imprimer et la taille de mes polygones varie considérablement. Comme ce sera une carte de référence, j'ai besoin d'étiqueter chaque polygone, mais certains noms ne rentreront pas dans le polygone. Dans ces cas, j'aimerais utiliser l'ID de fonctionnalité à la place, puis avoir une table d'attributs reliant l'ID au nom.
Ce que je voudrais faire, c'est avoir une sorte d'expression que je peux utiliser pour sélectionner quelle étiquette utiliser sur la carte et quelles lignes inclure dans la table attributaire. Quelque chose comme isLabelled
ça pourrait prendre en compte l'échelle de la carte, la longueur de l'étiquette, la taille de la police, etc.
qgis
labeling
print-composer
qgis-custom-function
Ian Turton
la source
la source
Réponses:
Voici une façon quelque peu approximative (mais si tout va bien efficace) de le faire.
D'abord un peu de maths. Nous devons déterminer combien de caractères à une certaine taille de police une fonctionnalité peut contenir. Voici les choses / hypothèses à savoir:
Pour savoir combien de temps un élément est affiché à l'écran / imprimé, nous pouvons utiliser sa dimension la plus longue (longueur ou hauteur, ou simplement la longueur si vos étiquettes sont horizontales uniquement) / échelle * 100 (pour passer de M à CM)
Ensuite, nous pouvons voir si notre étiquette conviendrait.
Vous pouvez tout faire dans le moteur d'expression, mais une expression python personnalisée serait plus efficace. Voici un tutoriel sur la façon d'en créer un.
Mon expression personnalisée:
Ensuite, utilisez simplement cette expression dans l'étiquette:
Vous devrez bien sûr brancher l'attribut que vous utilisez réellement, et changer la taille de police de 8 à celle que vous utilisez. De plus, comme les polices varient beaucoup, vous devrez peut-être les modifier un peu jusqu'à ce qu'elles semblent correctes.
Vous pouvez également utiliser cette expression pour faire des choses comme changer la couleur en fonction de l'adéquation ou non de l'étiquette.
Pour utiliser cette expression en dehors du canevas de carte (c'est-à-dire dans une étiquette de compositeur ou une table d'attributs), nous avons besoin d'un moyen d'obtenir par programme l'échelle d'un élément de carte donné. J'ai posté du code pour accomplir cela dans une autre réponse ici La méthode ici nous donne une expression getScale ('composername', 'mapname') afin de l'intégrer dans notre expression:
la source
Dupliquez le calque, un sans symbologie, et définissez différents niveaux de zoom / paramètres d'obstacles pour les étiquettes pour chacun.
la source
J'ai eu une situation similaire avec l'obligation d'étiqueter chaque route dans une couche de route. Ma solution était de créer le canevas à une plus grande taille, d'exporter au format PDF puis d'imprimer le PDF à la taille requise.
Par exemple, le produit fini devait être A3. Sur la toile en A3, je ne pouvais pas tenir toutes les étiquettes. J'ai donc réalisé la toile A2 et cela a permis de voir toutes les étiquettes. Créez un PDF de la carte de taille A2 et imprimez-le au format A3.
la source