ฉันกำลังพยายามให้เลเยอร์อัปเดตโดยอัตโนมัติเมื่อแหล่งข้อมูลเปลี่ยนแปลง ฉันใช้ R เพื่อเขียน shapefile ด้วยแอตทริบิวต์และกำหนดสีตามคุณสมบัตินั้นใน QGIS
ฉันต้องการเขียน Shapefile ใหม่ที่มีค่าแอททริบิวต์ต่างกันและมีการอัพเดตสีแผนที่ Qgis ขั้นตอนที่ 1 เรียกกระบวนการนั้นขั้นตอนที่ 2 ทำให้การโหลดเลเยอร์ใหม่จาก Shapefile ที่แก้ไขแล้ว ขั้นตอนที่ 2 ฉันกังวลเกี่ยวกับที่นี่
การแช็ตรายการคำถาม / เมลอื่น ๆ ที่กล่าวถึงโดยใช้triggerRepaint
ในเลเยอร์ - ที่ไม่ทำงาน คำแนะนำอื่น ๆ ได้แก่setCacheImage(None)
และอีกครั้งที่ไม่ได้ผล เลเยอร์จะอัปเดตในที่สุด แต่ฉันไม่เห็นตรรกะและบางครั้งมันเกิดขึ้นด้วยความประหลาดใจหลังจากฉันไม่ได้ทำอะไรเลย หรือบางทีฉันอาจจะทำอะไรบางอย่างเมื่อสองนาทีก่อน
วิธีหนึ่งที่ทำซ้ำได้ในการอัปเดตคือการทำซ้ำเลเยอร์จากเมนูคำอธิบาย - ที่ซ้ำกันจะได้รับข้อมูลจาก Shapefile ปัจจุบันและเลเยอร์ดั้งเดิมจะอัพเดตเองเช่นกัน! ดังนั้นจะต้องมีวิธีในการทำมัน
ฉันคิดว่ามันทำงานได้ดีขึ้นใน 2.8 แต่นี่คือ 2.10 ดังนั้นอาจมีข้อผิดพลาดใหม่ที่ไหนสักแห่ง
เกี่ยวข้อง แต่ไม่ได้ผลสำหรับฉันใน 2.10:
จะโหลดเลเยอร์แรสเตอร์โดยอัตโนมัติได้อย่างไรหากมีการเปลี่ยนแปลงแหล่งที่มาใน QGIS
สิ่งอื่น ๆ ที่ฉันได้ลอง:
layer.dataProvider().dataChanged.emit()
- ทำงานครั้งเดียวแล้วไม่ทำงานอีกครั้งในเลเยอร์เดียวกัน
ฉันคิดว่าฉันติดตามว่าทำไมเลเยอร์ซ้ำจึงใช้งานได้ - ถ้าฉันสร้างเลเยอร์การทิ้งใหม่ตามเลเยอร์ที่อัปเดตแล้วเรียก.triggerRepaint()
เลเยอร์ที่อัปเดตแล้วอัปเดตบนเลเยอร์แผนที่:
QgsVectorLayer( layer.source(), "layer copy", layer.providerType() )
layer.triggerRepaint()
หากฉันใช้เลเยอร์ต้นทางอื่นมันไม่ทำงานดังนั้นดูเหมือนว่าหากคุณสร้างวัตถุเลเยอร์ตามแหล่งเลเยอร์เดียวกัน ...
การทดสอบอย่างรวดเร็วในขณะนี้ด้วยเลเยอร์แรสเตอร์ (จาก GeoTIFF) และการโทรก็rlayer.triggerRepaint()
ดูเหมือนจะอัปเดตมุมมองของแรสเตอร์ในแผนที่ผ้าใบได้อย่างน่าเชื่อถือ
layer.setCacheImage(None)
และlayer.triggerRepaint()
?
triggerRepaint()
ชั้นเดิม v 2.10.1-Pisa