Appel de la fonction clip dans pyQGIS à partir de la console python?

11

Existe-t-il un moyen d'appeler la fonction clip dans QQGIS depuis la console python? Il se trouve sous les outils de géotraitement dans le menu vectoriel.

Bouffée
la source
Ok, je l'ai corrigé en utilisant d'abord la fonction multiparts vers pièces uniques. Alors ça marche.
Toke

Réponses:

10

Bien sûr, vous pouvez obtenir la fonction de la boîte à outils de traitement. Voici comment l'utiliser: selon http://docs.qgis.org/2.8/en/docs/user_manual/processing/console.html

Depuis la console, vous pouvez obtenir une liste de tous les algorithmes disponibles contenant le mot "clip" en tapant:

import processing
processing.alglist("clip")

Ensuite, vous pourrez découvrir comment utiliser ce qui semble être la fonction la plus appropriée avec:

processing.alghelp("qgis:clip")

Ensuite, utilisez simplement l'algorithme dans votre script comme suit:

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

Remarque: l'algorithme ne fonctionnera que sur les fonctionnalités sélectionnées "

Remarque: le code ci-dessus n'est pas valide pour 3.0+ pour l'exemple d'alglist que vous pouvez faire:

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

pour l'exemple alghelp, vous pouvez faire:

processing.algorithmHelp("qgis:clip")

Pour QGIS3, voyez cette question:

Quels sont les nouveaux alglist et alghelp dans le traitement QGIS 3.0?

Mr Purple
la source
Désolé d'avoir redonné vie à ce sujet, mais je n'ai jamais réussi à le faire, et maintenant j'en ai encore besoin. Dans la console pyhton, j'obtiens les deux couches par Layer = qgis.utils.iface.activeLayer()et InputLayer = qgis.utils.iface.activeLayer(). Ensuite, j'utilise processing.runandload("qgis:clip",InputLayer,Layer,"output_file.shp")et le nouveau calque est ajouté au menu Calques avec le nom Coupé . Mais la couche est vide. Si j'utilise ces deux couches avec la fonction de clip dans Qgis, la couche de sortie a les lignes de l'écrêtage. Quelqu'un qui peut se tromper? Je ne reçois aucune erreur.
Toke
Cela fonctionne si j'utilise deux polygones, mais l'un de mes calques est une ligne et non un polygone. Il contient plusieurs lignes, et je peux utiliser ce calque pour l'écrêtage lorsque vous le faites dans Qgis.
Toke
2
Vous devez sélectionner les fonctionnalités que vous souhaitez découper. J'ai édité la réponse pour refléter cela.
Mr Purple
Comment procéder sans créer de fichiers de formes? J'ai une couche avec des centaines de polygones en forme de disque que je veux parcourir, en utilisant chacun comme superposition pour une seule couche de données ponctuelles. Puis-je simplement obtenir une liste d'objets QgsFeature à la place?
J. Taylor
Vous devriez poser cette question séparément
M. Violet
5

En supposant que vous avez un calque appelé "superposition" et un autre appelé "layer_to_clip" chargé.

# 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
la source