Der folgende Code funktioniert gut in QGIS 2.x, funktioniert jedoch nicht in 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())
Dies ist der Fehler, den ich beim Ausführen des Codes erhalte:
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'
Weiß jemand, was 'legendInterface' in der neuen Version ersetzt hat oder welche anderen Änderungen ich möglicherweise vornehmen muss, damit dies in QGIS 3.0 ausgeführt wird?
pyqgis
qgis-3
qgis-python-console
Trashmonk
quelle
quelle
Das Äquivalent von
in QGIS 3.0 ist
Dadurch werden alle Ebenen rekursiv gefunden und in derselben Reihenfolge zurückgegeben, wie sie im Ebenenbedienfeld aufgeführt sind.
quelle
Ich habe dies gefunden, um Ebenen aufzulisten:
layers = qgis.core.QgsProject.instance().layerTreeRoot().layerOrder()
quelle
Schauen Sie sich https://qgis.org/api/api_break.html an - es gibt buchstäblich Tausende von Änderungen an der API, für deren Handhabung 2.x.scripts aktualisiert werden müssen.
quelle