#!/usr/bin/env python3 # # Author: Bekaert David # Year: 2017 import os import sys import argparse from osgeo import gdal import isce import isceobj # command line parsing of input file def cmdLineParse(): ''' Command line parser. ''' parser = argparse.ArgumentParser(description='Generate ISCE xml from gdal products') parser.add_argument('-i','--input', dest='fname', type=str, required=True, help='Input filename (GDAL supported)') return parser.parse_args() def gdal2isce_xml(fname): """ Generate ISCE xml file from gdal supported file Example: import isce from applications.gdal2isce_xml import gdal2isce_xml xml_file = gdal2isce_xml(fname+'.vrt') """ # open the GDAL file and get typical data informationi GDAL2ISCE_DATATYPE = { 1 : 'BYTE', 2 : 'uint16', 3 : 'SHORT', 4 : 'uint32', 5 : 'INT', 6 : 'FLOAT', 7 : 'DOUBLE', 10: 'CFLOAT', 11: 'complex128', } # GDAL2NUMPY_DATATYPE = { # 1 : np.uint8, # 2 : np.uint16, # 3 : np.int16, # 4 : np.uint32, # 5 : np.int32, # 6 : np.float32, # 7 : np.float64, # 10: np.complex64, # 11: np.complex128, # } # check if the input file is a vrt fbase, fext = os.path.splitext(fname) print(fext) if fext == ".vrt": outname = fbase else: outname = fname print(outname) # open the GDAL file and get typical ds information ds = gdal.Open(fname, gdal.GA_ReadOnly) width = ds.RasterXSize length = ds.RasterYSize bands = ds.RasterCount print("width: " + "\t" + str(width)) print("length: " + "\t" + str(length)) print("num of bands:" + "\t" + str(bands)) # getting the datatype information raster = ds.GetRasterBand(1) dataTypeGdal = raster.DataType # user look-up dictionary from gdal to isce format dataType= GDAL2ISCE_DATATYPE[dataTypeGdal] print("dataType: " + "\t" + str(dataType)) # transformation contains gridcorners (lines/pixels or lonlat and the spacing 1/-1 or deltalon/deltalat) transform = ds.GetGeoTransform() # if a complex data type, then create complex image # if a real data type, then create a regular image img = isceobj.createImage() img.setFilename(os.path.abspath(outname)) img.setWidth(width) img.setLength(length) img.setAccessMode('READ') img.bands = bands img.dataType = dataType # interleave md = ds.GetMetadata('IMAGE_STRUCTURE') sch = md.get('INTERLEAVE', None) if sch == 'LINE': img.scheme = 'BIL' elif sch == 'PIXEL': img.scheme = 'BIP' elif sch == 'BAND': img.scheme = 'BSQ' else: print('Unrecognized interleaving scheme, {}'.format(sch)) if bands < 2: print('Assuming default, BIP') img.scheme = 'BIP' else: print('Assuming default, BSQ') img.scheme = 'BSQ' img.firstLongitude = transform[0] img.firstLatitude = transform[3] img.deltaLatitude = transform[5] img.deltaLongitude = transform[1] xml_file = outname + ".xml" img.dump(xml_file) return xml_file # main script if __name__ == '__main__': ''' Main driver. ''' # Parse command line inps = cmdLineParse() # check if the input file exist if not os.path.isfile(inps.fname): raise Exception('Input file is not found ....') gdal2isce_xml(inps.fname)