Search code examples
python-3.xnumpygisgeospatialgdal

Conversion of numpy 2d array to ENVI binary file through gdal


I have SAR CEOS format files which consist of data file, leader file, null volume directory file and volume directory file.

I am reading the data file using gdal ReadAsArray and then I am doing operations on this 2d Array and now I want to save this 2d array as an ENVI binary file.

Kindly guide how to do this in Python 3.5.


Solution

    • Find help for Tutorial Website: https://pcjericks.github.io/py-gdalogr-cookbook/
    • Such as the example of

      import gdal, ogr, os, osr
      import numpy as np
      
      def array2raster(newRasterfn,rasterOrigin,pixelWidth,pixelHeight,array):
          cols = array.shape[1]
          rows = array.shape[0]
          originX = rasterOrigin[0]
          originY = rasterOrigin[1]
      
          driver = gdal.GetDriverByName('ENVI')
          outRaster = driver.Create(newRasterfn, cols, rows, 1, gdal.GDT_Byte)
          outRaster.SetGeoTransform((originX, pixelWidth, 0, originY, 0, pixelHeight))
          outband = outRaster.GetRasterBand(1)
          outband.WriteArray(array)
          outRasterSRS = osr.SpatialReference()
          outRasterSRS.ImportFromEPSG(4326)
          outRaster.SetProjection(outRasterSRS.ExportToWkt())
          outband.FlushCache()
      
      def main(newRasterfn,rasterOrigin,pixelWidth,pixelHeight,array):
          reversed_arr = array[::-1] # reverse array so the tif looks like the array
          array2raster(newRasterfn,rasterOrigin,pixelWidth,pixelHeight,reversed_arr) # convert array to raster
      
      if __name__ == "__main__":
          rasterOrigin = (-123.25745,45.43013)
          pixelWidth = 10
          pixelHeight = 10
          newRasterfn = 'test.tif'
          array = np.array([[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
                            [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
                            [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1],
                            [ 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1],
                            [ 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1],
                            [ 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1],
                            [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1],
                            [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
                            [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
                            [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])
      
          main(newRasterfn,rasterOrigin,pixelWidth,pixelHeight,array)