Saturday, 11 February 2017

How to pass an extent parameter to a Processing algorithm in PyQGIS?


I want to convert a point shapefile to a raster with the same extent and resolution as an input raster using the algorithm saga:shapestogrid. When I run this code:


##Sampled_trees=vector

##Input_field= field Sampled_trees
##Elevation_model=raster

from qgis.core import *
from PyQt4.QtCore import *

inputTrees= processing.getObject(Sampled_trees)
inputField = inputTrees.fieldNameIndex(Input_field)
dem = processing.getObject(Elevation_model)


result = processing.runalg('saga:shapestogrid', inputTrees, Input_field, 0, 0, 4, dem.extent(), dem.rasterUnitsPerPixelX(), path)

I get the error: Error: Wrong parameter value: qgis._core.QgsRectangle object at 0x0000000019F287B8


If I add or remove any parameter, the error will be Error: Wrong number of parameters.


The documentation gives the following syntax: processing.runalg('saga:shapestogrid', input, field, multiple, line_type, grid_type, output_extent, user_size, user_grid)


How should I define the output_extent parameter to make the algorithm to run?



Answer



I agree with you, Processing could just accept a QgsRectangle and make our lives easier.


However, Processing needs the extent in this way (see http://docs.qgis.org/2.2/en/docs/training_manual/processing/extents.html):


"Xmin, Xmax, Ymin, Ymax"


So, you can just pass that argument as:


extent = "%s,%s,%s,%s" % ( dem.extent.xMinimum(), dem.extent.xMaximum(), dem.extent.yMinimum(), dem.extent.yMaximum() )

result = processing.runalg('saga:shapestogrid', inputTrees, Input_field, 0, 0, 4, extent, dem.rasterUnitsPerPixelX(), path)

No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...