J'ai pu apporter une solution complète à la question suivante:
Comment calculer un raster d'interpolation à partir de la console python dans QGIS?
Je republierai également la réponse ici, en raison du grand intérêt qu'elle semble susciter:
Répondre:
La documentation sur PyQGIS est pas très explicite, mais je me suis dit comment appeler correctement les classes d'interpolation associées ( QgsInterpolator
, QgsTINInterpolator
, QgsIDWInterpolator
, QgsGridFileWriter
) de python. Je vais décrire chaque étape du script en détail:
Étape 1:
Importez le noyau et le module d'analyse et obtenez la couche vectorielle souhaitée pour l'interpolation en la sélectionnant avec un clic de souris dans l'onglet des couches.
import qgis.core
import qgis.analysis
layer = qgis.utils.iface.activeLayer()
Étape 2:
Préparez les classes d'interpolation avec les paramètres nécessaires. Les paramètres exacts pour l'initialisation de la structure LayerData peuvent être trouvés dans les documents de l'API QGIS (searchterm: QgsInterpolator).
layer_data = QgsInterpolator.LayerData()
layer_data.vectorLayer = layer
layer_data.zCoordInterpolation=False
layer_data.InterpolationAttribute =0
layer_data.mInputType = 1
Veuillez noter que je n'utilise pas la coordonnée z, j'obtiens le premier champ disponible (index = 0) comme attribut d'interpolation et j'utilise POINTS comme type d'entrée.
Étape 3:
Choisissez votre moteur d'interpolation. Ici, vous pouvez choisir entre la méthode d'interpolation TIN ( QgsTINInterpolator
) et l'interpolation IDW ( QgsIDWInterpolator
). J'ai pris le QgsTINInterpolator
dans mon code.
tin_interpolator = QgsTINInterpolator([layer_data])
Gardez à l'esprit que vous devez passer une liste de python layer_data
au moteur d'interpolation! Cela vous permet également d'ajouter plusieurs scénarios layer_data.
Étape 4:
Configurez les paramètres nécessaires à l'exportation de la sortie d'interpolation (voir la documentation de QgsGridFileWriter
). Celles-ci incluent des informations similaires à celles de l'interface d'interpolation (chemin de fichier, étendue, résolution, nombre de colonnes et de lignes).
export_path ="C:/SomeFolder/output.asc"
rect = layer.extent()
res = 10
ncol = int( ( rect.xMaximum() - rect.xMinimum() ) / res )
nrows = int( (rect.yMaximum() - rect.yMinimum() ) / res)
output = QgsGridFileWriter(tin_interpolator,export_path,rect,ncol, nrows,res,res)
output.writeFile(True)
iface.addRasterLayer(export_path, "interpolation_output")
Soyez conscient de l'extension de fichier de votre raster de sortie car QgsGridFileWriter
il écrit uniquement des grilles ASCII ( .asc
). Les données sont écrites sur le disque en appelant la writeFile()
méthode. Après l'exportation, vous pouvez ajouter le fichier de grille en tant que raster au canevas.
Script complet pour référence:
import qgis.analysis
import qgis.core
layer = qgis.utils.iface.activeLayer()
layer_data = QgsInterpolator.LayerData()
layer_data.vectorLayer = layer
layer_data.zCoordInterpolation=False
layer_data.InterpolationAttribute =0
layer_data.mInputType = 1
tin_interpolator = QgsTINInterpolator([layer_data])
export_path = "E:/GIS_Workbench/script_output/test.asc"
rect = layer.extent()
res = 10
ncol = int( ( rect.xMaximum() - rect.xMinimum() ) / res )
nrows = int( (rect.yMaximum() - rect.yMinimum() ) / res)
output = QgsGridFileWriter(tin_interpolator,export_path,rect,ncol,nrows,res,res)
output.writeFile(True)
Gardez à l'esprit que l'API QGIS est actuellement réécrite dans la version 3.0 et les classes d'interpolation utilisées sont déplacées de qgis.analysis
vers qgis.core
! Cela aura un impact énorme sur la fonctionnalité de ce script et devra donc être réécrit pour la version 3.0!
from rasterinterpolation import rasterinterpolation
mais je ne sais pas quel module appeler (ou même comment appeler).