Linhas retas do rótulo para o recurso no QGIS?

11

O que estou tentando fazer é rotular uma série de recursos de ponto, mas devido à densidade dos recursos de ponto, terei que afastar os rótulos dos recursos de ponto. Quero então usar uma linha reta simples (não uma seta) para mostrar qual rótulo se refere a qual ponto.

Eu usei o plugin "Easy Custom Labels" para gerar os rótulos e movê-los para onde eu os quero. Mas o que não consigo fazer é criar uma linha reta fina e simples entre a ponta e a mesa.

O melhor que consegui foi alterar o "tipo de camada de símbolo" (camada Etiquetas> Propriedades> Estilo) para "seta", desmarcar "setas curvas" e desmarcar "repetir seta em cada segmento". E então faça o comprimento e a espessura da cabeça 0 e faça a “largura da flecha” e a “largura da flecha no início” da maneira mais possível. Mas isso ainda cria uma linha grossa. Veja a imagem A.

Eu tentei definir o "tipo de símbolo mais tarde" para "linha simples", mas isso resulta em linhas com dobras / vértices / cantos. Veja a imagem B.

Idealmente, gostaria de linhas retas entre os rótulos e o recurso (como na imagem A) com largura semelhante à da imagem B.

Exemplos de dois tipos de rotulagem

QGIS_Noob
fonte

Respostas:

11

Você pode usar uma expressão para criar linha entre etiqueta e geometria

insira a descrição da imagem aqui

Expressão:

CASE 
 WHEN (label_x IS NOT NULL AND label_y IS NOT NULL) THEN
  make_line(centroid($geometry),make_point(label_x -2,label_y), make_point(label_x ,label_y))
ELSE
  NULL
END

E isso deve resultar:

insira a descrição da imagem aqui

Carlos López Quintanilla
fonte
Apenas uma nota lateral, se os rótulos forem movidos manualmente usando a barra de ferramentas de propriedades de rotulagem e a posição for armazenada no projeto, as variáveis ​​label_x, y mudam para os campos chamados "auxiliarry_storage_labeling_positionx" e "auxiliarry_storage_labeling_positiony".
Gabriel C.
11
Colocar o seu ponto médio 2 unidades a oeste, como você faz aqui, make_point(label_x -2,label_y)fará com que os rótulos na costa oeste pareçam engraçados. Além disso, trabalhar em uma escala diferente tornará isso inútil. Seria melhor definir esse ponto em relação à distância da etiqueta e à posição relativa do centróide.
Albert
2

A resposta de Carlos faz um líder alinhado horizontalmente no final da etiqueta, embora apenas um ponto a menos no gerador de geometria dê linhas retas. No meu exemplo, movi os rótulos manualmente usando a barra de ferramentas de rótulos no QGIS 3.0.3. Observe que a técnica pode ser encontrada na pergunta 232709 .

As únicas alterações que eu precisava fazer são os valores x, y na minha expressão:

CASE
   WHEN ("auxiliary_storage_labeling_positionx" IS NOT NULL AND "auxiliary_storage_labeling_positiony" IS NOT NULL) THEN
        make_line(centroid($geometry),make_point("auxiliary_storage_labeling_positionx","auxiliary_storage_labeling_positiony"))
   ELSE
      NULL
END

Quanto às próprias linhas de líderes, a árvore de simbologia é assim:

  • Preencher
    • Gerador de geometria
      • Linha
        • Linha do marcador
          • Marcador
            • Marcador simples
          • Linha simples

Para garantir que os líderes terminem no centro da etiqueta, basta editar os valores no alinhamento definido pelos dados das etiquetas como 'Centro' para horizontal e 'Metade' para vertical. Para estilizar a linha com o que você precisar, use a linha simples aninhada na linha do marcador.

Gabriel C.
fonte