Gostaria de simbolizar um polígono sem convertê-los em uma linha. Eu tenho um recurso de polígono (tracejado e delimitado pela linha vermelha) que coincide na parte superior e inferior da linha de costa (linha azul). Gostaria de simbolizar o contorno de um polígono apenas nos dois lados e gostaria de eliminar a cor vermelha na parte superior e inferior.
Eu gostaria de ver o resultado final assim.
Respostas:
Geometry generator
Lutei um pouco com o @GSienko. Para peça de interseção, você também pode usar a função embutidaaggregate
. Também usei asegment_to_lines
função que converte polígonos em linhas.ou
Se você tiver algum polígono "não relacionado" às linhas, poderá adicionar uma
if
condição para a interseção. Se as camadas estiverem em interseção, a diferença será aplicada à simbologia; caso contrário, toda a geometria será aplicada.edit : O uso do gerador de linha dessa maneira tem um ponto fraco - você precisa lidar com o símbolo da legenda, porque ele renderiza a linha através do polígono (não como uma borda). No entanto, você ainda pode duplicar a camada, definir preenchimento simples e usá-lo para legenda.
fonte
Tente usar o plugin refFunction no gerador de geometria.
Suposição. 2 camadas - uma linha como linha e polígonos como polígono.
Estilo polígono assim:
geomintersect fará uma consulta espacial entre a camada de polígono e a linha, e retornará a geometria de interseção de duas delas, no nosso caso, duas bordas de polígonos. O próximo passo é fazer a diferença com a borda do polígono. Não sei se você terá orifícios dentro ou não, então exterior_ring () retornará apenas a borda externa.
Resultado final:
A limitação - geomintersect verificará a interseção apenas para um polígono. Eu gerencio essa limitação criando uma camada de polígonos em um grande multipolígono, por exemplo, uma camada virtual para o estilo da borda.
fonte
Que tal adicionar uma linha branca sob a linha azul na outra camada, que tenha a mesma largura que a linha vermelha? Se você colocar a linha azul acima da camada de polígono, a linha branca obscurecerá a linha vermelha.
Obviamente, isso pressupõe que você tenha um plano de fundo branco como no seu exemplo, e que esteja bem com algumas das crosshashes também sendo obscurecidas.
Este é o meu resultado rápido de teste:
Configurações para a linha azul:
fonte
Isenção de responsabilidade: esta resposta não funcionará se você tiver vários polígonos
O que você pode fazer é descobrir quais nós formam os quatro cantos do polígono nos quais você deseja desenhar linhas e, em seguida, use os das funções MAKE_LINE () para desenhar as linhas:
Para encontrar quais nós você precisa:
POINT_N($geometry, 1)
para exibir o primeiro nó como um pontoPara desenhar as linhas:
MAKE_LINE(POINT_N($geometry, *first point*), POINT_N($geometry, *second point*)
Em seguida, basta adicionar uma simbologia de preenchimento de padrão de linha normal abaixo desses dois geradores de geometria
fonte