Memanggil fungsi klip di pyQGIS dari python console?

10

Apakah ada cara untuk memanggil fungsi klip di QQGIS dari konsol python? Ini ditemukan di bawah alat geoprocessing di menu vektor.

Toke
sumber
Ok saya memperbaikinya dengan menggunakan fungsi multiparts ke singleparts terlebih dahulu. Lalu berhasil.
Toke

Jawaban:

10

Tentu Anda bisa mendapatkan fungsinya dari kotak alat pemrosesan. Berikut cara menggunakannya: Sesuai http://docs.qgis.org/2.8/id/docs/user_manual/processing/console.html

Dari konsol Anda bisa mendapatkan daftar semua algoritma yang tersedia yang berisi kata "klip" dengan mengetik:

import processing
processing.alglist("clip")

Kemudian Anda bisa mengetahui cara menggunakan fungsi apa yang tampaknya paling sesuai dengan:

processing.alghelp("qgis:clip")

Kemudian cukup gunakan algoritma dalam skrip Anda sebagai berikut:

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

Catatan: Algoritme hanya akan berfungsi pada fitur yang digeser "

Catatan di atas kode tidak valid untuk 3.0+ untuk contoh alglist yang dapat Anda lakukan:

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

untuk contoh alghelp yang dapat Anda lakukan:

processing.algorithmHelp("qgis:clip")

Untuk QGIS3 lihat pertanyaan ini:

Apa alglist dan alghelp baru dalam Pemrosesan QGIS 3.0?

Tuan Ungu
sumber
Maaf telah menghidupkan topik ini lagi, tetapi tidak pernah membuat ini berhasil, dan sekarang saya membutuhkannya lagi. Di konsol pyhton saya mendapatkan dua lapisan dengan Layer = qgis.utils.iface.activeLayer()dan InputLayer = qgis.utils.iface.activeLayer(). Kemudian saya gunakan processing.runandload("qgis:clip",InputLayer,Layer,"output_file.shp")dan layer baru ditambahkan ke menu Layers dengan nama Terpotong . Tetapi lapisan itu kosong. Jika saya menggunakan dua layer ini dengan fungsi klip di dalam Qgis, layer output memiliki garis-garis dari kliping. Adakah yang salah? Saya tidak mendapatkan kesalahan.
Toke
Ini berfungsi jika saya menggunakan dua poligon, tetapi salah satu lapisan saya adalah garis dan bukan poligon. Ini berisi beberapa baris, dan saya bisa menggunakan layer ini untuk kliping saat melakukannya di Qgis.
Toke
2
Anda harus memiliki fitur yang ingin Anda klip dipilih. Saya telah mengedit jawaban untuk mencerminkan hal ini.
Tn. Purple
Bagaimana orang melakukan ini tanpa benar-benar membuat shapefile? Saya memiliki lapisan dengan ratusan poligon berbentuk cakram yang ingin saya ulas, gunakan masing-masing sebagai hamparan untuk satu lapisan data titik. Bisakah saya mendapatkan daftar objek QgsFeature saja?
J. Taylor
Anda harus mengajukan pertanyaan terpisah
Tn. Purple
5

Dengan asumsi bahwa Anda memiliki lapisan yang disebut "overlay" dan yang lain disebut "layer_to_clip" dimuat.

# 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")
Francisco Puga
sumber