Search code examples
pythonarraysgistiffraster

Simplest way to save array into raster file in Python


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.


Solution

  • A tif raster could be considered as 'array+proj+geotransforms'. If you want to write an array to a tiff ,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