def read_giant_xml(fname): odict = {} root = objectify.parse(fname).getroot() if root.find('master') is not None: comp = root['master'] for key in ['wavelength', 'incidence']: odict[key] = comp[key].value if root.find('subimage') is not None: comp = root['subimage'] for key in ['width', 'length', 'xmin', 'xmax', 'ymin', 'ymax', 'rxmin', 'rxmax', 'rymin', 'rymax']: odict[key] = comp[key].value odict = readfile.standardize_metadata(odict, standardKeys=key_giant2mintpy) odict['REF_Y'] = int((int(odict['rymin']) + int(odict['rymax'])) / 2. + 0.5) odict['REF_X'] = int((int(odict['rxmin']) + int(odict['rxmax'])) / 2. + 0.5) if root.find('proc/masterdate') is not None: odict['REF_DATE'] = root['proc']['masterdate'].value return odict
def extract_isce_metadata(meta_file, geom_dir=None, rsc_file=None, update_mode=True): """Extract metadata from ISCE stack products Parameters: meta_file : str, path of metadata file, reference/IW1.xml or referenceShelve/data.dat geom_dir : str, path of geometry directory. rsc_file : str, output file name of ROIPAC format rsc file Returns: metadata : dict """ if not rsc_file: rsc_file = os.path.join(os.path.dirname(meta_file), 'data.rsc') # check existing rsc_file if update_mode and ut.run_or_skip( rsc_file, in_file=meta_file, check_readable=False) == 'skip': return readfile.read_roipac_rsc(rsc_file) # 1. extract metadata from XML / shelve file fbase = os.path.basename(meta_file) if fbase.startswith("IW"): print('extract metadata from ISCE/topsStack xml file:', meta_file) #metadata = extract_tops_metadata(meta_file)[0] metadata = isce_utils.extract_tops_metadata(meta_file)[0] metadata['sensor_type'] = 'tops' elif fbase.startswith("data"): print('extract metadata from ISCE/stripmapStack shelve file:', meta_file) #metadata = extract_stripmap_metadata(meta_file)[0] metadata = isce_utils.extract_stripmap_metadata(meta_file)[0] metadata['sensor_type'] = 'stripmap' elif fbase.endswith(".xml"): #metadata = extract_stripmap_metadata(meta_file)[0] metadata = isce_utils.extract_stripmap_metadata(meta_file)[0] else: raise ValueError( "unrecognized ISCE metadata file: {}".format(meta_file)) # 2. extract metadata from geometry file if geom_dir: metadata = isce_utils.extract_geometry_metadata(geom_dir, metadata) # 3. common metadata metadata['PROCESSOR'] = 'isce' metadata['ANTENNA_SIDE'] = '-1' # convert all value to string format for key, value in metadata.items(): metadata[key] = str(value) # write to .rsc file metadata = readfile.standardize_metadata(metadata) if rsc_file: print('writing ', rsc_file) writefile.write_roipac_rsc(metadata, rsc_file) return metadata
def extract_isce_metadata(meta_file, geom_dir=None, rsc_file=None, update_mode=True): """Extract metadata from ISCE stack products Parameters: meta_file : str, path of metadata file, reference/IW1.xml or referenceShelve/data.dat geom_dir : str, path of geometry directory. rsc_file : str, output file name of ROIPAC format rsc file. None for not write to disk. Returns: meta : dict frame : object, isceobj.Scene.Frame.Frame / isceobj.Scene.Burst.Burst """ # check existing rsc_file if update_mode and ut.run_or_skip( rsc_file, in_file=meta_file, check_readable=False) == 'skip': return readfile.read_roipac_rsc(rsc_file), None # 1. read/extract metadata from XML / shelve file processor = get_processor(meta_file) if processor == 'tops': print('extract metadata from ISCE/topsStack xml file:', meta_file) meta, frame = extract_tops_metadata(meta_file) elif processor == 'alosStack': print('extract metadata from ISCE/alosStack xml file:', meta_file) meta, frame = extract_alosStack_metadata(meta_file, geom_dir) else: print('extract metadata from ISCE/stripmapStack shelve file:', meta_file) meta, frame = extract_stripmap_metadata(meta_file) # 2. extract metadata from geometry file if geom_dir: if processor != 'alosStack': meta = extract_geometry_metadata(geom_dir, meta) # 3. common metadata meta['PROCESSOR'] = 'isce' if 'ANTENNA_SIDE' not in meta.keys(): meta['ANTENNA_SIDE'] = '-1' # convert all value to string format for key, value in meta.items(): meta[key] = str(value) # write to .rsc file meta = readfile.standardize_metadata(meta) if rsc_file: print('writing ', rsc_file) writefile.write_roipac_rsc(meta, rsc_file) return meta, frame
def prepare_metadata4giant(fname, meta_files=None): """Extract metadata from xml files for GIAnT time-series file.""" # check xml files if not meta_files: meta_files = auto_xml_file4giant(fname) if not meta_files: raise FileNotFoundError("no xml file found.") # extract metadata from xml files rsc_files = [i for i in meta_files if i.endswith('.rsc')] xml_files = [i for i in meta_files if i.endswith('.xml')] xml_dict = {} for rsc_file in rsc_files: print('reading {}'.format(rsc_file)) rsc_dict = readfile.read_roipac_rsc(rsc_file) for key in ['length', 'LENGTH', 'FILE_LENGTH', 'width', 'WIDTH']: try: rsc_dict.pop(key) except: pass xml_dict.update(rsc_dict) for xml_file in xml_files: print('reading {}'.format(xml_file)) xml_dict.update(read_giant_xml(xml_file)) if not xml_dict: raise ValueError('No metadata found in file: ' + xml_file) # standardize metadata names xml_dict = readfile.standardize_metadata(xml_dict) # project name sensor_name, project_name = sensor.project_name2sensor_name( os.path.abspath(fname)) if sensor_name: xml_dict['PLATFORM'] = sensor_name if project_name: xml_dict['PROJECT_NAME'] = project_name if sensor_name in project_name: tmp = project_name.split(sensor_name)[1][0] if tmp == 'A': xml_dict['ORBIT_DIRECTION'] = 'ASCENDING' else: xml_dict['ORBIT_DIRECTION'] = 'DESCENDING' # update GIAnT HDF5 file fname = ut.add_attribute(fname, xml_dict, print_msg=True) return fname
def prepare_metadata4giant(fname, meta_files=None): """Extract metadata from xml files for GIAnT time-series file.""" # check xml files if not meta_files: meta_files = auto_xml_file4giant(fname) if not meta_files: raise FileNotFoundError("no xml file found.") # extract metadata from xml files rsc_files = [i for i in meta_files if i.endswith('.rsc')] xml_files = [i for i in meta_files if i.endswith('.xml')] xml_dict = {} for rsc_file in rsc_files: print('reading {}'.format(rsc_file)) rsc_dict = readfile.read_roipac_rsc(rsc_file) for key in ['length', 'LENGTH', 'FILE_LENGTH', 'width', 'WIDTH']: try: rsc_dict.pop(key) except: pass xml_dict.update(rsc_dict) for xml_file in xml_files: print('reading {}'.format(xml_file)) xml_dict.update(read_giant_xml(xml_file)) if not xml_dict: raise ValueError('No metadata found in file: '+xml_file) # standardize metadata names xml_dict = readfile.standardize_metadata(xml_dict) # project name sensor_name, project_name = sensor.project_name2sensor_name(os.path.abspath(fname)) if sensor_name: xml_dict['PLATFORM'] = sensor_name if project_name: xml_dict['PROJECT_NAME'] = project_name if sensor_name in project_name: tmp = project_name.split(sensor_name)[1][0] if tmp == 'A': xml_dict['ORBIT_DIRECTION'] = 'ASCENDING' else: xml_dict['ORBIT_DIRECTION'] = 'DESCENDING' # update GIAnT HDF5 file fname = ut.add_attribute(fname, xml_dict, print_msg=True) return fname
def extract_isce_metadata(meta_file, geom_dir=None, rsc_file=None, update_mode=True): """Extract metadata from ISCE stack products Parameters: meta_file : str, path of metadata file, master/IW1.xml or masterShelve/data.dat geom_dir : str, path of geometry directory. rsc_file : str, output file name of ROIPAC format rsc file Returns: metadata : dict """ if not rsc_file: rsc_file = os.path.join(os.path.dirname(meta_file), 'data.rsc') # check existing rsc_file if update_mode and ut.run_or_skip( rsc_file, in_file=meta_file, check_readable=False) == 'skip': return readfile.read_roipac_rsc(rsc_file) # 1. read/extract metadata from XML / shelve file processor = get_processor(meta_file) if processor == 'tops': print('extract metadata from ISCE/topsStack xml file:', meta_file) metadata = extract_tops_metadata(meta_file)[0] else: print('extract metadata from ISCE/stripmapStack shelve file:', meta_file) metadata = extract_stripmap_metadata(meta_file)[0] # 2. extract metadata from geometry file if geom_dir: metadata = extract_geometry_metadata(geom_dir, metadata) # 3. common metadata metadata['PROCESSOR'] = 'isce' metadata['ANTENNA_SIDE'] = '-1' # convert all value to string format for key, value in metadata.items(): metadata[key] = str(value) # write to .rsc file metadata = readfile.standardize_metadata(metadata) if rsc_file: print('writing ', rsc_file) writefile.write_roipac_rsc(metadata, rsc_file) return metadata
def extract_isce_metadata(meta_file, geom_dir=None, rsc_file=None, update_mode=True): """Extract metadata from ISCE stack products Parameters: meta_file : str, path of metadata file, master/IW1.xml or masterShelve/data.dat geom_dir : str, path of geometry directory. rsc_file : str, output file name of ROIPAC format rsc file Returns: metadata : dict """ if not rsc_file: rsc_file = os.path.join(os.path.dirname(meta_file), 'data.rsc') # check existing rsc_file if update_mode and ut.run_or_skip(rsc_file, in_file=meta_file, check_readable=False) == 'skip': return readfile.read_roipac_rsc(rsc_file) # 1. extract metadata from XML / shelve file fbase = os.path.basename(meta_file) if fbase.startswith("IW"): print('extract metadata from ISCE/topsStack xml file:', meta_file) metadata = extract_tops_metadata(meta_file) elif fbase.startswith("data"): print('extract metadata from ISCE/stripmapStack shelve file:', meta_file) metadata = extract_stripmap_metadata(meta_file) elif fbase.endswith(".xml"): metadata = extract_stripmap_metadata(meta_file) else: raise ValueError("unrecognized ISCE metadata file: {}".format(meta_file)) # 2. extract metadata from geometry file if geom_dir: metadata = extract_geometry_metadata(geom_dir, metadata) # 3. common metadata metadata['PROCESSOR'] = 'isce' metadata['ANTENNA_SIDE'] = '-1' # convert all value to string format for key, value in metadata.items(): metadata[key] = str(value) # write to .rsc file metadata = readfile.standardize_metadata(metadata) if rsc_file: print('writing ', rsc_file) writefile.write_roipac_rsc(metadata, rsc_file) return metadata
def extract_gmtsar_metadata(unw_file, template_file, rsc_file=None, update_mode=True): """Extract metadata from GMTSAR interferogram stack.""" # update_mode: check existing rsc_file if update_mode and ut.run_or_skip(rsc_file, in_file=unw_file, check_readable=False) == 'skip': return readfile.read_roipac_rsc(rsc_file) ifg_dir = os.path.dirname(unw_file) # 1. read *.PRM file prm_file = get_prm_files(ifg_dir)[0] meta = readfile.read_gmtsar_prm(prm_file) meta['PROCESSOR'] = 'gmtsar' # 2. read template file: HEADING, ORBIT_DIRECTION template = readfile.read_template(template_file) for key in ['HEADING', 'ORBIT_DIRECTION']: if key in template.keys(): meta[key] = template[key].lower() else: raise ValueError('Attribute {} is missing! Please manually specify it in the template file.') # 3. grab A/RLOOKS from radar-coord data file meta['ALOOKS'], meta['RLOOKS'] = get_multilook_number(ifg_dir) meta['AZIMUTH_PIXEL_SIZE'] *= meta['ALOOKS'] meta['RANGE_PIXEL_SIZE'] *= meta['RLOOKS'] # 4. grab LAT/LON_REF1/2/3/4 from geo-coord data file meta = get_lalo_ref(ifg_dir, meta) # 5. grab X/Y_FIRST/STEP from unw_file if in geo-coord ds = gdal.Open(unw_file, gdal.GA_ReadOnly) transform = ds.GetGeoTransform() x_step = abs(transform[1]) y_step = abs(transform[5]) * -1. if 1e-7 < x_step < 1.: meta['X_STEP'] = x_step meta['Y_STEP'] = y_step meta['X_FIRST'] = transform[0] - x_step / 2. meta['Y_FIRST'] = transform[3] - y_step / 2. # constrain longitude within (-180, 180] if meta['X_FIRST'] > 180.: meta['X_FIRST'] -= 360. # 6. extra metadata for the missing geometry dataset: SLANT_RANGE_DISTANCE / INCIDENCE_ANGLE # for dataset in geo-coordinates if 'Y_FIRST' in meta.keys(): meta = get_slant_range_distance(ifg_dir, meta) Re = float(meta['EARTH_RADIUS']) H = float(meta['HEIGHT']) Rg = float(meta['SLANT_RANGE_DISTANCE']) Inc = (np.pi - np.arccos((Re**2 + Rg**2 - (Re+H)**2) / (2*Re*Rg))) * 180./np.pi meta['INCIDENCE_ANGLE'] = Inc # convert all value to string format for key, value in meta.items(): meta[key] = str(value) # write to .rsc file meta = readfile.standardize_metadata(meta) if rsc_file: print('writing ', rsc_file) os.makedirs(os.path.dirname(rsc_file), exist_ok=True) writefile.write_roipac_rsc(meta, rsc_file) return meta