Rótulos com guias no QGIS

Essa dica é pra você que teve necessidade de colocar rótulos em feições com geometrias muito próximas e precisa mover os rótulos adicionando uma linha guia. Eu tive essa necessidade recentemente no trabalho e encontrei essa dica fantástica do Alexandre Neto, do blog SIG sem grilhetas.

O Alexandre usou uma view no Postgis para automatizar a criação de guias para os rótulos que são movidos de sua posição original. Veja o resultado abaixo:

No meu caso eu consegui resolver meu problema com os rótulo usando essa solução QGIS + Postgis. Mas essa solução, ao meu ver, esbarra em alguns problemas.

O principal deles é que nem todo mundo usa o Postgis, ou outro banco de dados espacial suportado pelo QGIS como o SpatiaLite, MSSQL Spatial ou Oracle Spatial. Tudo bem que depois da versão 2.14 você poderia adotar o recurso Virtual layers e fazer isso sem precisar instalar um desses banco de dados na sua máquina.

Mas convenhamos que isso limita o uso dessa solução para uma grande parcela dos usuários que não manjam dos paranauês de banco de dados e linguagem SQL.

O outro problema é estético e operacional, leia-se frescuragem desse que vós fala, que é a necessidade da criação de uma nova camada para renderizar as guias dos rótulos. Ou seja uma camada a mais no meio de trocentas outras que temos que lidar no dia a dia.

No exemplo acima a camada labels_leaders, é quem renderiza a guia que conecta o rótulo ao centroide da feição.

Criando rótulos com guias no QGIS

Pois bem, quebrando um pouco a cabeça podemos chegar num resultado idêntico ao do Alexandre. Mas no nosso caso sem a necessidade de um banco de dados espacial e nem daquela camada extra para renderizar a guia. Iremos usar apenas a tabela de atributos e a função de geração de geometria para resolver nosso problema. Lembrando que para isso você vai precisar do QGIS 2.14 ou superior, uma vez que o Gerador de Geometrias não está presente nas versões anteriores. 

Veja o passo a passo no vídeo abaixo:

Expressões para a criação das guias no QGIS

Rótulo ao centróide com curva de 90º

make_line (
make_point( "X" , "Y" ), -- posição do rótulo
make_point( "X", y(centroid( $geometry ))), -- posição do ponto intermediário
make_point( x(centroid( $geometry )), y(centroid( $geometry ))) --posição do centroide da geometria
)

Rótulo ao centróide

make_line (
make_point( "X" , "Y" ), -- posição do rótulo
make_point( x(centroid( $geometry )), y(centroid( $geometry ))) --posição do centroide da geometria
)

Rótulo ao ponto mais próximo

make_line (
make_point( "X" , "Y" ), -- posição do rótulo
closest_point( $geometry, make_point( "X" , "Y" ) ) --posição do ponto mais próximo
)

Narcélio de Sá

Geógrafo, blogueiro, Nerd-GeoGeek. Integrante da comunidade QGIS Brasil e apaixonado por Open-Source & Open-Data.

  • Excelentes dicas! Essa é uma das etapas mais dramáticas na construção 🚧 cartográfica pq exige uma visão desprovida de apego q permita organizar o mapa legivelmente. Parabéns, tenho certeza q ajudará muito.

  • Naharavan Luiz Ferreira

    ¨Parabéns! Ficou ótimo esse vídeo, estava precisando mesmo de algo assim…