Sepotong kode berikut berfungsi dengan baik di QGIS 2.x, namun tidak berfungsi di 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())
Ini adalah kesalahan yang saya dapatkan ketika saya menjalankan kode:
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'
Apakah ada yang tahu apa yang menggantikan 'legendInterface' di versi baru atau perubahan apa yang harus saya buat untuk menjalankannya di QGIS 3.0?
pyqgis
qgis-3
qgis-python-console
Trashmonk
sumber
sumber
Setara dengan
di QGIS 3.0 adalah
Ini secara rekursif menemukan semua lapisan dan mengembalikannya dalam urutan yang sama seperti yang tercantum di Panel Layers.
sumber
Saya menemukan ini ke daftar lapisan:
layers = qgis.core.QgsProject.instance().layerTreeRoot().layerOrder()
sumber
Lihat https://qgis.org/api/api_break.html - ada ribuan perubahan pada api, yang perlu ditingkatkan 2.x.script untuk ditangani.
sumber