Вызов функции клипа в pyQGIS из консоли python?

11

Есть ли способ вызвать функцию клипа в QQGIS из консоли python? Он находится в разделе инструментов геообработки в векторном меню.

затяжка
источник
Хорошо, я исправил это, используя функцию множественных частей к одиночным частям. Тогда это работает.
Ток

Ответы:

10

Конечно, вы можете получить функцию из панели инструментов обработки. Вот как это использовать: Согласно http://docs.qgis.org/2.8/en/docs/user_manual/processing/console.html

Из консоли вы можете получить список всех доступных алгоритмов, которые содержат слово «клип», набрав:

import processing
processing.alglist("clip")

Тогда вы можете узнать, как использовать то, что кажется наиболее подходящей функцией с:

processing.alghelp("qgis:clip")

Затем просто используйте алгоритм в вашем скрипте следующим образом:

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

Примечание: алгоритм будет работать только на отдельных функциях »

Примечание выше код недействителен для 3.0+ для примера alglist, который вы можете сделать:

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

для примера alghelp вы можете сделать:

processing.algorithmHelp("qgis:clip")

Для QGIS3 см. Этот вопрос:

Что такое новый alglist и alghelp в обработке QGIS 3.0?

Мистер пурпурный
источник
Извините за то, что снова оживил эту тему, но никогда не делал эту работу, и теперь мне это нужно снова. В консоли Pyhton я получаю два слоя Layer = qgis.utils.iface.activeLayer()и InputLayer = qgis.utils.iface.activeLayer(). Затем я использую processing.runandload("qgis:clip",InputLayer,Layer,"output_file.shp")и новый слой добавляется в меню слоев с именем Clipped . Но слой пуст. Если я использую эти два слоя с функцией клипа в Qgis, выходной слой содержит строки из отсечения. Кто-нибудь, кто может быть не так? Я не получаю никаких ошибок.
Ток
Это работает, если я использую два многоугольника, но один из моих слоев - это линия, а не многоугольник. Он содержит несколько строк, и я могу использовать этот слой для отсечения, когда делаю это в Qgis.
Ток
2
Вы должны иметь выбранные функции, которые вы хотите обрезать. Я отредактировал ответ, чтобы отразить это.
Мистер Пурпур,
Как сделать это без создания шейп-файлов? У меня есть слой с сотнями многоугольников в форме диска, который я хочу перебрать, используя каждый в качестве наложения для одного слоя точечных данных. Могу ли я просто получить список объектов QgsFeature?
Дж. Тейлор
Вы должны задать это как отдельный вопрос
г-н Пурпур
5

Предполагая, что у вас есть слой с именем «overlay» и загружен еще один «layer_to_clip».

# 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")
Франциско Пуга
источник