Mostrar Automáticamente O SRC Do Projecto Numa Etiqueta Do Compositor De Impressão

27 de Setembro, 2015

Este artigo mostra como podemos mostrar automaticamente o sistema de coordenadas do projecto numa etiqueta da compositor de impressão do QGIS.

O problema

No QGIS por vezes precisamos de exportar mapas que mostrem o sistema de coordenadas do projecto.

Actualmente o QGIS não tem uma função que permita inserir no compositor de impressão o SRC do projecto. Nestas situações recorre-se à introdução manual do sistema de coordenadas numa etiqueta, mas este método por vezes não é prático, pois no caso de se usarem templates de impressão, esta etiqueta deverá ser alterada manualmente caso o SRC do projecto mude.

A solução

Com o seguinte código é criada uma função que permite a actualização automática do SRC numa etiqueta do compositor de impressão. O código pode ser executado na consola python do QGIS ou pode ser gravado num ficheiro .py a seguir colocado na pasta “.qgis2” do QGIS.

1
2
crs=iface.mapCanvas().mapSettings().destinationCrs()
print crs.authid() +' - '+ crs.description()

O código da função pode ser introduzido no separador “Editor de Funções” da calculadora de campos do QGIS (que permite atribuir um nome à função). Em alternativa copie o ficheiro crs.py na pasta /.qgis2/python/expressions - reinicie o QGIS, e a nova função estará num novo grupo “CRS” da calculadora de campos.

Editor de Funções
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from qgis.utils import iface
from qgis.core import *
from qgis.gui import *

@qgsfunction(args=0, group='CRS')
def crslabel(value1,feature, parent):
    """
    Returns the project CRS 
    
    <h4>Syntax</h4>
    <p>crslabel(<i>value</i>)</p>
    <h4>Arguments</h4>
    <p><i>none</i> &rarr; 0</p>
    <h4>Example</h4>
    <p><!-- Show example of function.-->
    crslabel &rarr; EPSG:4326 - WGS84</p>
    <h4>Note:</h4>
    <p>This function only produces the EPSG code and the description.
    </p>
    """
    crs=iface.mapCanvas().mapSettings().destinationCrs()
    return crs.authid() +' - '+ crs.description()

Função aplicada no compositor de mapas

Veja aqui a função em acção:

Problemas encontrados

Se o projecto for configurado de forma a usar um SRC personalizado e este não tiver um nome associado então na etiquetas serão mostrados os parametros PROJ4 do SRC. Além disso em vez de aparecer “ESPG:” irá aparece “USER:”. A possível solução poderá passar por remover o crs.auth.id() da função e deixar apenas a descrição do sistema de coordenadas.

Notas Futuras

Pretendo enviar esta função para o projecto QGIS de forma a ser integrada no conjunto de expressões disponíveis por defeito. Gostava ainda de adicionar outras funções que permitam adicionar informações para além do CRS. Eventualmente este tipo de funcionalidade poderá se tornar um botão/painel dentro do compositor impressão.

Considerações Finais e Agradecimentos

Este código foi escrito durante o Encontro de Programadores QGIS realizado em Nødebo, Dinamarca. O espírito de equipa e a capacidade de entreajuda são coisas fortes nesta comunidade. Quero agradecer ao Raymond Nijssen, Nyall Dawson e Matthias Khun pelas orientações e dicas que me deram durante o encontro de programadores.



Categorias: Compositor de Mapas, Mapas, SRC


Blog desenvolvido com Octopress