Mais

Como definir a posição do rótulo em torno de um ponto no qgis de acordo com um campo

Como definir a posição do rótulo em torno de um ponto no qgis de acordo com um campo


Estou trabalhando em umarquivo de formaemqgis(2.8.4 Wien para Mac). Neste arquivo tenho vários pontos com cerca de dez campos. Estou interessado em usar dois desses campos para definir a posição do rótulo e a rotação do símbolo do ponto: um campo é o eu ia do ponto, o outro é o rotação.

Eu represento o símbolo do ponto como um triângulo com uma pequena linha e o giro de acordo com o rotação campo (não tenho nenhum problema com isso). O principal problema é colocar o rótulo do ID ao redor do ponto em uma posição específica, de acordo com o rotação, mas sem girá-lo.

O campo de rotação contém, obviamente, valores de 0 a 359.

Na imagem abaixo, há uma amostra do que desejo obter:

Eu acho que é possível usar uma função de deslocamento com sinusite e cosinus, mas os botões correspondentes estão desabilitados na interface qgis.

Existe uma maneira de fazer isso? Infelizmente, esse é um requisito do trabalho que estou fazendo.


Você pode definir o modo de posicionamento do rótulo como "Deslocamento do ponto" e, em seguida, definir uma substituição definida pelos dados no campo "Deslocamento X, Y". Isso exigiria uma expressão como:

to_string ("distance" * cos ("angle_radians")) || ',' || to_string ("distance" * sin ("angle_radians"))

Onde "distância" é a sua distância do campo do ponto e "rádios dos ângulos" o campo que contém o ângulo do ponto em radianos.

Observe que para versões anteriores do QGIS, "tostring" deve ser usado em vez de "to_string".


Além da resposta vinculada de @MaryBeth no comentário, para o QGIS 2.12.1 (lyon) agora há uma regra definida de dados para "quadrante" ou a posição do rótulo.

Na caixa de diálogo de rotulagem, selecione a guia "Posicionamento" e, em seguida, verifique o marcador de rádio para "Ponto ao redor".

Em seguida, existe a opção de definir uma expressão para o "Quadrante".

Se você verificar a descrição, ela informa o que espera como entrada.

Nesse caso, ele espera um int (um inteiro).

Substituição de dados definidos Ativo: não (ctrl | alterna com o botão direito) Entrada esperada: int [0 = Acima à esquerda | 1 = Acima | 2 = Acima à direita | 3 = Esquerda | 4 = Acima | 5 = Direita | 6 = Abaixo da esquerda | 7 = Abaixo | 8 = Abaixo da direita] Tipos de entrada válidos: string, int, double Definição atual: indefinido

Você pode ver onde cada número representa um lugar no quadrante.

Portanto, você só precisa configurar a expressão do tipo CASE ELSE aqui que examina os valores de rotação em seu campo de rotação.

por exemplo,

CASO WHEN "rotação" = 45 THEN 2 WHEN "rotação" = 90 THEN 6 ELSE 0 END

SuaQUANDOdeclaração pode usar intervalos também,

QUANDO "rotação"> = 0 AND "rotação" <= 50 ENTÃO ...

Como SaultDon descreveu, você pode usar uma expressão para o quadrante:

caso quando redondo (rotação / 360 * 8 + 1)% 8 = 0 então 1 quando redondo (rotação / 360 * 8 + 1)% 8 = 1 então 2 quando redondo (rotação / 360 * 8 + 1)% 8 = 2 então 5 quando redondo (rotação / 360 * 8 + 1)% 8 = 3 então 8 quando redondo (rotação / 360 * 8 + 1)% 8 = 4 então 7 quando redondo (rotação / 360 * 8 + 1)% 8 = 5 depois 6 quando redondo (rotação / 360 * 8 + 1)% 8 = 6 então 3 quando redondo (rotação / 360 * 8 + 1)% 8 = 7 então 0 fim

Editar: adicionado+1deslocamento, pois parece que você deseja que o rótulo esteja no próximo quadrante no sentido horário.


Assista o vídeo: Criando um mapa temático do zero no QGIS mapa de biomas