¿Agregar un sistema de coordenadas al diseño en QGIS composer?

10

Me gustaría saber si hay una manera de agregar un campo de sistema de coordenadas dinámico en un diseño de compositor QGIS.

Puedo usar una expresión para agregar muchos elementos, como el nombre del documento, la ruta del archivo, etc., pero parece que no puedo entender cómo agregar el sistema de coordenadas.

Ben
fuente
1
Si está utilizando QGIS 3.x ahora, es posible que desee mover su marca de verificación verde a la respuesta de QGIS 3.x.
PolyGeo

Respuestas:

7

Esta respuesta se proporcionó y aceptó antes del lanzamiento de QGIS 3.0.

Para obtener el ID de autoridad (es decir, " EPSG: 4326 "):

  • Simplemente puedes usar la expresión [% layer_property( 'your_layer_name_or_id', 'crs' ) %]

Si desea obtener la descripción textual del CRS (es decir, " WGS84 "):

  • AFAIK, debe crear una función personalizada. Para hacer esto, vaya a "Insertar una expresión" y escriba la siguiente función en la pestaña Editor de funciones.

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()
  • Haga clic en "Cargar"
  • En la pestaña Expresión, escriba get_crs( 'your_layer_name' )
thibautg
fuente
9

Respuesta para QGIS 3.x:

Para una solución más fácil sin python, vea el comentario de gustry a continuación

Agregue este script a su editor de funciones 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()

ingrese la descripción de la imagen aquí

y luego obtener el nombre de crs en el editor de expresiones con

get_crs(@layer_name)

ingrese la descripción de la imagen aquí

Para el nombre de CRS de su proyecto (por ejemplo, proyección en su diseño de impresión) use esto:

Agregue este script a su editor de funciones 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()

y luego obtenga el nombre de crs en el editor de expresiones con:

 get_projectcrs(@project_crs) 

Por supuesto, también puede escribir, por ejemplo, 'EPSG:4326'manualmente o utilizar otra función que no sea la @project_crsque devuelve un código EPSG.

Notas:

También eche un vistazo a https://qgis.org/api/api_break.html para obtener más información sobre los cambios en qgis 3.x

MrXsquared
fuente
Gracias @MrXsquared! Anteriormente probé exactamente ese código pero no usé la @ al pasar el nombre de la capa. Sin embargo, todavía no puedo hacer que esto funcione. Cuando agrego un mapa en la vista de diseño e inserto una etiqueta con la función mencionada, la 'Vista previa de salida' solo muestra NULL y no se agrega información en la etiqueta. Revisé todo varias veces, el mapa tiene un nombre (e id) y un CRS pero no aparece nada. No debería depender del CRS específico utilizado, ¿verdad?
TinkerPhil
Por supuesto, esto no funcionará en la vista de diseño, ya que se refiere a una capa específica. Edité mi respuesta y agregué una función para devolver los crs usados ​​de su proyecto . Puede usar esto en su diseño de impresión para mostrar el nombre de la proyección utilizada.
MrXsquared
2
Para su respuesta A, no es necesario tener una expresión de python. Puede hacer `layer_property (@layer_name, 'crs_description')`.
etrimaille