Le morceau de code suivant fonctionne bien dans QGIS 2.x, mais il ne fonctionne pas dans 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())
Voici l'erreur que j'obtiens lorsque j'exécute le code:
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'
Quelqu'un sait-il ce qui a remplacé «legendInterface» dans la nouvelle version ou quelles autres modifications je devrais apporter pour que cela fonctionne dans QGIS 3.0?
pyqgis
qgis-3
qgis-python-console
Trashmonk
la source
la source
L'équivalent de
dans QGIS 3.0 est
Cela recherche récursivement tous les calques et les renvoie dans le même ordre que celui répertorié dans le panneau Calques.
la source
J'ai trouvé ceci pour lister les couches:
layers = qgis.core.QgsProject.instance().layerTreeRoot().layerOrder()
la source
Jetez un œil à https://qgis.org/api/api_break.html - il y a littéralement des milliers de modifications à l'API, que les scripts 2.x doivent être mis à niveau pour être gérés.
la source