Is there a way to call the clip function in QQGIS from the python console? It is found under geoprocessing tools in the vector menu.
[GIS] Calling clip function in pyQGIS from python console
clippyqgis
Related Solutions
BJEBN has suggested a function from the processing toolbox. Here's how to use it: As per http://qgis.org/de/docs/user_manual/processing/console.html
From the console you can get a list of all the algorithms available which contain the word "Voronoi" by typing:
import processing
processing.alglist("Voronoi")
Then you could find out how to use what appears the most appropriate function with:
processing.alghelp("qgis:voronoipolygons")
Then simply use the algorithm in your script as follows:
processing.runalg("qgis:voronoipolygons",inputlayer,"output_file.shp")
I was able to provide a full solution in the following question:
How to compute an interpolation raster from the python console in QGIS?
I will repost the answer here as well, because of the large interest it seems to attract:
Answer:
The documentation on pyqgis is not very self-explanatory, but i figured out how to properly call the associated interpolation classes (QgsInterpolator
, QgsTINInterpolator
, QgsIDWInterpolator
, QgsGridFileWriter
) from python. I am going to describe every step of the script in great detail:
Step 1:
Import the core and analysis module and get the desired vector layer for interpolation by selecting it with a mouseclick in the layer tab.
import qgis.core
import qgis.analysis
layer = qgis.utils.iface.activeLayer()
Step 2:
Prepare the interpolation classes with the necessary Parameters. The exact parameters for initialization of the LayerData struct can be found in the QGIS API docs (searchterm: QgsInterpolator).
layer_data = QgsInterpolator.LayerData()
layer_data.vectorLayer = layer
layer_data.zCoordInterpolation=False
layer_data.InterpolationAttribute =0
layer_data.mInputType = 1
Please notice that I don't use the z Coordinate, I get the first available field (index = 0) as interpolation attribute, and use POINTS as input type.
Step 3:
Choose your interpolation engine. Here you can choose between the TIN-Interpolation method (QgsTINInterpolator
) and IDW-Interpolation (QgsIDWInterpolator
). I took the QgsTINInterpolator
in my code.
tin_interpolator = QgsTINInterpolator([layer_data])
Keep in mind that you have to pass a python list of layer_data
to the interpolation engine! This also allows you to add multiple layer_data scenarios.
Step 4:
Setup the parameters that are needed for the export of the interpolation-output (see documentation of QgsGridFileWriter
). Those include similar information as the interpolation gui (filepath, extent, resolution, number of colums and rows).
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")
Be aware of the file extension of your output-raster as QgsGridFileWriter
only writes ASCII-grids (.asc
). The data gets written to disk by calling the writeFile()
method. After export you can add the grid-file as raster to the canvas.
Full script for reference:
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)
Keep in mind that the QGIS-API is currently rewritten to version 3.0 and the used interpolation-classes are moved from qgis.analysis
to qgis.core
! This will have a huge impact on the functionality of this script so that it must be rewritten for version 3.0!
Best Answer
Sure You can get the function from the processing toolbox. Here's how to use it: As per http://docs.qgis.org/2.8/en/docs/user_manual/processing/console.html
From the console you can get a list of all the algorithms available which contain the word "clip" by typing:
Then you could find out how to use what appears the most appropriate function with:
Then simply use the algorithm in your script as follows:
Note: The algorithm will work only on slected features"
Note above code is invalid for 3.0+ for the alglist example you can do:
for the alghelp example you can do:
For QGIS3 see this question:
What is the new alglist and alghelp in QGIS 3.0 Processing?