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 QgsTINInterpolator
en mi código.
tin_interpolator = QgsTINInterpolator([layer_data])
¡Tenga en cuenta que debe pasar una lista de Python layer_data
al 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 QgsGridFileWriter
solo 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.analysis
a 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 rasterinterpolation
pero no estoy seguro de a qué módulo llamar (o cómo llamar).