การเพิ่มระบบพิกัดในเลย์เอาต์ในผู้แต่ง 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:

สำหรับวิธีแก้ปัญหาที่ง่ายกว่าโดยไม่ต้องใช้ภาษาไพ ธ อนดูความคิดเห็นจากด้านล่าง

เพิ่มสคริปต์นี้ไปยังฟังก์ชันที่กำหนดเองของคุณ:

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

แน่นอนว่าสิ่งนี้จะไม่ทำงานในมุมมองเลย์เอาต์เนื่องจากนี่หมายถึงเลเยอร์ที่เฉพาะเจาะจง ฉันแก้ไขคำตอบของฉันและเพิ่มฟังก์ชั่นที่จะกลับ CRS สินค้าของคุณโครงการ คุณสามารถใช้สิ่งนี้ในโครงร่างการพิมพ์ของคุณเพื่อแสดงชื่อของการฉายที่ใช้
MrXsquared

2
สำหรับคำตอบของคุณ A ไม่จำเป็นต้องมีนิพจน์หลาม คุณสามารถทำได้ `layer_property (@layer_name, 'crs_description')`
etrimaille
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.