2

QGIS 3.16.5 seems to crash when I use the following code block in the QGIS console.

However, there seems to be no issue at all when clicking through the same options using the GUI. The TIN interpolator works as expected when plugging-in through the GUI.

I have gone through the answers Calling interpolation plugin from Python console of QGIS and Interpolation (TIN) from Python Console in QGIS

import qgis.analysis
import qgis.core

file_path = 'D:/codebase' pathToFile = f"{file_path}/gpd_df.shp" layer = QgsVectorLayer(pathToFile, 'input','ogr') layer_data = QgsInterpolator.LayerData() layer_data.vectorLayer = layer layer_data.zCoordInterpolation=False index = layer.fields().indexFromName("altitude") layer_data.interpolationAttribute = index layer_data.sourceType = QgsInterpolator.SourcePoints interpolation_method = QgsTinInterpolator.Linear

tin_interpolator = QgsTinInterpolator([layer_data], interpolation_method)

export_path = "D:/codebase/test.tif"

also tried export_path = "D:/codebase/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) output.writeFile() iface.addRasterLayer(export_path, "output")

gpd_df.shp (which loads as expected when used through GUI) file looks like the following table in the image attached.

gpd_df shape file with headers

Kadir Şahbaz
  • 76,800
  • 56
  • 247
  • 389
Ashish AJ
  • 95
  • 4

2 Answers2

2

Answers you used were initially for QGIS 2.x. They work for QGIS 3.0 too with some adaptations but IMO, you can make your life easier by calling the "interpolator" from PyQGIS processing algorithms available in "Processing Toolbox". See below GIF to understand that when you run an algorithm, in the history, you get the Python code executed.

Discover how to reuse processing algorithms in PyQGIS

From the last image in above GIF, I've copy & paste the part processing.run(... below, assigned to a variable result and finish by adding the resulting layer output

result = processing.run("qgis:tininterpolation", {
    'INTERPOLATION_DATA':'/tmp/peaks.geojson::~::0::~::95::~::0',
    'METHOD':0,
    'EXTENT':'5.053357400,8.904926200,43.502162600,45.567573400 [EPSG:4326]',
    'PIXEL_SIZE':0.1,
    'OUTPUT':'TEMPORARY_OUTPUT'
})
iface.addRasterLayer(result['OUTPUT'], "output file")

Do the same steps as below demo on your own dataset. You can now substitute some content with your specific parameters, making them dynamic if necessary.

To learn more about how to run Python processing algorithms, you may also look at https://docs.qgis.org/3.16/en/docs/user_manual/processing/console.html#calling-algorithms-from-the-python-console

ThomasG77
  • 30,725
  • 1
  • 53
  • 93
0

There's no attribute named 'vectorLayer' in layerData.

Try to change it to 'source'.

    layer_data.source = layer #instead .vectorLayer
unicalm
  • 3
  • 3