Добавление системы координат в макет в QGIS composer?

10

Я хотел бы знать, есть ли способ добавить поле динамической системы координат в компоновщик компоновщика QGIS.

Я могу использовать выражение для добавления многих элементов, таких как имя документа, путь к файлу и т. Д., Но я не могу понять, как добавить систему координат?

Бен
источник
1
Если вы используете QGIS 3.x сейчас, вы можете переместить зеленую галочку принять в ответ QGIS 3.x.
PolyGeo

Ответы:

7

Этот ответ был предоставлен и принят до выпуска QGIS 3.0.

Чтобы получить идентификатор авторизации (т. Е. « EPSG: 4326 »):

  • Вы можете просто использовать выражение [% layer_property( 'your_layer_name_or_id', 'crs' ) %]

Если вы хотите получить текстовое описание CRS (например, « WGS84 »):

  • AFAIK, вы должны создать пользовательскую функцию. Для этого перейдите в «Вставить выражение» и введите следующую функцию на вкладке «Редактор функций».

Код:

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()
  • Нажмите на «Загрузить»
  • На вкладке «Выражение» введите get_crs( 'your_layer_name' )
thibautg
источник
9

Ответ для QGIS 3.x:

Для более простого решения без Python см. Комментарий от gustry ниже

Добавьте этот скрипт в ваш пользовательский редактор функций:

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

введите описание изображения здесь

а затем получить имя crs в редакторе выражений с

get_crs(@layer_name)

введите описание изображения здесь

Для имени CRS вашего проекта (например, проекция в макете печати) используйте это:

Добавьте этот скрипт в ваш пользовательский редактор функций:

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

и затем получите имя crs в редакторе выражений с помощью:

 get_projectcrs(@project_crs) 

Конечно, вы также можете ввести, например, 'EPSG:4326'вручную или использовать другую функцию, @project_crsкоторая не возвращает EPSG-код.

Ноты:

Также взгляните на https://qgis.org/api/api_break.html для получения дополнительной информации об изменениях в qgis 3.x

MrXsquared
источник
Спасибо @MrXsquared! Ранее я пробовал именно этот код, но не использовал @ при передаче имени слоя. Тем не менее, я до сих пор не могу заставить это работать. Когда я добавляю карту в вид компоновки и вставляю метку с вышеупомянутой функцией, «Предварительный просмотр» просто показывает NULL, и никакая информация не добавляется в метку. Я проверил все несколько раз, у карты есть имя (и идентификатор) и CRS, но ничего не появляется. Это не должно зависеть от конкретного используемого CRS, верно?
TinkerPhil
Конечно, это не будет работать в режиме компоновки, поскольку это относится к определенному слою. Я отредактировал свой ответ и добавил функцию для возврата использованных crs вашего проекта . Вы можете использовать это в макете печати, чтобы отобразить название используемой проекции.
MrXsquared
2
Для вашего ответа A, не нужно иметь выражение Python. Вы можете сделать `layer_property (@layer_name, 'crs_description')`.
etrimaille