Estou procurando uma solução de rotulagem melhor para meus projetos. Parece ser difícil - mas talvez eu esteja apenas cego?
Meus projetos: construo livros impressos para caminhadas de bicicleta. A escala principal é 1: 75k e há uma escala da cidade de 10k e uma escala geral de 200k. Como gosto de ter uma qualidade "cartográfica" dos canais das etiquetas, toco em cada etiqueta e a movo para a melhor posição. Eu tenho que fazer isso para cada escala única, para que minhas colunas de rotulação para 3 escalas sejam assim ('escala 1' significa 10k 'escala 2' para 75k e 'escala 3' para 200k):
Porém, antes de tentar explicar em detalhes, construo este exemplo-projeto simples, no qual você pode ver e testar minha solução de rotulação (antiga) para três escalas: http://www.map-site.de/tmp/LabelingExample.zip
Bem, está funcionando, mas:
- Você precisa rotular colunas para todas as escalas
- Você precisa de uma camada para todas as escalas
Estou procurando uma solução muito melhor sem camadas duplicadas e toneladas de colunas. Conto com suas mentes criativas!
EDIT: Adicionei este mapa muito denso como exemplos:
Existe apenas uma única posição possível para "St. Paulus Dom" e não é nenhum quadrante:
Cada etiqueta deve ser movida manualmente. Alguns dos rótulos não estão no quadrante.
Respostas:
Devo dizer que o que você está solicitando é um pouco complicado, porque você deseja que a rotulagem seja visível em pequena escala de forma clara e em larga escala (melhor ajuste). Então, a idéia aqui é como colocar o ponto que pode ser visível em diferentes escalas.
Após vários testes, descobri que, em vez de criar várias colunas para cada intervalo de escala e colocar coordenadas para x e y em pontos fixos, você pode criar apenas uma coluna para posições prioritárias para cada ponto para obter a melhor localização, como você pode ver abaixo (I seguiram os locais no seu arquivo):
Então você vai para
Layer propoerties -> Labels -> Placement -> Offset from point
ouAround point
, ambos estão bem, mas eu escolhiOffset from point
.Em
Quadrant
SelecionarData defined override -> Edit
e insira a seguinte fórmula:Aqui
"Priority"
está a localização dos pontos definidos no nome do campoPriority
Você precisa usar o deslocamento para mudar os pontos para obter melhor visibilidade, e eu usei a seguinte fórmula:
Aqui está a saída em diferentes escalas:
Para ver o que cada número [0-8] representa em qual local, dê uma olhada na seguinte imagem:
Você pode controlar a posição dos rótulos adicionando o valor correspondente a cada posição. Infelizmente, você não pode fazê-lo usando a abordagem "clique e mova". Você precisa fazer isso na tabela de atributos.
Atualizar:
Com base em sua exigência de que 9 posições no quadrante não sejam suficientes, descobri que se você selecionar em
Cartography
vez deOffset from point
e selecionar prioridade, como na imagem abaixo, você terá 12 posições prioritárias em vez de 9. Você precisa criar um campo doText
tipo coloque apenas a abreviação que você deseja para a melhor posição 'TL', 'TSL', 'T' ... etc. Além disso, você pode inserir uma distância para evitar que a etiqueta cubra o ponto.fonte
Você pode se livrar das várias camadas usando expressões.
Pelo que pude ver no seu exemplo, a principal diferença entre as camadas são as
Data defined Coordinate X Y
definições que apontam para os diferentes valores de escala x, y.Você pode fazer isso em uma única camada, selecionando as listas suspensas ao lado de X e Y e selecionando editar ..., o que exibirá um construtor de cadeias de expressão.
Para o X, você pode usar algo como
E para Y você pode usar algo como
Isso deve usar os valores de scale1 x, y se a escala do mapa for menor ou igual a 1: 10.000 e a escala 2 x, y se a escala do mapa for menor ou igual a 1: 75.000 e a escala 3 x, y para qualquer coisa acima .
Se você precisar posicionar manualmente para cada escala, não vejo como você pode se afastar das colunas da escala # -x e da escala # -y para cada nível que você definiu.
fonte