Avec QGIS 2.12.2, comment puis-je configurer l'étiquetage des couches pour éviter de placer des étiquettes là où des entités d'une autre couche existent déjà?
Par exemple, si j'ai une couche de polyligne de cours d'eau / rivière qui contient des "lignes centrales" de lac et que je place une couche de polygone "lac" au-dessus dans l'ordre de dessin, je ne veux pas que la couche de rivière place une étiquette à l'intérieur du lac . Au lieu de cela, je préfère que la rivière soit étiquetée à l' extérieur du lac (au besoin). De cette façon, je peux placer des étiquettes à partir de la couche des lacs et je ne rencontre pas de collisions d'étiquettes.
Voici un exemple, où (j'ai intentionnellement placé les lignes au-dessus à des fins visuelles) ce que j'espère réaliser n'est pas d'étiquettes de ligne médiane de la rivière affichées à l'intérieur du polygone du lac:
Réponses:
L'étiquetage automatisé est un problème très difficile, mais la géométrie des entités n'est pas si mauvaise.
Même si le placement peut fonctionner correctement la plupart du temps, il y aura probablement des exceptions. Vous en remarquerez certaines et vous pourrez peut-être les résoudre. D'autres que vous ne remarquerez pas lorsque vous créez une grande carte ou un ensemble de tuiles, car vous ne pouvez pas verser chaque centimètre de votre carte à différentes échelles. Presque toujours, vous aurez envie de déplacer manuellement certaines étiquettes placées automatiquement, d'un point de vue cartographique.
Comme je l'ai suggéré dans mon commentaire, je faciliterais le problème pour le moteur d'étiquetage. Dans ce cas, je le ferais en définissant mes rivières comme une vue de table *, avec des géométries de rivière coupées pour respecter les limites du lac. De cette façon, il n'y a pas d'entités fluviales à l'intérieur des lacs à étiqueter et pas de collisions d'étiquettes.
* Je suppose que l'utilisation d'un SGBDR ici, comme PostgreSQL / PostGIS, pour plus de commodité et la possibilité de mettre à jour uniquement votre source de données faisant autorité et de faire fonctionner la vue elle-même sans votre intervention. Mais vous pouvez également travailler à l'avance avec des fichiers statiques pour découper et supprimer des entités, mais je ne le recommande pas si vous prévoyez de revoir une carte.
Exemple:
En commençant par deux fichiers de formes (qui pourraient être des tableaux de bases de données) de rivières et de lacs, les rivières intersectant les lacs et causant des problèmes d'étiquetage difficiles à résoudre complètement et en toute confiance:
Apportez-les dans Postgres si vous en avez besoin avec shp2pgsql :
shp2pgsql -s 4326 /data/lake public.lakes | psql -d mydb
shp2pgsql -s 4326 /data/river public.rivers | psql -d mydb
Définissez ensuite une vue avec ST_Difference :
Ajoutez la vue à votre mise en page:
Bien que le problème dans mon exemple soit délibérément fabriqué, les styles des deux couches de la rivière (original et vue) sont les mêmes, et ils sont placés au-dessus du lac dans l'ordre de dessin. Lorsque vous mettez à jour les géométries des lacs ou des rivières, vous n'aurez pas besoin de faire beaucoup plus que d'actualiser le rendu.
la source
Dans QGIS> = 2.12, vous pouvez définir la couche polygonale "lac" comme obstacle d'étiquette. Cela se fait via les propriétés de la couche de la couche "lac", sous la section "Étiquettes". Modifiez la zone de liste déroulante en haut de " Pas d'étiquettes " à " Décourager les autres étiquettes de couvrir les entités de ce calque ".
la source
Je trouve l'étiquetage en général assez difficile, au moins pour générer des étiquettes qui plaisent aux sens de mon cartographe. Bien que la fonction d'étiquetage automatique fonctionne correctement 80% du temps, il existe des cas comme votre problème d'étiquetage de rivière / lac où il ne génère pas un bel étiquetage. L'étiquetage automatique est souvent lié à la géométrie de l'entité, par exemple le nombre de pièces sur une ligne, de sorte qu'au début, toutes les pièces sont étiquetées. Bien sûr, QGIS a les moyens d'empêcher l'étiquetage répété, qui dépend également de l'échelle de la vue cartographique actuelle.
De toute façon, mon conseil n'est pas une solution rapide. Je crée souvent un calque spécialisé juste pour l'étiquetage, afin que mes étiquettes soient plus facilement contrôlées. Et souvent, la géométrie des caractéristiques pour la représentation cartographique peut entrer en collision avec une bonne géométrie pour l'étiquetage. Je proposerais donc de créer une nouvelle couche où les cours d'eau ne traversent pas les lacs, afin que vous puissiez contourner complètement le problème. Le fait d'avoir une couche d'étiquetage supplémentaire peut également aider à éviter les problèmes lorsque la direction d'étiquetage n'est pas celle voulue car elle est liée à la façon dont la géométrie a été créée.
Eh bien, je crains que mon conseil ne soit pas ce que vous attendiez, mais j'espère que mon approche alternative pourra vous aider d'une manière ou d'une autre.
la source
il existe un plugin appelé " Mask " qui peut être utilisé pour filtrer les étiquettes en fonction des polygones.
Comme mentionné dans mon commentaire précédent, cependant, il serait beaucoup plus facile si vous pouviez diviser vos lignes à l'intersection avec les lacs (voir les différentes méthodes ici ). Ensuite, vous pouvez définir une étiquette de taille nulle pour les segments qui se trouvent dans les lacs ("Couche"> "Étiquetage"> "Paramètres définis par les données"> "Taille" puis sélectionnez la colonne dans laquelle vous stockez la taille d'étiquette). Le fractionnement conserve la plupart des propriétés de votre réseau fluvial et est réversible avec la dissolution, vous pouvez donc continuer à travailler avec une seule couche (stocker la longueur totale dans une table d'attributs spécifique si nécessaire).
la source