Chiamare la funzione di clip in pyQGIS dalla console di Python?


11

C'è un modo per chiamare la funzione di clip in QQGIS dalla console di Python? Si trova sotto gli strumenti di geoprocessing nel menu vettoriale.


Ok, l'ho corretto usando prima la funzione multipart in singleparts. Quindi funziona.
Prende il

Risposte:


10

Sicuro È possibile ottenere la funzione dalla casella degli strumenti di elaborazione. Ecco come usarlo: secondo http://docs.qgis.org/2.8/en/docs/user_manual/processing/console.html

Dalla console è possibile ottenere un elenco di tutti gli algoritmi disponibili che contengono la parola "clip" digitando:

import processing
processing.alglist("clip")

Quindi potresti scoprire come utilizzare ciò che appare la funzione più appropriata con:

processing.alghelp("qgis:clip")

Quindi usa semplicemente l'algoritmo nel tuo script come segue:

processing.runalg("qgis:clip",inputlayer,overlaylayer,"output_file.shp")

Nota: l'algoritmo funzionerà solo su funzioni selezionate "

Nota il codice sopra riportato non è valido per 3.0+ per l'esempio di alglist che puoi fare:

print([a.id() for a in gsApplication.processingRegistry().algorithms() if "clip" in a.id()])

per l'esempio di alghelp puoi fare:

processing.algorithmHelp("qgis:clip")

Per QGIS3 vedi questa domanda:

Che cos'è il nuovo alglist e alghelp nell'elaborazione di QGIS 3.0?


Ci scusiamo per aver ripreso in vita questo argomento, ma non ho mai fatto funzionare questo, e ora ne ho ancora bisogno. Nella console pyhton ottengo i due livelli di Layer = qgis.utils.iface.activeLayer()e InputLayer = qgis.utils.iface.activeLayer(). Quindi uso processing.runandload("qgis:clip",InputLayer,Layer,"output_file.shp")e il nuovo livello viene aggiunto al menu Livelli con il nome Ritagliato . Ma il livello è vuoto. Se uso questi due livelli con la funzione di clip all'interno di Qgis, il livello di output ha le linee del ritaglio. Qualcuno che cosa può essere sbagliato? Non ricevo errori.
Toke

Funziona se uso due poligoni, ma uno dei miei livelli è una linea e non un poligono. Contiene diverse righe e posso usare questo livello per il ritaglio quando lo faccio in Qgis.
Toke

2
È necessario disporre delle funzionalità che si desidera ritagliare selezionate. Ho modificato la risposta per riflettere questo.
Sig. Purple,

Come si farebbe questo senza effettivamente creare shapefile? Ho un livello con centinaia di poligoni a forma di disco che voglio scorrere attraverso, usando ciascuno come un overlay per un singolo livello di dati punto. Posso semplicemente ottenere un elenco di oggetti QgsFeature invece in qualche modo?
J. Taylor,

Dovresti porlo come domanda separata
Mr Purple il

5

Supponendo di avere un layer chiamato "overlay" e un altro chiamato "layer_to_clip" caricato.

# get the overlay layer in the console
overlay_layer = [x for x in iface.legendInterface().layers() if x.name() == 'overlay'][0]

# get the layer to clip in the console
layer_to_clip = [x for x in iface.legendInterface().layers() if x.name() == 'layer_to_clip'][0]

# run the algorithm and output the results in /tmp/output.shp

processing.runalg("qgis:clip", overlay_layer, layer_to_clip, "/tmp/output.shp")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.