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


11

Чи є можливість викликати функцію кліпу в QQGIS з консолі python? Він знаходиться під інструментами геообробки у векторному меню.


Гаразд, я виправив це, використовуючи спочатку функцію мультичастин для одночастин. Тоді це працює.
Токе

Відповіді:


11

Впевнений, Ви можете отримати цю функцію з панелі інструментів для обробки. Ось як його використовувати: Відповідно до http://docs.qgis.org/2.8/uk/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+ для прикладу алголіста, який ви можете зробити:

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

для прикладу альгельпа ви можете зробити:

processing.algorithmHelp("qgis:clip")

Для QGIS3 див. Це питання:

Що таке новий алгіст та алгельп в обробці QGIS 3.0?


Вибачте за те, що знову ввімкнув цю тему, але ніколи не робив цю роботу, і зараз мені це потрібно знову. У консолі pyhton я отримую два шари по Layer = qgis.utils.iface.activeLayer()і InputLayer = qgis.utils.iface.activeLayer(). Потім я використовую processing.runandload("qgis:clip",InputLayer,Layer,"output_file.shp")і новий шар додається в меню Шари з назвою Відсічений . Але шар порожній. Якщо я використовую ці два шари з функцією кліпу в межах 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")

0

В останній версії PyQGIS вона повинна працювати наступним чином

from qgis.core import *

def clipping(layer_1, layer_2):
    layer_clip = processing.run('qgis:clip',
        {'INPUT': layer_1,
        'OVERLAY': layer_2,
        'OUTPUT': "memory:"}
    )["OUTPUT"]

    return QgsProject.instance().addMapLayer(layer_clip)

your_layer_1 = QgsProject.instance().mapLayersByName('layer_name_1')[0] # main layer
your_layer_2 = QgsProject.instance().mapLayersByName('layer_name_2')[0] # secondary layer

clipping(your_layer_1, your_layer_2)

Примітка: Вихід алгоритму матиме ту саму геометрію, що і основний шар


Список літератури:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.