Adicionando sistema de coordenadas ao layout no compositor QGIS?

10

Gostaria de saber se existe uma maneira de adicionar um campo de sistema de coordenadas dinâmico a um layout do compositor QGIS.

Posso usar uma expressão para adicionar muitos itens, como nome do documento, caminho do arquivo, etc., mas não consigo descobrir como adicionar o sistema de coordenadas?

Ben
fonte
11
Se você estiver usando o QGIS 3.x agora, convém mover a marca de seleção de aceitação verde para a resposta do QGIS 3.x.
PolyGeo

Respostas:

7

Esta resposta foi fornecida e aceita antes do lançamento do QGIS 3.0.

Para obter o ID da autoridade (por exemplo, " EPSG: 4326 "):

  • Você pode simplesmente usar a expressão [% layer_property( 'your_layer_name_or_id', 'crs' ) %]

Se você deseja obter a descrição textual do CRS (por exemplo, " WGS84 "):

  • AFAIK, você deve criar uma função personalizada. Para fazer isso, vá para "Inserir uma expressão" e digite a seguinte função na guia Editor de Funções.

Código:

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def get_crs(layer_name, feature, parent):
    return QgsMapLayerRegistry.instance().mapLayersByName(layer_name)[0].crs().description()
  • Clique em "Carregar"
  • Na guia Expressão, digite get_crs( 'your_layer_name' )
thibautg
fonte
9

Resposta para QGIS 3.x:

Para uma solução mais fácil sem python, veja o comentário da indústria abaixo

Adicione este script ao seu editor de funções personalizado:

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def get_crs(layer_name, feature, parent):
    return QgsProject.instance().mapLayersByName(layer_name)[0].crs().description()

insira a descrição da imagem aqui

e, em seguida, obtenha o nome crs no editor de expressão com

get_crs(@layer_name)

insira a descrição da imagem aqui

Para o nome do CRS do seu projeto (por exemplo, projeção no layout de impressão), use este:

Adicione este script ao seu editor de funções personalizado:

from qgis.core import *
from qgis.gui import *

@qgsfunction(args='auto', group='Custom')
def get_projectcrs(project_crs, feature, parent):
    return QgsCoordinateReferenceSystem(project_crs).description()

e, em seguida, obtenha o nome crs no editor de expressão com:

 get_projectcrs(@project_crs) 

Obviamente, você também pode digitar, por exemplo, 'EPSG:4326'manualmente ou usar outra função @project_crsque não retorne um código EPSG.

Notas:

Consulte também https://qgis.org/api/api_break.html para obter mais informações sobre alterações no qgis 3.x

MrXsquared
fonte
Obrigado @MrXsquared! Eu tentei anteriormente exatamente esse código, mas não usei o @ ao passar o nome da camada. No entanto, ainda não consigo fazer isso funcionar. Quando adiciono um mapa na exibição de layout e insiro um rótulo com a função mencionada acima, a 'Visualização da saída' mostra apenas NULL e nenhuma informação é adicionada ao rótulo. Eu verifiquei tudo várias vezes, o mapa tem um nome (e ID) e um CRS, mas nada aparece. Não deve depender do CRS específico usado, certo?
TinkerPhil
Obviamente, isso não funcionará na exibição de layout, pois se refere a uma camada específica. Editei minha resposta e adicionei uma função para retornar os CRs usados ​​do seu projeto . Você pode usar isso no layout de impressão para exibir o nome da projeção usada.
MrXsquared
2
Para sua resposta A, não é necessário ter uma expressão python. Você pode fazer `layer_property (@layer_name, 'crs_description')`.
Etrimaille #