Chamando a função de clipe no pyQGIS no console python?

10

Existe uma maneira de chamar a função de clipe no QQGIS a partir do console python? É encontrado em ferramentas de geoprocessamento no menu vetorial.

Toke
fonte
Ok, eu o consertei usando as peças múltiplas para que as peças individuais funcionem primeiro. Então funciona.
Toke

Respostas:

10

Claro, você pode obter a função na caixa de ferramentas de processamento. Veja como usá-lo: Conforme http://docs.qgis.org/2.8/en/docs/user_manual/processing/console.html

No console, você pode obter uma lista de todos os algoritmos disponíveis que contêm a palavra "clipe" digitando:

import processing
processing.alglist("clip")

Em seguida, você pode descobrir como usar o que parece ser a função mais apropriada com:

processing.alghelp("qgis:clip")

Em seguida, basta usar o algoritmo em seu script da seguinte maneira:

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

Nota: o algoritmo funcionará apenas em recursos selecionados "

Observe que o código acima é inválido para o 3.0+ no exemplo de alglist que você pode fazer:

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

Para o exemplo de ajuda que você pode fazer:

processing.algorithmHelp("qgis:clip")

Para QGIS3, veja esta pergunta:

O que é o novo alglist e alghelp no QGIS 3.0 Processing?

Mr Purple
fonte
Desculpe por trazer esse tópico à vida novamente, mas nunca o fiz funcionar, e agora preciso dele novamente. No console pyhton, recebo as duas camadas por Layer = qgis.utils.iface.activeLayer()e InputLayer = qgis.utils.iface.activeLayer(). Então eu uso processing.runandload("qgis:clip",InputLayer,Layer,"output_file.shp")e a nova camada é adicionada ao menu Camadas com o nome Recortado . Mas a camada está vazia. Se eu usar essas duas camadas com a função de clipe no Qgis, a camada de saída terá as linhas do recorte. Alguém que pode estar errado? Eu não recebo nenhum erro.
Toke
Funciona se eu usar dois polígonos, mas uma das minhas camadas é uma linha e não um polígono. Ele contém várias linhas, e eu posso usar essa camada para recortar ao fazê-lo no Qgis.
Toke
2
Você precisa ter os recursos que deseja cortar selecionados. Eu editei a resposta para refletir isso.
Sr. Roxo
Como alguém faria isso sem realmente criar shapefiles? Eu tenho uma camada com centenas de polígonos em forma de disco que desejo percorrer, usando cada um como uma sobreposição para uma única camada de dados pontuais. Posso apenas obter uma lista de objetos QgsFeature de alguma forma?
19419 J. Taylor
Você deve fazer isso como uma pergunta separada
Mr Purple
5

Supondo que você tenha uma camada chamada "overlay" e outra chamada "layer_to_clip" carregada.

# 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")
Francisco Puga
fonte