Ajout d'un système de coordonnées à la mise en page dans QGIS composer?

10

Je voudrais savoir s'il existe un moyen d'ajouter un champ de système de coordonnées dynamiques dans une disposition de composeur QGIS.

Je peux utiliser une expression pour ajouter de nombreux éléments tels que le nom du document, le chemin du fichier, etc. mais je ne peux pas; t semble-t-il comprendre comment ajouter le système de coordonnées?

Ben
la source
1
Si vous utilisez QGIS 3.x maintenant, vous pouvez déplacer votre coche verte d'acceptation sur la réponse QGIS 3.x.
PolyGeo

Réponses:

7

Cette réponse a été fournie et acceptée avant la sortie de QGIS 3.0.

Pour obtenir l'ID d'autorité (c'est-à-dire " EPSG: 4326 "):

  • Vous pouvez simplement utiliser l'expression [% layer_property( 'your_layer_name_or_id', 'crs' ) %]

Si vous souhaitez obtenir la description textuelle du CRS (c'est-à-dire " WGS84 "):

  • AFAIK, vous devez créer une fonction personnalisée. Pour ce faire, accédez à "Insérer une expression" et tapez la fonction suivante dans l'onglet Editeur de fonctions.

Code:

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()
  • Cliquez sur "Charger"
  • Dans l'onglet Expression, saisissez get_crs( 'your_layer_name' )
thibautg
la source
9

Réponse pour QGIS 3.x:

Pour une solution plus simple sans python, voir le commentaire de gustry ci-dessous

Ajoutez ce script à votre éditeur de fonction personnalisé:

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()

entrez la description de l'image ici

puis obtenez le nom crs dans l'éditeur d'expression avec

get_crs(@layer_name)

entrez la description de l'image ici

Pour le nom CRS de votre projet (par exemple projection dans votre mise en page d'impression), utilisez ceci:

Ajoutez ce script à votre éditeur de fonction personnalisé:

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()

puis obtenez le nom crs dans l'éditeur d'expression avec:

 get_projectcrs(@project_crs) 

Bien sûr, vous pouvez également taper par exemple 'EPSG:4326'manuellement ou utiliser une autre fonction que celle @project_crsqui renvoie un code EPSG.

Remarques:

Jetez également un œil à https://qgis.org/api/api_break.html pour plus d'informations sur les modifications de qgis 3.x

MrXsquared
la source
Merci @MrXsquared! J'ai précédemment essayé exactement ce code, mais je n'ai pas utilisé le @ lors du passage du nom de la couche. Cependant, je n'arrive toujours pas à faire fonctionner cela. Lorsque j'ajoute une carte dans la présentation et que j'insère une étiquette avec la fonction susmentionnée, l'aperçu de sortie affiche simplement NULL et aucune information n'est ajoutée dans l'étiquette. J'ai tout vérifié plusieurs fois, la carte a un nom (et un identifiant) et un CRS mais rien ne s'affiche. Cela ne devrait pas dépendre du CRS spécifique utilisé, non?
TinkerPhil
Bien sûr, cela ne fonctionnera pas dans la présentation, car cela fait référence à un calque spécifique. J'ai édité ma réponse et ajouté une fonction pour retourner les crs utilisés de votre projet . Vous pouvez l'utiliser dans votre mise en page d'impression pour afficher le nom de la projection utilisée.
MrXsquared
2
Pour votre réponse A, pas besoin d'avoir une expression python. Vous pouvez faire `layer_property (@layer_name, 'crs_description')`.
etrimaille