Com o QGIS 2.12.2, como posso configurar a etiquetagem de camadas para evitar a colocação de etiquetas onde já existem recursos de outra camada?
Por exemplo, se eu tiver uma camada de polilinha de córrego / rio que contenha " linhas de centro" do lago e colocar uma camada de polígono de "lago" acima dela na ordem do desenho, não quero que a camada de rio coloque um rótulo dentro do lago . Em vez disso, prefiro rotular o rio fora do lago (conforme necessário). Dessa forma, posso colocar rótulos da camada de lagos e não encontro colisões de rótulos.
Aqui está um exemplo em que (intencionalmente coloquei as linhas no topo para fins visuais) o que espero alcançar é que nenhum rótulo de linha central do rio seja mostrado dentro do polígono do lago:
Respostas:
A etiquetagem automatizada é um problema muito difícil, mas a geometria dos recursos não é tão ruim.
Mesmo que você consiga que a veiculação funcione adequadamente na maior parte do tempo, é provável que haja exceções. Alguns deles você notará e poderá resolver. Outros que você não notará ao criar um mapa grande ou conjunto de peças, porque você não pode derramar cada centímetro do mapa em uma variedade de escalas. Quase sempre, você tem vontade de mover manualmente algumas etiquetas colocadas automaticamente, de uma perspectiva cartográfica.
Como sugeri no meu comentário, facilitaria o problema para o mecanismo de rotulagem. Nesse caso, eu faria isso definindo meus rios como uma visualização de tabela *, com as geometrias dos rios cortadas para respeitar os limites do lago. Dessa forma, não há características do rio dentro dos lagos a serem rotuladas, nem colisões de rótulos.
* Assumo o uso de um RDBMS aqui, como o PostgreSQL / PostGIS, por conveniência e a capacidade de atualizar apenas sua fonte de dados autorizada e fazer com que a visualização funcione sem a sua intervenção. Mas você também pode trabalhar antecipadamente com arquivos estáticos para recortar e excluir recursos, mas eu não recomendo isso se você planeja revisitar um mapa.
Exemplo:
Começando com dois shapefiles (podem ser tabelas de banco de dados) de rios e lagos, com rios cruzando lagos e causando problemas de rotulagem difíceis de resolver de maneira completa e confiável:
Traga-os para o Postgres, se necessário, com o shp2pgsql :
shp2pgsql -s 4326 /data/lake public.lakes | psql -d mydb
shp2pgsql -s 4326 /data/river public.rivers | psql -d mydb
Em seguida, defina uma visualização com ST_Difference :
Adicione a visualização ao seu layout:
Embora o problema no meu exemplo seja deliberadamente fabricado, os estilos nas duas camadas do rio (original e vista) são os mesmos e são colocados no topo do lago na ordem do desenho. Ao atualizar as geometrias de lagos ou rios, você não precisará fazer muito mais do que atualizar a renderização.
fonte
No QGIS> = 2.12, você pode definir a camada de polígono "lago" como um obstáculo ao rótulo. Isso é feito através das propriedades da camada "lago", na seção "Etiquetas". Altere a caixa de combinação na parte superior de " Sem etiquetas " para " Desencorajar outras etiquetas de cobrir os recursos desta camada ".
fonte
Acho a rotulagem em geral bastante difícil, pelo menos para gerar etiquetas que agradam os sentidos do meu cartógrafo. Embora o recurso de rotulagem automática funcione bem 80% das vezes, há casos como o problema de rotulagem de rios / lagos em que não gera rotulagem legal. A etiquetagem automática costuma estar ligada à geometria do recurso, por exemplo, quantas peças estão em uma linha, de modo que, a princípio, todas as peças estejam sendo etiquetadas. Obviamente, o QGIS tem meios de evitar rotulagem repetida, o que também depende da escala da visualização atual do mapa.
De qualquer forma, minha dica não é uma solução rápida. Costumo criar uma camada especializada apenas para rotular, para que meus rótulos sejam mais facilmente controlados. E muitas vezes a geometria dos recursos para representação cartográfica pode colidir com uma boa geometria para rotulagem. Então, eu proporia a criação de uma nova camada em que os córregos não cruzem os lagos, para que você possa contornar o problema completamente. Ter uma camada de rotulagem extra também pode ajudar a evitar problemas onde a direção da rotulagem não está na direção pretendida, porque está ligada à forma como a geometria foi criada.
Bem, temo que minha dica não seja o que você esperava, mas espero que minha alternativa se aproxime da minha ajuda.
fonte
existe um plug-in chamado " Máscara " que pode ser usado para filtrar rótulos com base em polígonos.
Conforme mencionado no meu comentário anterior, no entanto, seria muito mais fácil se você pudesse dividir suas linhas no cruzamento com os lagos (veja métodos diferentes aqui ). Em seguida, você pode definir uma etiqueta de tamanho zero para os segmentos que estão dentro dos lagos ("Camada"> "Rotulagem"> "Configurações definidas por dados"> "Tamanho" e selecione a coluna onde você armazena o tamanho da etiqueta). A divisão mantém a maioria das propriedades da sua rede fluvial e é reversível com a dissolução, para que você possa continuar trabalhando com uma única camada (armazene o comprimento total em uma tabela de atributos específica, se necessário).
fonte