답변:
물론 프로세싱 툴박스에서 기능을 얻을 수 있습니다. 사용 방법은 다음과 같습니다. 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의 경우이 질문을 참조하십시오.
Layer = qgis.utils.iface.activeLayer()
와로 두 레이어를 얻습니다 InputLayer = qgis.utils.iface.activeLayer()
. 그런 다음 사용 processing.runandload("qgis:clip",InputLayer,Layer,"output_file.shp")
하고 새 레이어가 이름이 Clipped 인 레이어 메뉴에 추가됩니다 . 그러나 레이어가 비어 있습니다. Qgis 내에서 클립 기능과 함께이 두 레이어를 사용하면 출력 레이어에 클리핑 선이 생깁니다. 무엇이 잘못 될 수 있습니까? 오류가 발생하지 않습니다.
"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")
최신 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)
참고 : 알고리즘 출력은 기본 레이어와 동일한 지오메트리를 갖습니다.
참고 문헌 :