ถ้าฉันเข้าใจถูกต้องคำตอบคือใช่ QGIS รองรับชื่อเลเยอร์แบบไดนามิก
คุณจะต้องเขียนแมโคร Python เพื่อให้ทำงานทุกครั้งที่เปิดโครงการ นี่จะเป็นเวิร์กโฟลว์:
ไปที่QGIS->Project->Project Properties
และแทนที่openProject()
ด้วยรหัส Python ต่อไปนี้:
def openProject():
import re, qgis
iface = qgis.utils.iface
layers = iface.mapCanvas().layers()
for lyr in layers:
# Get date from layer
it=lyr.getFeatures()
feat = next(it)
idx = lyr.fieldNameIndex('traffic_da')
currDate = feat.attributes()[idx]
# Set new layer name
name = lyr.name()
if re.search(' on \d{2,2}.\d{2,2}.\d{4,4}$', name):
name = name[:-14]
name = name + " on " + currDate
lyr.setLayerName( name )
หมายเหตุ 1: ฉันทดสอบใน shapefiles ดังนั้นฟิลด์ที่ฉันเลือกวันที่เป็นtraffic_da
เพราะ Shapefiles ไม่รองรับตัวอักษรเพิ่มเติมในชื่อฟิลด์ ปรับในรหัสเพื่อทำงานกับเลเยอร์ของคุณ
หมายเหตุ 2: ขึ้นอยู่กับการกำหนดค่าโครงการของคุณคุณควรเพิ่มรหัสตรวจสอบเพื่อดำเนินการเฉพาะในชั้นที่คุณต้องการ ตัวอย่างเช่นหากคุณเรียกใช้รหัสในเลเยอร์แรสเตอร์ข้อผิดพลาดจะปรากฏขึ้นอย่างแน่นอน หากคุณต้องการความช่วยเหลือในเรื่องนี้เปิดคำถามใหม่ฉันสามารถช่วยคุณได้
ตรวจสอบให้แน่ใจว่าคุณเปิดใช้งานมาโครในโครงการด้วยวิธีนี้: Settings->Options->General->Enable macros: Always
โหลดเลเยอร์ของคุณไปยังโครงการ
บันทึกโครงการของคุณ
ทุกครั้งที่คุณเปิดโครงการจากจุดนี้ชื่อเลเยอร์ของคุณจะเป็นแบบไดนามิกวันที่จะถูกนำออกจากฟิลด์traffic_date
ในตารางแอตทริบิวต์ของแต่ละชั้น
หลังจากครั้งแรกที่ฉันเปิดโครงการนี่คือวิธีสร้างชื่อเลเยอร์ของฉันแบบไดนามิก:
ฉันคิดว่านี่จะช่วยคุณในการเริ่มต้น บอกฉันถ้าคุณประสบปัญหาที่ไม่ชัดเจน