Wywoływanie funkcji klipu w pyQGIS z konsoli Pythona?


11

Czy istnieje sposób na wywołanie funkcji klipu w QQGIS z konsoli Pythona? Znajduje się pod narzędziami geoprzetwarzania w menu wektorowym.


Ok, naprawiłem to, używając najpierw funkcji multiparts do singleparts. To działa.
Toke

Odpowiedzi:


11

Jasne, możesz uzyskać tę funkcję z przybornika przetwarzania. Oto jak z niego korzystać: zgodnie z http://docs.qgis.org/2.8/en/docs/user_manual/processing/console.html

Z konsoli można uzyskać listę wszystkich dostępnych algorytmów zawierających słowo „klip”, wpisując:

import processing
processing.alglist("clip")

Następnie możesz dowiedzieć się, jak korzystać z najbardziej odpowiedniej funkcji za pomocą:

processing.alghelp("qgis:clip")

Następnie po prostu użyj algorytmu w skrypcie w następujący sposób:

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

Uwaga: algorytm będzie działał tylko na wybranych funkcjach ”

Uwaga: powyższy kod jest nieprawidłowy dla wersji 3.0+ dla przykładu alglist, który możesz wykonać:

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

na przykład alghelp możesz zrobić:

processing.algorithmHelp("qgis:clip")

W przypadku QGIS3 zobacz to pytanie:

Co to jest nowa alglist i alghelp w przetwarzaniu QGIS 3.0?


Przepraszam, że ożywiłem ten temat, ale nigdy nie sprawiłem, że działa, a teraz potrzebuję go ponownie. W konsoli pyhonona dostaję dwie warstwy przez Layer = qgis.utils.iface.activeLayer()i InputLayer = qgis.utils.iface.activeLayer(). Następnie używam processing.runandload("qgis:clip",InputLayer,Layer,"output_file.shp")i nowa warstwa jest dodawana do menu Warstwy o nazwie Obcięty . Ale warstwa jest pusta. Jeśli użyję tych dwóch warstw z funkcją klipu w Qgis, warstwa wyjściowa ma linie z wycięcia. Ktoś, kto może być nie tak? Nie otrzymuję żadnych błędów.
Toke

Działa, jeśli używam dwóch wielokątów, ale jedna z moich warstw to linia, a nie wielokąt. Zawiera kilka linii i mogę użyć tej warstwy do przycinania podczas robienia tego w Qgis.
Toke

2
Musisz wybrać funkcje, które chcesz przyciąć. Zredagowałem odpowiedź, aby to odzwierciedlić.
Mr Purple

Jak można to zrobić bez tworzenia plików kształtów? Mam warstwę z setkami wielokątów w kształcie dysku, które chcę iterować, wykorzystując każdą z nich jako nakładkę dla pojedynczej warstwy danych punktowych. Czy zamiast tego mogę w jakiś sposób uzyskać listę obiektów QgsFeature?
J. Taylor,

Powinieneś zadać to jako osobne pytanie
Mr Purple

5

Zakładając, że masz warstwę o nazwie „nakładka” i kolejną o nazwie „warstwa_do_clipa”.

# 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

W najnowszej wersji PyQGIS powinien on działać w następujący sposób

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)

Uwaga: Dane wyjściowe algorytmu będą miały tę samą geometrię co warstwa główna


Bibliografia:

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.