Eu tenho uma camada de linha e uma camada de polígono no QGIS:
Gostaria de estilizar a parte da camada de linha fora do polígono usando um estilo e a parte interna usando um estilo diferente:
Não quero criar um conjunto de dados derivativos, ex. recorte a camada de linha e estilize as duas partes.
Este é um caso simples, mas no meu projeto QGIS eu tenho +30 camadas, então acho que qualquer mistura de camadas poderia perturbar as camadas subjacentes.
É possível fazer algo assim?
Eu não quero mostrar a camada de polígonos, é só aqui para visualizar o que eu gostaria de fazer.
Respostas:
Não é uma solução perfeita, mas você pode usar o Geometry Generator, que adiciona uma linha visualizada para representar a interseção. Você pode definir isso para sobrepor o recurso de linha original.
Adicione uma nova camada de símbolo clicando no sinal de mais e selecione o
Geometry generator
tipo de camada como símbolo. Defina o tipo de região geográficaLineString / MultiLineString
e use a seguinte expressão:Você precisaria adicionar detalhes sobre seu polígono específico onde:
polygonLayer
é o nome da sua camada de polígonofieldName
é o nome do campovalue
é o valor do recurso de seu polígono específicoObserve que para colorir a linha visual, você pode precisar fazer isso na propriedade Efeitos do desenho :
Este foi o resultado (observe que a linha visual não se sobrepôs completamente à linha original, por isso modifiquei ligeiramente o deslocamento):
E sem o polígono:
Editar:
Se você deseja que isso seja aplicado a cada recurso de linha que cruza um recurso de polígono, vá para o Editor de Funções e use a seguinte função (altere o nome de
polygon example_2
para corresponder ao nome da camada de polígono):Clique em Carregar , vá para a guia Expressão e digite
func()
. Esperamos que o resultado seja o seguinte (usando as mesmas propriedades de estilo mencionadas acima):fonte
get_feature
requer nome e valor do campo. Eu só tenho uma camada de polígono e gostaria de usar todos os recursos dessa camada para mascarar. Isso é possível?Geometry Generator
o método éfunc
chamado para todos os recursos da camada em que é usado para estilizar? Então, se a minha camada de linha tem 3 recursos, entãofunc
é chamada 3 vezes e obtém o mesmo resultado 3 vezes?func
agora seja chamada apenas por cada recurso de linha e desenhe o resultado apenas uma vez (o que parece ser o caso, conforme mostrado pelos marcadores de vértices dentro dos polígonos, antes que isso estivesse oculto embaixo do que eu perdi). Obrigado por apontar isso :)Estendendo a resposta de Joseph , criei essa função. Ele é responsável por diferentes sistemas de coordenadas e eu precisava pesquisar em duas camadas de máscara, assim também lida com isso. Mais ainda, eu queria poder mascarar as linhas dentro dos polígonos ou as linhas fora dos polígonos.
Este exercício me mostrou que o QGIS não gosta muito de trabalhar com grandes conjuntos de dados e esse algoritmo com o QGIS travando no meu caminho com muita frequência. Suspeito que o renderizador QGIS não gere renderizadores de geometria que consomem tempo.
fonte