python 콘솔에서 pyQGIS의 클립 함수를 호출 하시겠습니까?


11

파이썬 콘솔에서 QQGIS의 클립 함수를 호출하는 방법이 있습니까? 벡터 메뉴의 지오 프로세싱 도구 아래에 있습니다.


Ok multiparts to singleparts 기능을 먼저 사용하여 수정했습니다. 그런 다음 작동합니다.
Toke

답변:


11

물론 프로세싱 툴박스에서 기능을 얻을 수 있습니다. 사용 방법은 다음과 같습니다. http://docs.qgis.org/2.8/en/docs/user_manual/processing/console.html에 따라

콘솔에서 다음을 입력하여 "clip"이라는 단어가 포함 된 사용 가능한 모든 알고리즘 목록을 얻을 수 있습니다.

import processing
processing.alglist("clip")

그런 다음 가장 적합한 기능을 사용하는 방법을 찾을 수 있습니다.

processing.alghelp("qgis:clip")

그런 다음 스크립트에서 다음과 같이 알고리즘을 사용하십시오.

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

참고 : 알고리즘은 선택된 기능에서만 작동합니다. "

위의 코드는 alglist 예제의 3.0 이상에서는 유효하지 않습니다.

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

alghelp 예제의 경우 다음을 수행 할 수 있습니다.

processing.algorithmHelp("qgis:clip")

QGIS3의 경우이 질문을 참조하십시오.

QGIS 3.0 프로세싱의 새로운 alglist와 alghelp는 무엇입니까?


이 주제를 다시 생생하게해서 죄송하지만이 작업을 수행 한 적이 없으며 이제는 다시 필요합니다. pyhton 콘솔에서 Layer = qgis.utils.iface.activeLayer()와로 두 레이어를 얻습니다 InputLayer = qgis.utils.iface.activeLayer(). 그런 다음 사용 processing.runandload("qgis:clip",InputLayer,Layer,"output_file.shp")하고 새 레이어가 이름이 Clipped 인 레이어 메뉴에 추가됩니다 . 그러나 레이어가 비어 있습니다. Qgis 내에서 클립 기능과 함께이 두 레이어를 사용하면 출력 레이어에 클리핑 선이 생깁니다. 무엇이 잘못 될 수 있습니까? 오류가 발생하지 않습니다.
Toke

두 개의 다각형을 사용하면 작동하지만 내 레이어 중 하나는 다각형이 아닌 선입니다. 여기에는 여러 줄이 포함되어 있으며 Qgis에서 클리핑 할 때이 레이어를 클리핑에 사용할 수 있습니다.
Toke

2
클립하려는 기능을 선택해야합니다. 이것을 반영하기 위해 답변을 편집했습니다.
Mr Purple

실제로 shapefile을 만들지 않고 어떻게 할 수 있습니까? 점 데이터의 단일 레이어에 대한 오버레이로 각각을 사용하여 반복하려는 수백 개의 디스크 모양의 다각형이있는 레이어가 있습니다. 어떻게 든 QgsFeature 객체 목록을 얻을 수 있습니까?
J. Taylor

별도의 질문으로 질문해야합니다
Mr Purple

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)

참고 : 알고리즘 출력은 기본 레이어와 동일한 지오메트리를 갖습니다.


참고 문헌 :

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.