Menambahkan sistem koordinat ke tata letak di komposer QGIS?

10

Saya ingin tahu apakah ada cara untuk menambahkan bidang sistem koordinat dinamis ke dalam tata letak komposer QGIS.

Saya dapat menggunakan ekspresi untuk menambahkan banyak item seperti nama dokumen, path file, dll, tetapi saya tidak bisa; t mencari cara untuk menambahkan sistem koordinat?

Ben
sumber
1
Jika Anda menggunakan QGIS 3.x sekarang, Anda mungkin ingin memindahkan tanda centang terima hijau Anda ke jawaban QGIS 3.x.
PolyGeo

Jawaban:

7

Jawaban ini diberikan dan diterima sebelum rilis QGIS 3.0.

Untuk mendapatkan ID Otoritas (yaitu " EPSG: 4326 "):

  • Anda cukup menggunakan ekspresi [% layer_property( 'your_layer_name_or_id', 'crs' ) %]

Jika Anda ingin mendapatkan deskripsi tekstual dari CRS (yaitu " WGS84 "):

  • AFAIK, Anda harus membuat fungsi khusus. Untuk melakukan ini, pergi ke "Sisipkan ekspresi", dan ketik fungsi berikut di tab Function Editor.

Kode:

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()
  • Klik pada "Muat"
  • Di tab Ekspresi, ketik get_crs( 'your_layer_name' )
thibautg
sumber
9

Jawaban untuk QGIS 3.x:

Untuk solusi yang lebih mudah tanpa python lihat komentar oleh gustry di bawah ini

Tambahkan skrip ini ke petugas fungsi khusus Anda:

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

masukkan deskripsi gambar di sini

dan kemudian dapatkan nama crs dalam editor ekspresi dengan

get_crs(@layer_name)

masukkan deskripsi gambar di sini

Untuk nama CRS proyek Anda (misalnya proyeksi dalam tata letak cetak Anda) gunakan ini:

Tambahkan skrip ini ke petugas fungsi khusus Anda:

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

lalu dapatkan nama crs dalam editor ekspresi dengan:

 get_projectcrs(@project_crs) 

Tentu saja Anda juga dapat mengetik misalnya 'EPSG:4326'secara manual atau menggunakan fungsi lain selain @project_crsyang mengembalikan kode EPSG.

Catatan:

Lihat juga https://qgis.org/api/api_break.html untuk informasi lebih lanjut tentang perubahan dalam qgis 3.x

MrXsquared
sumber
Terima kasih @MrXsquared! Saya sebelumnya mencoba persis kode itu tetapi tidak menggunakan @ ketika melewati nama layer. Namun, saya masih belum bisa membuatnya bekerja. Ketika saya menambahkan peta di tampilan tata letak dan menyisipkan label dengan fungsi yang disebutkan di atas, 'Output Preview' hanya menunjukkan NULL dan tidak ada informasi yang ditambahkan dalam label. Saya memeriksa semuanya beberapa kali, peta memiliki nama (dan id) dan CRS tetapi tidak ada yang muncul. Seharusnya tidak tergantung pada CRS spesifik yang digunakan, kan?
TinkerPhil
Tentu saja ini tidak akan berfungsi dalam tampilan tata letak karena ini merujuk ke lapisan tertentu. Saya mengedit jawaban saya dan menambahkan fungsi untuk mengembalikan CR yang digunakan pada proyek Anda . Anda dapat menggunakan ini di tata letak cetak Anda untuk menampilkan nama proyeksi yang digunakan.
MrXsquared
2
Untuk jawaban Anda A, tidak perlu memiliki ekspresi python. Anda dapat melakukan `layer_property (@layer_name, 'crs_description')`.
etrimaille