Poniższy fragment kodu działa dobrze w QGIS 2.x, jednak nie działa w 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())
Oto błąd, który pojawia się po uruchomieniu kodu:
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'
Czy ktoś wie, co zastąpiło „legendę interfejsu” w nowej wersji lub jakie inne zmiany muszę wprowadzić, aby uruchomić to w QGIS 3.0?
pyqgis
qgis-3
qgis-python-console
Trashmonk
źródło
źródło
Odpowiednik
w QGIS 3.0 jest
To rekurencyjnie wyszukuje wszystkie warstwy i zwraca je w takiej samej kolejności, jak podano w Panelu warstw.
źródło
Znalazłem to, aby wyświetlić listę warstw:
layers = qgis.core.QgsProject.instance().layerTreeRoot().layerOrder()
źródło
Spójrz na https://qgis.org/api/api_break.html - dosłownie tysiące zmian w interfejsie API, do obsługi których trzeba zaktualizować skrypty 2.x.s.
źródło