Python konsolundan pyQGIS'de klip işlevi mi arıyorsunuz?


11

Python konsolundan QQGIS'de klip işlevini çağırmanın bir yolu var mı? Vektör menüsünde coğrafi işleme araçları altında bulunur.


Tamam önce singleparts işlevine multiparts kullanarak sabit. Sonra işe yarıyor.
Toke

Yanıtlar:


11

Tabii İşlevi işlem araç kutusundan alabilirsiniz. Bunu nasıl kullanacağınız: http://docs.qgis.org/2.8/en/docs/user_manual/processing/console.html uyarınca

Konsoldan, "klip" kelimesini içeren tüm algoritmaların bir listesini yazarak alabilirsiniz:

import processing
processing.alglist("clip")

Ardından, en uygun fonksiyonun nasıl göründüğünü nasıl kullanacağınızı öğrenebilirsiniz:

processing.alghelp("qgis:clip")

Ardından komut dosyanızdaki algoritmayı aşağıdaki gibi kullanın:

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

Not: Algoritma yalnızca kesilmiş özelliklerde çalışır "

Yukarıdaki kod, alglist örneği için 3.0+ için geçersizdir:

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

alghelp örneği için şunları yapabilirsiniz:

processing.algorithmHelp("qgis:clip")

QGIS3 için şu soruya bakın:

QGIS 3.0 İşleme'deki yeni alglist ve alghelp nedir?


Bu konuyu tekrar hayata döndürdüğüm için özür dilerim, ama asla bu işe yaramadı ve şimdi tekrar lazım. Pyhton konsolunda iki katmanı Layer = qgis.utils.iface.activeLayer()and ile alıyorum InputLayer = qgis.utils.iface.activeLayer(). Sonra kullanıyorum processing.runandload("qgis:clip",InputLayer,Layer,"output_file.shp")ve yeni katman, Katmanlar menüsüne Kırpılmış adıyla ekleniyor . Ancak katman boş. Bu iki katmanı Qgis içindeki klip işleviyle birlikte kullanırsam, çıktı katmanında kırpma çizgileri olur. Ne yanlış olabilir ki? Herhangi bir hata almıyorum.
Toke

İki çokgen kullanırsam çalışır, ancak katmanlarımdan biri çokgen değil bir çizgi. Birkaç satır içerir ve bu katmanı Qgis'te yaparken kırpma için kullanabilirim.
Toke

2
Kırpmak istediğiniz özelliklerin seçili olması gerekir. Cevabı bunu yansıtacak şekilde düzenledim.
Bay Mor

Aslında şekil dosyaları oluşturmadan bunu nasıl yaparsınız? Her biri tek bir nokta veri katmanı için bir bindirme kullanarak, yineleme yapmak istediğim yüzlerce disk şeklinde çokgen içeren bir katmanım var. Bunun yerine bir şekilde QgsFeature nesnelerinin listesini alabilir miyim?
J. Taylor

Bunu ayrı bir soru olarak sormalısınız
Bay Purple

5

"Katman" ve "layer_to_clip" adında bir katmanınız olduğu varsayılarak.

# 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

En son PyQGIS sürümünde aşağıdaki gibi çalışmalıdır

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)

Not: Algoritmanın çıkışı, ana katmanla aynı geometriye sahip olacaktır


Referanslar:

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.