जब उनके डेटा स्रोत में बदलाव होता है, तो मैं स्वचालित रूप से अपडेट होने के लिए लेयर्स प्राप्त करने की कोशिश कर रहा हूं। मैं R का उपयोग एक विशेषता के साथ एक आकृति लिखने के लिए कर रहा हूं, और QGIS में उस विशेषता के अनुसार रंग भर रहा हूं।
मैं अलग-अलग विशेषता मानों के साथ एक नया आकार लिखना चाहता हूं, और Qgis मानचित्र रंग अपडेट है। चरण 1 उस प्रक्रिया को चालू कर रहा है, चरण 2 संशोधित आकारफाइल से परत को फिर से लोड कर रहा है। इसका चरण 2 मैं यहां चिंता कर रहा हूं।
अन्य प्रश्न / मेलिंग सूची चट्टर triggerRepaint
परत पर उपयोग का उल्लेख करता है - जो काम नहीं करता है। अन्य सुझावों में शामिल हैं setCacheImage(None)
और फिर से काम नहीं करता है। परत अंततः अपडेट करती है, लेकिन मैं वास्तव में तर्क नहीं देख सकता हूं, और कभी-कभी आश्चर्य के बाद ऐसा होता है कि मैंने कुछ भी नहीं किया है। या शायद मैंने दो मिनट पहले कुछ किया था।
इसे अपडेट करने का एक प्रतिलिपि प्रस्तुत करने योग्य तरीका यह है कि लीजेंड मेनू से लेयर को डुप्लिकेट किया जाए - डुप्लिकेट को हमेशा अपना डेटा वर्तमान शेपफाइल से मिलता है, और मूल लेयर स्वयं भी अपडेट होता है! इसलिए इसे करने का कोई तरीका होना चाहिए।
मुझे लगता है कि यह 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-पीसा