Melakukan perhitungan raster pemodel QGIS dengan data dari CSV eksternal?

20

Saya perlu melakukan beberapa perhitungan pada seperangkat raster berdasarkan nilai dalam file metadata CSV.

Saya menggunakan pemodel grafis QGIS dan dapat memanggil bidang tertentu dalam CSV dengan Tabledan Table Fieldinput.

Karena saya memiliki beberapa raster, dan setiap raster memiliki nilai yang sesuai di CSV, bagaimana saya memanggil baris tertentu? (Mirip dengan pencarian misalnya).

Saya tidak ingin menambahkan skrip jika saya tidak perlu untuk kemudahan penggunaan.

HDunn
sumber
1
Mungkin akan lebih mudah untuk melakukan pendekatan ini dengan mengonversi raster ke file-file titik. Dari sana akan lebih mudah untuk membuat hubungan yang diperlukan antara kedua file. webhelp.esri.com/arcgisdesktop/9.3/…
Jamie2483
3
Buat daftar (kodesemu) dari tugas Anda. Ini akan memberi tahu Anda jika Anda perlu menggunakan skrip untuk melakukan pekerjaan Anda. Iterasi atau prosedur bersyarat adalah indikator Anda harus menggunakan skrip. Selesai dengan skrip struktur adalah teman Anda.
ragnvald

Jawaban:

2

Benar-benar posting lama tapi saya kira solusi yang mungkin adalah, sayangnya untuk kasus Anda, gunakan skrip di pemodel Anda yang:

  • Mengambil nama semua lapisan raster yang dimuat.
  • Iterate melalui metadata yang berisi kolom dengan nama raster.
  • Cocok dengan nama raster yang dimuat dengan yang ada di metadata.
  • Jika ada kecocokan ditemukan, nilai yang sesuai raster diekstraksi.

  1. Anda dapat membuat skrip dari:

    Processing Toolbox > Scripts > Tools > Create new script
    

    Kemudian gunakan sesuatu seperti berikut ini yang:

    ##Example=name
    ##Table=table
    ##Field=Field Table
    ##Output_value=output Number
    
    from qgis.core import QgsMapLayer, QgsMapLayerRegistry
    import csv
    
    raster_list = [layer.name() for layer in QgsMapLayerRegistry.instance().mapLayers().values() if layer.type() == QgsMapLayer.RasterLayer]
    with open(Table) as f:
        reader = csv.reader(f)
        for row in reader:
            for raster in raster_list:
                if raster in row[0]:
                    Output_value = row[1]
                    print Output_value
    

  1. Kemudian tambahkan skrip ke pemodel Anda (saya membuat contoh sederhana hanya dengan dua input):

    Pemodel

    Jika saya menjalankan model ini menggunakan skrip di atas, ia hanya mencetak nilai output dari metadata yang sesuai dengan nama raster:

    Hasil


  1. Bergantung pada bagaimana model Anda dikonstruksi dan kemungkinan mengubah skrip, Anda dapat melakukan beberapa perhitungan raster.
Yusuf
sumber