Erstellen einer Rasterebene aus einem Numpy-Array mit pyqgis?

9

Ich arbeite an einem Plugin für Qgis, um räumliche Kernel-Dichtekarten zu berechnen. Ich habe alle Berechnungen, alles was mir fehlt ist eine Möglichkeit, ein Numpy Array mit Dichtewerten in eine Multiband-Rasterebene umzuwandeln.

Muss ich mit Gdal einen Geotiff für eine temporäre Datei erstellen und dann laden?

Oder gibt es eine direkte Möglichkeit, die Ebene aus Daten im Speicher zu erstellen?

Wenn ja, wie geht das?

fccoelho
quelle

Antworten:

5

Hier ist der Code, mit dem ich ein Array in ein gdal-Raster konvertiere und es auf der Festplatte speichere. "Param" ist ein Wörterbuch mit gdal-Parametern (siehe gdal-Dokumentation) und "array" ist ein numpy-Array. Dann können Sie einen QgsMapLayer mit Ihrer Datei als Quelle instanziieren . Sie müssen den Geotiff auf der Festplatte erstellen.

    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
quelle
Danke, was ist die Pixelgröße? (xmax-xmin) / x_pixel?
Fccoelho
Was sind die Nullen in der SetGeoTransform?
Fccoelho
Für alle Fragen überprüfen Sie hier - SetGeoTransform: gdal.org/…
Pablo