J'ai une couche de lignes et une couche de polygones dans QGIS:
Je voudrais styliser la partie du calque de ligne à l'extérieur du polygone en utilisant un style et la partie à l'intérieur en utilisant un style différent:
Je ne veux pas créer un ensemble de données dérivées, ex. découpez le calque de ligne et stylisez les deux parties.
C'est un cas simple mais dans mon projet QGIS j'ai +30 couches donc je pense que tout mélange de couches perturberait les couches sous-jacentes.
Est-il possible de faire quelque chose comme ça?
Je ne veux pas montrer la couche polygonale, c'est juste ici pour visualiser ce que j'aimerais faire.
Réponses:
Pas une solution parfaite, mais vous pouvez utiliser le générateur de géométrie qui ajoute une ligne visualisée pour représenter l'intersection. Vous pouvez ensuite définir cela pour chevaucher l'entité linéaire d'origine.
Ajoutez une nouvelle couche de symboles en cliquant sur le signe plus et sélectionnez le
Geometry generator
type de couche de symboles. Définissez le type geoemtry surLineString / MultiLineString
et utilisez l'expression suivante:Vous devrez ajouter des détails sur votre polygone spécifique où:
polygonLayer
est le nom de votre couche polygonalefieldName
est le nom du champvalue
est la valeur d'entité de votre polygone spécifiqueNotez que pour colorer la ligne visuelle, vous devrez peut-être le faire à partir de la propriété d' effets Draw :
C'était le résultat (notez que la ligne visuelle ne chevauchait pas complètement la ligne d'origine, j'ai donc légèrement modifié le décalage):
Et sans le polygone:
Éditer:
Si vous souhaitez que cela soit appliqué à chaque entité linéaire intersectant une entité polygonale, accédez à l' éditeur de fonctions et utilisez la fonction suivante (changez le nom de
polygon example_2
pour qu'il corresponde au nom de votre couche polygonale):Cliquez sur Charger, puis accédez à l' onglet Expression et saisissez
func()
. Espérons que le résultat devrait ressembler à ceci (en utilisant les mêmes propriétés de style mentionnées ci-dessus):la source
get_feature
nécessite un nom et une valeur de champ. J'ai juste une couche polygonale et je voudrais utiliser toutes les entités de cette couche pour masquer. Est-ce possible?Geometry Generator
la méthode est-ellefunc
appelée pour chaque entité du calque où elle est utilisée pour le style? Donc, si ma couche de ligne a 3 entités, ellefunc
est appelée 3 fois et dessine le même résultat 3 fois?func
ne soit désormais appelé que pour chaque entité linéaire et ne dessine le résultat qu'une seule fois (ce qui semble être le cas, comme le montrent les marqueurs de sommet à l'intérieur des polygones, avant qu'il ne soit caché sous lequel j'ai manqué). Merci de l'avoir signalé :)Dans le prolongement de la réponse de Joseph , j'ai créé cette fonction. Il représente différents systèmes de coordonnées et j'avais besoin de rechercher dans deux couches de masquage, donc il gère cela aussi. De plus, je voulais pouvoir masquer les lignes à l'intérieur des polygones ou les lignes à l'extérieur des polygones.
Cet exercice m'a montré que QGIS n'aime pas trop travailler avec de grands ensembles de données et que cet algorithme avec QGIS plante trop souvent. Je soupçonne que le rendu QGIS n'aime pas rendre les générateurs de géométrie qui prennent du temps.
la source