Je voudrais symboliser un polygone sans les convertir en ligne. J'ai une entité polygonale (hachurée et délimitée par une ligne rouge) qui coïncide en haut et en bas du littoral (ligne bleue). Je voudrais symboliser le contour d'un polygone uniquement sur deux côtés et je souhaite supprimer la couleur rouge en haut et en bas.
Je voudrais voir le résultat final comme ça.
Réponses:
J'ai eu un peu de mal avec le
Geometry generator
@GSienko. Pour la partie d'intersection, vous pouvez également utiliser la fonction intégréeaggregate
. J'ai également utilisé unesegment_to_lines
fonction qui convertit les polygones en lignes.ou
Si vous avez un polygone "sans rapport" avec les lignes, vous pouvez ajouter une
if
condition d'intersection. Si les couches sont en intersection, la différence est appliquée pour la symbologie, sinon la géométrie entière est appliquée.edit : Utiliser le générateur de lignes de cette façon a un point faible - vous devez gérer le symbole de légende, car il rend la ligne à travers le polygone (pas comme une bordure). Cependant, vous pouvez toujours dupliquer le calque, définir un remplissage simple et l'utiliser comme légende.
la source
Essayez d'utiliser le plugin refFunction dans le générateur de géométrie.
Supposition. 2 couches - une ligne comme ligne et des polygones comme polygone.
Polygone de style comme ça:
geomintersect fera une requête spatiale entre la couche polygone et la couche ligne, et retournera la géométrie d'intersection de deux d'entre eux, dans notre cas, deux bordures de polygones. L'étape suivante consiste à faire la différence avec la bordure du polygone. Je ne sais pas si vous aurez des trous à l'intérieur ou non, alors exterior_ring () ne retournera que la bordure extérieure.
Résultat final:
La limitation - geomintersect ne vérifiera l'intersection que pour un seul polygone. Je gère cette limitation en créant des polygones en couches sur un grand multipolygone, par exemple par une couche virtuelle pour le style des bordures.
la source
Que diriez-vous d'ajouter une ligne blanche sous la ligne bleue dans l'autre couche, qui a la même largeur que la ligne rouge? Si vous placez la ligne bleue au-dessus de la couche de polygones, la ligne blanche masquera la ligne rouge.
Bien sûr, cela suppose que vous avez un fond blanc comme dans votre exemple, et que vous êtes d'accord avec certains réticules également masqués.
Voici mon résultat de test rapide:
Paramètres de la ligne bleue:
la source
Avertissement: Cette réponse ne fonctionnera pas si vous avez plusieurs polygones
Ce que vous pourriez faire est de découvrir quels nœuds forment les quatre coins du polygone entre lesquels vous souhaitez tracer des lignes, puis utilisez ceux des fonctions MAKE_LINE () pour tracer les lignes:
Pour trouver les nœuds dont vous avez besoin:
POINT_N($geometry, 1)
pour afficher le premier nœud comme un pointPour tracer les lignes:
MAKE_LINE(POINT_N($geometry, *first point*), POINT_N($geometry, *second point*)
Ensuite, vous ajoutez simplement une symbologie de remplissage de motif de ligne normale sous ces deux générateurs de géométrie
la source