Membuat layer raster dari array numpy menggunakan pyqgis?

9

Saya sedang mengerjakan plugin untuk Qgis untuk menghitung peta kerapatan kernel spasial. Saya memiliki semua perhitungan yang berfungsi, semua yang saya lewatkan adalah cara untuk mengubah Numpy Array, dengan nilai kepadatan menjadi lapisan raster multiband.

Apakah saya harus membuat geotiff pada file temp menggunakan Gdal dan kemudian memuatnya?

Atau adakah cara langsung untuk membuat layer dari data dalam memori?

jika demikian, bagaimana cara melakukannya?

fccoelho
sumber

Jawaban:

5

Berikut adalah kode yang saya gunakan untuk mengonversi array ke gdal raster, menyimpannya ke disk, "param" adalah kamus yang berisi parameter gdal (periksa dokumentasi gdal) dan "array" adalah array yang numpy. Daripada Anda dapat instantiate QgsMapLayer dengan file Anda sebagai sumber. Anda harus membuat geotiff di disk.

    from osgeo import gdal as osgdal  # Adapt the import to fit yor environement.

    driver = osgdal.GetDriverByName(param['out_format'])

    dataset = driver.Create(
            param['dst_filename'],
            param['x_pixels'],
            param['y_pixels'],
            1,
            osgdal.GDT_Float32,
            )

    dataset.SetGeoTransform((
            param['xmin'],           #0
            param['pixel_size'],     #1
            0,                       #2
            param['ymin'],           #3
            0,                       #4
            param['pixel_size']))    #5

    out_srs = osr.SpatialReference()
    out_srs.ImportFromEPSG(param['SRID'])

    dataset.SetProjection(out_srs.ExportToWkt())
    dataset.GetRasterBand(1).WriteArray(array.T)  # Remove "T" if it's inverted.
    dataset = None
Pablo
sumber
Terima kasih, apa itu ukuran piksel? (xmax-xmin) / x_pixels?
fccoelho
apa saja 0s dalam SetGeoTransform?
fccoelho
Untuk semua pertanyaan, periksa di sini - SetGeoTransform: gdal.org/…
Pablo