Simplest way to save array into raster file in Python

10,776

A tif raster could be considered as 'array+proj+geotransforms'. If you want to write a array to tif,you can refer to the following code

dst_filename = 'xxx.tiff'
x_pixels = 100  # number of pixels in x
y_pixels = 100  # number of pixels in y
driver = gdal.GetDriverByName('GTiff')
dataset = driver.Create(dst_filename,x_pixels, y_pixels, 1,gdal.GDT_Float32)
dataset.GetRasterBand(1).WriteArray(array)

# follow code is adding GeoTranform and Projection
geotrans=data0.GetGeoTransform()  #get GeoTranform from existed 'data0'
proj=data0.GetProjection() #you can get from a exsited tif or import 
dataset.SetGeoTransform(geotrans)
dataset.SetProjection(proj)
dataset.FlushCache()
dataset=None
Share:
10,776
Han Zhengzu
Author by

Han Zhengzu

I am a researcher focusing on atmospheric environment with an interest in a deeper understanding on air pollution.

Updated on June 05, 2022

Comments

  • Han Zhengzu
    Han Zhengzu almost 2 years

    With one 2-d array in the shape of (100, 100), I want to save it into raster file in .tiff format.

    I can use gdal package to read tiff files which are already exist. But I still can't find a simple way to transform the 2-d array into tiff file.

    Using plt.imsave("xx.tif",array) or

    def array_to_raster(array):
        """Array > Raster
        Save a raster from a C order array.
        :param array: ndarray
         """
        dst_filename = 'xxx.tiff'
        x_pixels = 100  # number of pixels in x
        y_pixels = 100  # number of pixels in y
        driver = gdal.GetDriverByName('GTiff')
        dataset = driver.Create(
               dst_filename,
               x_pixels,
               y_pixels,
               1,
               gdal.GDT_Float32, )
        dataset.GetRasterBand(1).WriteArray(array)
        dataset.FlushCache()  # Write to disk.
        return dataset, dataset.GetRasterBand(1)  
    

    They all failed to achieve my target. The second method was adapted from here which can transform an array into a geotiff with a projection.

    Is there some simple way to save array into .tiff, so I can call it by import the tiff file next time.

    Any advices would be appreciate.