Existe uma maneira de adicionar uma etiqueta de "usuário atual" ao compositor de impressão?


11

Existe uma maneira de adicionar uma etiqueta de usuário atual ao compositor de impressão no QGIS.

Eu pensei que poderia haver algo semelhante ao formato $ CURRENT_DATE disponível.

Isso seria em um ambiente Windows.


1
"$ CURRENT_DATE (aaaa-MM-dd)" acabou sendo muito útil e eu o incluí em muitos dos meus modelos de compositor. Existem mais desses comandos disponíveis? Gostaria de mostrar automaticamente o nome do meu projeto, ou um determinado nome de camada, etc.?
SAnderka

Respostas:


8

Atualmente, essa é uma solicitação de recurso não atendida (consulte o recurso 1385 ).

Você pode adicionar suas idéias para novos 'tokens' (ou 'campos', conforme eles são identificados na solicitação). Lembre-se de incluir opções de formatação recomendados conforme as classes do Qt para o tipo de dados , como tem sido feito com a sintaxe $CURRENT_DATE(yyyy-MM-dd), que é resolvido usando QDate::currentDate().toString( formatText )e QDate classe string formatação .


No entanto, existem soluções melhores do que tentar implementar todos os tipos de tokens que os usuários possam precisar ou solicitar (que pode ser uma lista que se expande).

Atualmente, existem pelo menos dois meios para implementar uma solução mais robusta:

A) O texto da etiqueta é opcionalmente gerado usando o Editor de Expressão QGIS

Atualmente, este é o método usado no mecanismo de rotulagem avançado ...

insira a descrição da imagem aqui

Como os rótulos do Composer não são relativos à fonte de dados de uma camada de mapa, a seção Fields and Valuesprecisa ser substituída e preenchida com tokens de impressão mais apropriados, como nome do projeto, título, projeção, usuário etc. (as funções de data já estão no mestre ramificações). Felizmente, tem havido trabalho dos desenvolvedores para tornar relativamente "fácil" adicionar novas seções de expressão, embora ainda seja necessário algum trabalho. Também seria necessário trabalho adicional para acomodar novos tokens.

B) O texto do rótulo (ou tokens) é opcionalmente o resultado do snippet (s) do Python

Embora não seja tão amigável quanto a solução Editor de Expressão, uma vez que requer uma compreensão do Python, a implementação de um desses recursos possivelmente exigiria apenas um único esforço de desenvolvimento. Então, qualquer aspecto textual de um projeto QGIS, incluindo seus vários itens do Composer , disponíveis via API do PyQGIS (por exemplo, Python Console), pode ser acessado, formatado e enviado para o texto.

Os trechos do Python podem ser agrupados em tokens individuais e incorporados no texto atual da caixa de edição de texto ou contidos em uma caixa de edição de texto separada na GUI, ativada pela caixa de seleção. Por motivos de segurança, o código provavelmente não seria executado automaticamente no lançamento do Composer (poderia ser uma opção para permitir sempre).

A abordagem de caixa de edição de texto separada permitiria a validação de código Python e a codificação de funções Python nomeadas especificamente, por exemplo, o seguinte snippet:

import getpass
from qgis.core import *

def pytoken_user():
    return getpass.getuser()

def pytoken_title():
    return QgsProject.instance().title()

substituiria qualquer número de tokens no texto nomeados $pytoken_userou $pytoken_title.


Ambas as soluções acima são consideravelmente mais extensíveis do que a implementação de tokens individuais em linha no código fonte do QGIS. Também pode haver outras ou melhores soluções.

O Dr. Hugentobler recentemente reformulou o Compositor de Impressão na filial principal do QGIS, portanto agora é o momento ideal para solicitar esses recursos de rotulagem para a próxima versão do QGIS . Vou adicionar uma solicitação de recurso para esses dois o mais rápido possível.



Alguma dessas soluções transformou-a em uma versão de lançamento do QGIS? Ou isso ainda está em desenvolvimento? Graças
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.