Criando camada raster a partir de um array numpy usando pyqgis?

9

Estou trabalhando em um plugin para o Qgis para calcular mapas de densidade espacial do Kernel. Tenho todos os cálculos funcionando, tudo o que falta é uma maneira de transformar um Numpy Array, com valores de densidade em uma camada raster multibanda.

Preciso criar um geotiff em um arquivo temporário usando o Gdal e carregá-lo?

Ou existe uma maneira direta de criar a camada a partir de dados na memória?

Se for o caso, como fazer?

fccoelho
fonte

Respostas:

5

Aqui está o código que eu uso para converter uma matriz em gdal raster, salvando-a no disco, "param" é um dicicionário que contém parâmetros gdal (verifique a documentação da gdal) e "matriz" é uma matriz numpy. Você pode instanciar um QgsMapLayer com seu arquivo como fonte. Você precisa criar o geotiff no disco.

    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
fonte
Obrigado, qual é o tamanho do pixel? (xmax-xmin) / x_pixels?
Fccoelho 25/09/12
quais são os 0s no SetGeoTransform?
Fccoelho 25/09/12
Para todas as perguntas, verifique aqui - SetGeoTransform: gdal.org/…
Pablo