Додавання системи координат до компонування у композиторі QGIS?


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

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! Я раніше спробував саме цей код, але не використовував @ при передачі назви шару. Однак я все ще не можу змусити це працювати. Коли я додаю карту у подання макета і вставляю мітку з вищезгаданою функцією, "Попередній перегляд вихідних даних" просто показує NULL, а інформація не додається. Я кілька разів перевіряв все, на карті є назва (і id) та CRS, але нічого не відображається. Це не повинно залежати від конкретних використовуваних CRS, правда?
TinkerPhil

Звичайно, це не буде працювати у вигляді макета, оскільки це стосується конкретного шару. Я відредагував свою відповідь і додав функцію повернення використаних файлів вашого проекту . Ви можете використовувати це у макеті друку, щоб відобразити назву використовуваної проекції.
MrXsquared

2
Для вашої відповіді А, не потрібно мати вираження пітона. Ви можете виконати `layer_property (@layer_name, 'crs_description')`.
etrimaille
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.