Quando os pontos se sobrepõem, existe esta propriedade que permite exibir automaticamente o lote separadamente em torno de onde estão, chamado 'deslocamento de ponto'. Mas não funciona para linhas, mesmo assim parece-me bastante conceitualmente viável para conseguir algo assim:
Eu absolutamente preciso ver as diferentes linhas que, na realidade, estão todas no mesmo lugar (estou trabalhando em redes de telecomunicações). A única maneira que vejo por agora é realmente criar linhas diferentes, como na figura acima, criando erros espaciais.
Estou usando o QGIS 2.14.
qgis
symbology
style
visualisation
qgis-custom-function
GuiOm Clair
fonte
fonte
Respostas:
Proponho uma abordagem que só se repete em um gerador de geometria e em uma função personalizada.
Antes de começar, quero enfatizar que vou focar a atenção na explicação das coisas mínimas a serem feitas para reproduzir o resultado desejado: isso significa que alguns outros parâmetros menores (como tamanhos, larguras etc.) devem ser facilmente ajustados por você para melhor atender às suas necessidades.
Portanto, esta solução funciona tanto para sistemas de referência geográfica quanto projetados: a seguir, assumi o uso de um CRS projetado (ou seja, as unidades de medida são metros), mas você pode alterá-lo de acordo com o seu CRS.
Contexto
Vamos assumir que comece a partir desta camada vetorial de cadeia de linhas que representa os fios (os rótulos representam o número de fios coincidentes):
Solução
Primeiro, vá para
Layer Properties | Style
e escolha oSingle symbol
renderizador.Na
Symbol selector
caixa de diálogo, escolha umGeometry generator
como tipo de camada de símbolo eLinestring / MultiLinestring
como tipo de geometria. Em seguida, clique naFunction Editor
guia:Em seguida, clique
New file
e digitedraw_wires
como o nome da nova função:Você verá que uma nova função foi criada e está listada no lado esquerdo da caixa de diálogo. Agora, clique no nome da função e substitua o padrão
@qgsfunction
pelo seguinte código (não esqueça de adicionar todas as bibliotecas anexadas aqui):Depois de fazer isso, clique no
Load
botão e você poderá ver a função noCustom
menu daExpression
caixa de diálogo.Agora, digite esta expressão (veja a imagem abaixo como referência):
Você acabou de executar uma função que está dizendo, de uma maneira imaginária:
A única coisa que você precisa alterar é o valor dos dois primeiros parâmetros que desejar, mas obviamente de uma maneira razoável (deixe os outros parâmetros de função conforme fornecido).
Por fim, clique no
Apply
botão para aplicar as alterações.Você verá algo assim:
como esperado.
EDITAR
De acordo com uma solicitação específica apresentada pelo OP em um comentário:
Editei um pouco o código. A seguinte função deve retornar o resultado esperado:
fonte
layer=iface.activeLayer()
e entãoprint layer.wkbType()
. Clique emRun
: qual é o valor do número impresso?