ฉันจะทำซ้ำเลเยอร์ใน QGIS ได้อย่างไร


9

ฉันต้องการแสดงข้อมูลเวกเตอร์เดียวกันด้วยวิธีที่ต่างกันกับเลเยอร์ต่างๆ ในขณะที่มันมีประโยชน์มากที่จะสามารถคัดลอกและวางสไตล์เลเยอร์ใน 1.8+ มันจะดีที่ได้เลือกเลเยอร์และคลิกขวาเพื่อคัดลอกหรือทำซ้ำมันโดยตรง

วิธีง่ายๆในการทำเช่นนี้เช่นคำสั่ง Python?


อัปเดต: ข้อเสนอแนะของ @ dakcarto ทำงานได้อย่างสมบูรณ์แบบ เนื่องจากฉันต้องการเพิ่มเลเยอร์ที่ซ้ำกันจำนวนมากฉันจึงปรับให้เลเยอร์ซ้ำหลาย ๆ ครั้งตามต้องการ:

for n in range(1,5): 
    iface = qgis.utils.iface; vl = iface.activeLayer(); iface.addVectorLayer(vl.source(), vl.name() + "_clone" + str(n), vl.providerType())

ปัญหาเดียวคือเลเยอร์ใหม่กลายเป็น activeLayer ดังนั้นมันจึงเพิ่ม "_clone" และหมายเลขไปยังชื่อก่อนหน้าซึ่งลงท้ายด้วย example_clone1, example_clone1_clone2, สูงสุดถึง unwieldy example_clone1_clone2_clone3_clone3_clone3_clone3_clone3 ต้องการทราบวิธีการทำซ้ำจากเลเยอร์ที่เลือกไว้ตอนนี้


นี่ไม่ใช่คำตอบที่แท้จริง แต่ QGIS ไม่สนใจถ้าคุณเพิ่มเลเยอร์เวกเตอร์เดียวกันในโครงการสองครั้ง
L_Holcombe

ใช่ฉันได้เพิ่มจำนวนซ้ำในภายหลัง แต่เพียง "เพิ่มเลเยอร์" และเรียกดูเพื่อเลือกเลเยอร์ในแต่ละครั้ง การคลิกอย่างน้อย 4 ครั้งและการเลื่อนบางครั้งซึ่งน่าเบื่อมากโดยต้องทำซ้ำเลเยอร์ 20 ครั้ง
Simbamangu

1
@Simbamangu มีมุมมองที่แตกต่างกันเกี่ยวกับเรื่องนี้ฉันผ่าน GIS ฉันขอขอบคุณมุมมองของคุณให้ฉันแบ่งปันของฉัน ฉันพิจารณาชื่อคำถามว่าเป็นทิศทางที่ชัดเจนเกี่ยวกับส่วนสำคัญของคำถาม เนื่องจากทุกอย่างเกี่ยวกับคำถามจากนั้นภายใน "ฉันจะทำอย่างไร ... ", "ทำไมมันถึงเป็น ... " ไม่มีอะไรใหม่เพิ่มเนื่องจากชัดเจนว่านี่เป็นคำถาม มันอาจทำให้คำถามอ่านง่ายขึ้น แต่คุณต้องดูเนื้อหาของคำถามเพื่อดูว่ามันเกี่ยวกับอะไร หากต้องการดูคำถามทั้งหมดที่เริ่มต้นด้วย "ฉันจะทำอย่างไร ... " เป็นอย่างน้อยสำหรับฉันที่ไม่ก่อผล
TomazicM

1
และเหตุผลที่ฉันเปลี่ยนชื่อคำถามเก่าของคุณ มันชนที่หน้าแรกของ GIS เนื่องจากมีการกระทำบางอย่างและฉันยอมรับว่ามีนิสัย (ไม่ดี) ในการลบส่วน "วิธี" และ "ทำไม"
TomazicM

1
@Simbamangu ฉันบุคคลต้องการคำถามที่ไม่มี "อย่างไร" และ "ทำไม" เพราะคำเหล่านี้ไม่ได้เพิ่มเนื้อหาใด ๆ พวกเขาอาจทำให้ชื่อ readabale มากขึ้น แต่ฉันไม่เห็นปัญหาใด ๆ ถ้าชื่อเรื่องนั้นค่อนข้างคลุมเครือเนื่องจากต้องอ่านเนื้อหาของคำถามเพื่อดูว่ามันเกี่ยวข้องกับอะไร และฉันยอมรับว่าฉันเริ่มลบคำเหล่านั้นหลังจากที่ฉันเห็น PolyGeo ทำแล้วอ่านบทความเกี่ยวกับแนวปฏิบัติที่ดีเมื่อโพสต์ / แก้ไขคำถาม
TomazicM

คำตอบ:


10

มีคำขอคุณลักษณะสองประการเกี่ยวกับสิ่งนี้ ( # 5899และ# 1483 ) นี่เป็นคุณสมบัติที่ใช้งานได้และน่าจะรวมอยู่ในเวอร์ชัน 2.0 หากนักพัฒนาสนใจที่จะเพิ่มเข้าไป หรือผู้พัฒนาปลั๊กอิน Python ให้ข้อพิจารณาบางประการ

ปัญหา # 5899 ยังมีรหัส Python สำหรับทำซ้ำเลเยอร์ (ส่งโดยผู้พัฒนา Giuseppe Sucameli):

ในระหว่างนี้ให้เลือกเลเยอร์เวกเตอร์จากนั้นเปิดคอนโซล Python ของ QGis แล้วเรียกใช้:

iface = qgis.utils.iface; vl = iface.activeLayer(); iface.addVectorLayer(vl.source(), vl.name() + "_clone", vl.providerType())

รหัสก่อนหน้าเพิ่มไปยังแผนที่ sublayer เดียวกัน

เป็นการยากที่จะทำได้โดยใช้สคริปต์ไพ ธ อนบรรทัดเดียวเหมือนก่อนหน้านี้ แต่ถ้าคุณรู้ชื่อ sublayer คุณสามารถแทนที่ vl.source()ด้วยvl.source().split("|")[0] + "|layername=my_sublayer_name"ตำแหน่งที่ my_sublayer_name เป็นชื่อของ sublayer ของคุณ

มันจะปรากฏขึ้นหลังจากเรียกใช้รหัสซ้ำคุณจะต้องคัดลอก / วางสไตล์ของเลเยอร์ดั้งเดิม


ทำงานได้อย่างสมบูรณ์แบบ ด้วยการเพิ่ม 'v' เป็นกุญแจสำคัญในการวางสไตล์เลเยอร์การทำซ้ำเลเยอร์และสไตล์ใช้เวลาเพียงไม่กี่วินาทีเท่านั้น
Simbamangu

คุณลักษณะนี้มีการใช้งานในการแก้ไข c11df1aa79 hub.qgis.org/projects/quantum-gis/repository/revisions/…
Vladimir

2
Python สำหรับการผูกมัดกับสาขาหลักนั้นเป็นเช่นนั้นiface.setActiveLayer( my_layer );iface.actionDuplicateLayer().trigger()โดยที่ my_layer เป็น QgsMapLayer ที่ถูกตั้งค่าเป็นเลเยอร์ที่เลือกและแอคทีฟในตำนาน จากนั้น actionDuplicateLayer () จะถูกเรียกให้ทำงานบนเลเยอร์ที่เลือกในคำอธิบาย (ค่าเริ่มต้น)
dakcarto

1

QGIS เวอร์ชันล่าสุดมีตัวเลือก "Duplicate Layer" คลิกขวาที่เลเยอร์ที่คุณต้องการทำซ้ำและมันจะแทรกสำเนาใหม่ด้านล่าง

หมายเหตุด้านข้าง: ดูเหมือนว่าคุณจะต้องมีการView --> Refreshเปลี่ยนแปลงที่เกิดขึ้นในเลเยอร์หนึ่งเพื่อเผยแพร่ต่อไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.