Setelah pembaruan ke Qgis 3.0, menjadi sangat sulit untuk menemukan informasi mengenai penulisan skrip pemrosesan di Qgis 3.0.
@Underdark (lihat di sini ) telah memberikan dasar untuk kerangka. Kode ini juga tampaknya telah ditambahkan dalam Qgis, saat menulis skrip baru dari templat (Qgis 3.0.2).
Namun, saya tidak dapat menemukan cara untuk membantu pemula python seperti saya untuk memahami cara mengubah kode itu, terutama untuk lapisan input dan output.
Tujuan saya adalah menulis skrip yang mengambil 2 layer raster dan double sebagai input, menghasilkan dua layer.
Apa perubahan yang diperlukan pada kode contoh untuk memperbolehkannya?
Untuk Qgis 2.x saya akan menggunakan sintaks berikut:
##Layer1=raster
##Layer2=raster
##myDouble=Double
##OutLayer1=output raster
##OutLayer2=output raster
Dari apa yang saya mengerti, perubahan harus dilakukan dalam prosedur berikut, tetapi saya tidak yakin apa yang harus dilakukan.
def initAlgorithm(self, config=None):
self.addParameter(QgsProcessingParameterFeatureSource(
self.INPUT,
self.tr("Input layer"),
[QgsProcessing.TypeVectorAnyGeometry]))
self.addParameter(QgsProcessingParameterFeatureSink(
self.OUTPUT,
self.tr("Output layer"),
QgsProcessing.TypeVectorAnyGeometry))
Pada 16 Mei, dokumentasi API python Qgis dirilis. Namun masih belum jelas bagi saya bagaimana menggunakannya di sini. (Yang mungkin sangat kurangnya pengetahuan python)
Jawaban:
Dengan transisi dari QGIS2.x ke QGIS3.x seluruh kerangka kerja pemrosesan telah dikerjakan ulang dan sebagian besar dijalankan sekarang sebagai kelas C ++ yang dapat Anda berinteraksi dengan menggunakan Python. Sayangnya sintaks parameter sederhana untuk data / dataset IO tidak lagi valid. Struktur parameter baru jauh lebih berorientasi setelah algoritma Pemrosesan bawaan (Python-) yang Anda temukan sudah diinstal sebelumnya di kotak peralatan.
Seperti yang saya lihat, Anda sudah mengikuti deskripsi struktur algoritma baru oleh @underdark. Tetapi untuk menyesuaikan struktur ini untuk kebutuhan Anda (layer raster, input ganda, dll.) Anda harus mengubah kode di beberapa lokasi dalam skrip. Saya telah memberi kode contoh kasar dengan penjelasan singkat untuk Anda (hanya kerangka algoritma berdasarkan contoh @underdarks):
Langkah mana yang dilakukan?
QgsProcessingAlgorithm
.INPUT_RASTER_A = 'INPUT_RASTER_A'
) Untuk referensi algoritma Anda dengan parameter yang disediakan oleh kerangka kerja pemrosesan.QgsProcessingParameterType
- dalam kasus algoritma Anda:QgsProcessingParameterRasterLayer
,QgsProcessingParameterNumber
, dan sebagainya. Anda dapat berkonsultasi entri API (mis.QgsProcessingParameterRasterLayer
) Untuk memberikan argumen yang benar dan membangun objek parameter.context
danfeedback
objek keprocessAlgorithm()
metode di mana Anda mendapatkan dataset input dari parameter saat runtime (dalam hal ini objek QgsRasterLayer dengan menggunakanparameterAsRasterLayer()
metode, dll.).processAlgorithm()
.Saya harap saya bisa memberi Anda beberapa wawasan tentang bagaimana merancang algoritma python Anda di QGIS3. Setiap kali Anda macet, selalu membantu untuk melihat bagaimana algoritma yang ada dari kerangka kerja menangani parameter. Anda dapat melihatnya di sini .
sumber