QGIS 3.x python कोड प्राप्त करना QGIS 3.x में काम करना है? ऑब्जेक्ट में कोई विशेषता नहीं है 'किंवदंतीइंटरफेस' समस्या


12

निम्नलिखित कोड कोड QGIS 2.x में अच्छी तरह से काम करता है, हालाँकि यह QGIS 3.x में काम नहीं करता है।

myDir = 'd:/work/output_folder/'
layers = iface.legendInterface().layers()
pipe = QgsRasterPipe()
for layer in layers:
 extent = layer.extent()
 width, height = layer.width(), layer.height()
 renderer = layer.renderer()
 provider=layer.dataProvider()
 crs = layer.crs().toWkt() 
 pipe.set(provider.clone())
 pipe.set(renderer.clone())
 opts = ["COMPRESS=LZW"] 
 file_writer = QgsRasterFileWriter(myDir + layer.name() + ".tif")
 file_writer.setCreateOptions(opts)
 file_writer.writeRaster(pipe,
      width,
         height,
         extent,
         layer.crs())

यह वह त्रुटि है जो मुझे कोड चलाने पर मिलती है:

Traceback (most recent call last):
  File "C:\PROGRA~1\QGIS3~1.0\apps\Python36\lib\code.py", line 91, in runcode
    exec(code, self.locals)
  File "<input>", line 1, in <module>
AttributeError: 'QgisInterface' object has no attribute 'legendInterface'

क्या किसी को पता है कि नए संस्करण में 'किंवदंतीइंटरफेस' की जगह क्या है या क्यूजीआईएस 3.0 में इसे चलाने के लिए मुझे क्या अन्य परिवर्तन करने पड़ सकते हैं?

जवाबों:


14

आप बस प्रतिस्थापित कर सकते हैं:

layers = iface.legendInterface().layers()

साथ में

layers = [layer for layer in QgsProject.instance().mapLayers().values()]

यह समाधान मेरे लिए पर्याप्त रूप से कारगर नहीं हुआ क्योंकि प्राप्त परतें उसी क्रम में नहीं थीं जैसा कि लेयर्स पैनल में सूचीबद्ध हैं।
एलेक्समैट

@AleksMat - यह जानकर अच्छा लगा कि आपको अपनी समस्या के लिए एक विधि मिली :)
जोसेफ

9

के बराबर

layers = self.iface.legendInterface().layers()

QGIS में 3.0 है

layers = [tree_layer.layer() for tree_layer in QgsProject.instance().layerTreeRoot().findLayers()]

यह पुनरावर्ती सभी परतों को ढूँढता है और उन्हें उसी क्रम में लौटाता है जैसा कि परत पैनल में सूचीबद्ध है।


3

मुझे यह परतों को सूचीबद्ध करने के लिए मिला:

layers = qgis.core.QgsProject.instance().layerTreeRoot().layerOrder()


2

Https://qgis.org/api/api_break.html पर एक नज़र डालें - वहाँ वास्तव में एपीआई में हजारों बदलाव हैं, जिन्हें संभालने के लिए 2.x.scripts को अपग्रेड करने की आवश्यकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.