Я смог дать полное решение в следующем вопросе:
Как вычислить интерполяционный растр из консоли Python в QGIS?
Я также опубликую ответ здесь из-за большого интереса, который это, кажется, привлекает:
Ответ:
Документация по pyqgis не очень понятна, но я понял, как правильно называть связанные классы интерполяции ( QgsInterpolator, QgsTINInterpolator, QgsIDWInterpolator, QgsGridFileWriter) из питона. Я собираюсь описать каждый шаг сценария очень подробно:
Шаг 1:
Импортируйте модуль ядра и анализа и получите требуемый векторный слой для интерполяции, выделив его щелчком мыши на вкладке слоя.
import qgis.core
import qgis.analysis
layer = qgis.utils.iface.activeLayer()
Шаг 2:
Подготовьте классы интерполяции с необходимыми параметрами. Точные параметры для инициализации структуры LayerData можно найти в документации по API QGIS (searchterm: QgsInterpolator).
layer_data = QgsInterpolator.LayerData()
layer_data.vectorLayer = layer
layer_data.zCoordInterpolation=False
layer_data.InterpolationAttribute =0
layer_data.mInputType = 1
Обратите внимание, что я не использую координату z, я получаю первое доступное поле (index = 0) в качестве атрибута интерполяции и использую POINTS в качестве типа ввода.
Шаг 3:
Выберите свой механизм интерполяции. Здесь вы можете выбрать между методом TIN-Interpolation ( QgsTINInterpolator) и IDW-Interpolation ( QgsIDWInterpolator). Я взял QgsTINInterpolatorв своем коде.
tin_interpolator = QgsTINInterpolator([layer_data])
Имейте в виду, что вы должны передать список python layer_dataв механизм интерполяции! Это также позволяет добавлять несколько сценариев layer_data.
Шаг 4:
Настройте параметры, необходимые для экспорта выходных данных интерполяции (см. Документацию QgsGridFileWriter). Они включают информацию, аналогичную интерфейсу интерполяции (путь к файлу, экстент, разрешение, количество столбцов и строк).
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")
Помните о расширении файла вашего выходного растра, так как QgsGridFileWriterпишет только ASCII-сетки ( .asc). Данные записываются на диск путем вызова writeFile()метода. После экспорта вы можете добавить grid-файл в качестве растра на холст.
Полный скрипт для справки:
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)
Имейте в виду , что QGIS-API в настоящее время переписывается до версии 3.0 и используемые интерполяции-классы перемещаются из qgis.analysisк qgis.core! Это будет иметь огромное влияние на функциональность этого скрипта, поэтому его необходимо переписать для версии 3.0!
from rasterinterpolation import rasterinterpolationне знаю, какой модуль вызывать (или как вообще звонить).