Pude proporcionar una solución completa en la siguiente pregunta:
¿Cómo calcular un ráster de interpolación desde la consola de Python en QGIS?
Volveré a publicar la respuesta aquí también, debido al gran interés que parece atraer:
Responder:
La documentación sobre PyQGIS no es muy explica por sí mismo, pero me di cuenta de cómo llamar correctamente a las clases de interpolación asociados ( QgsInterpolator, QgsTINInterpolator, QgsIDWInterpolator, QgsGridFileWriter) de pitón. Voy a describir cada paso del guión con gran detalle:
Paso 1:
Importe el núcleo y el módulo de análisis y obtenga la capa vectorial deseada para la interpolación seleccionándola con un clic del mouse en la pestaña de la capa.
import qgis.core
import qgis.analysis
layer = qgis.utils.iface.activeLayer()
Paso 2:
Prepare las clases de interpolación con los parámetros necesarios. Los parámetros exactos para la inicialización de la estructura LayerData se pueden encontrar en los documentos de la API QGIS (searchterm: QgsInterpolator).
layer_data = QgsInterpolator.LayerData()
layer_data.vectorLayer = layer
layer_data.zCoordInterpolation=False
layer_data.InterpolationAttribute =0
layer_data.mInputType = 1
Tenga en cuenta que no uso la Coordenada z, obtengo el primer campo disponible (índice = 0) como atributo de interpolación y uso PUNTOS como tipo de entrada.
Paso 3:
Elige tu motor de interpolación. Aquí puede elegir entre el método TIN-Interpolation ( QgsTINInterpolator) y IDW-Interpolation ( QgsIDWInterpolator). Tomé el QgsTINInterpolatoren mi código.
tin_interpolator = QgsTINInterpolator([layer_data])
¡Tenga en cuenta que debe pasar una lista de Python layer_dataal motor de interpolación! Esto también le permite agregar múltiples escenarios layer_data.
Etapa 4:
Configure los parámetros necesarios para la exportación de la salida de interpolación (consulte la documentación de QgsGridFileWriter). Estos incluyen información similar a la interfaz gráfica de usuario de interpolación (ruta de archivo, extensión, resolución, número de columnas y filas).
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")
Tenga en cuenta la extensión del archivo de su ráster de salida, ya que QgsGridFileWritersolo escribe ASCII-grids ( .asc). Los datos se escriben en el disco llamando al writeFile()método. Después de exportar, puede agregar el archivo de cuadrícula como ráster al lienzo.
Guión completo para referencia:
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)
¡Tenga en cuenta que la API QGIS se reescribe actualmente a la versión 3.0 y las clases de interpolación utilizadas se trasladan de qgis.analysisa qgis.core! ¡Esto tendrá un gran impacto en la funcionalidad de este script, por lo que debe reescribirse para la versión 3.0!
from rasterinterpolation import rasterinterpolationpero no estoy seguro de a qué módulo llamar (o cómo llamar).