def get_slant_range_distance(self, box=None): """Generate 2D slant range distance if missing from input template file""" if not self.extraMetadata: return None if 'Y_FIRST' in self.extraMetadata.keys(): # for dataset in geo-coordinates, use contant value from SLANT_RANGE_DISTANCE. key = 'SLANT_RANGE_DISTANCE' print('geocoded input, use contant value from metadata {}'.format( key)) if key in self.extraMetadata.keys(): length = int(self.extraMetadata['LENGTH']) width = int(self.extraMetadata['WIDTH']) range_dist = float(self.extraMetadata[key]) data = np.ones((length, width), dtype=np.float32) * range_dist else: return None else: # for dataset in radar-coordinates, calculate 2D pixel-wise value from geometry data = ut.range_distance(self.extraMetadata, dimension=2, print_msg=False) # subset if box is not None: data = data[box[1]:box[3], box[0]:box[2]] return data
def prepare_geometry(outfile, geom_dir, box, metadata): print('-'*50) print('preparing geometry file: {}'.format(outfile)) # copy metadata to meta meta = {key : value for key, value in metadata.items()} meta["FILE_TYPE"] = "temporalCoherence" fDict = { 'height' : os.path.join(geom_dir, 'hgt.rdr.full'), 'latitude' : os.path.join(geom_dir, 'lat.rdr.full'), 'longitude' : os.path.join(geom_dir, 'lon.rdr.full'), 'incidenceAngle' : os.path.join(geom_dir, 'los.rdr.full'), 'azimuthAngle' : os.path.join(geom_dir, 'los.rdr.full'), 'shadowMask' : os.path.join(geom_dir, 'shadowMask.rdr.full'), } # initiate dsDict dsDict = {} for dsName, fname in fDict.items(): dsDict[dsName] = readfile.read(fname, datasetName=dsName, box=box)[0] dsDict['slantRangeDistance'] = ut.range_distance(meta, dimension=2) # write data to HDF5 file writefile.write(dsDict, outfile, metadata=meta) return outfile
def get_slant_range_distance(self, box=None, xstep=1, ystep=1): """Generate 2D slant range distance if missing from input template file""" if not self.extraMetadata: return None print('prepare slantRangeDistance ...') if 'Y_FIRST' in self.extraMetadata.keys(): # for dataset in geo-coordinates, use: # 1) incidenceAngle matrix if available OR # 2) contant value from SLANT_RANGE_DISTANCE. ds_name = 'incidenceAngle' key = 'SLANT_RANGE_DISTANCE' if ds_name in self.dsNames: print(' geocoded input, use incidenceAngle from file: {}'. format(os.path.basename(self.datasetDict[ds_name]))) inc_angle = self.read(family=ds_name)[0].astype(np.float32) atr = readfile.read_attribute(self.file) if atr.get('PROCESSOR', 'isce') == 'hyp3' and atr.get( 'UNIT', 'degrees').startswith('rad'): print( ' convert incidence angle from Gamma to MintPy convention.' ) inc_angle = 90. - (inc_angle * 180. / np.pi) # inc angle -> slant range distance data = ut.incidence_angle2slant_range_distance( self.extraMetadata, inc_angle) elif key in self.extraMetadata.keys(): print('geocoded input, use contant value from metadata {}'. format(key)) length = int(self.extraMetadata['LENGTH']) width = int(self.extraMetadata['WIDTH']) range_dist = float(self.extraMetadata[key]) data = np.ones((length, width), dtype=np.float32) * range_dist else: return None else: # for dataset in radar-coordinates, calculate 2D pixel-wise value from geometry data = ut.range_distance(self.extraMetadata, dimension=2, print_msg=False) # subset if box is not None: data = data[box[1]:box[3], box[0]:box[2]] # multilook if xstep * ystep > 1: # output size if x/ystep > 1 xsize = int(data.shape[1] / xstep) ysize = int(data.shape[0] / ystep) # sampling data = data[int(ystep / 2)::ystep, int(xstep / 2)::xstep] data = data[:ysize, :xsize] return data
def get_slant_range_distance(self, box=None): if not self.extraMetadata or 'Y_FIRST' in self.extraMetadata.keys(): return None data = ut.range_distance(self.extraMetadata, dimension=2, print_msg=False) if box is not None: data = data[box[1]:box[3], box[0]:box[2]] return data
def get_slant_range_distance(self, box=None, xstep=1, ystep=1): """Generate 2D slant range distance if missing from input template file""" if not self.extraMetadata: return None if 'Y_FIRST' in self.extraMetadata.keys(): # for dataset in geo-coordinates, use: # 1) incidenceAngle matrix if available OR # 2) contant value from SLANT_RANGE_DISTANCE. ds_name = 'incidenceAngle' key = 'SLANT_RANGE_DISTANCE' if ds_name in self.dsNames: print('geocoded input, use incidenceAngle from file {}'.format( self.datasetDict[ds_name])) inc_angle = self.read(family=ds_name)[0].astype(np.float32) data = ut.incidence_angle2slant_range_distance( self.extraMetadata, inc_angle) elif key in self.extraMetadata.keys(): print('geocoded input, use contant value from metadata {}'. format(key)) length = int(self.extraMetadata['LENGTH']) width = int(self.extraMetadata['WIDTH']) range_dist = float(self.extraMetadata[key]) data = np.ones((length, width), dtype=np.float32) * range_dist else: return None else: # for dataset in radar-coordinates, calculate 2D pixel-wise value from geometry data = ut.range_distance(self.extraMetadata, dimension=2, print_msg=False) # subset if box is not None: data = data[box[1]:box[3], box[0]:box[2]] # multilook if xstep * ystep > 1: # output size if x/ystep > 1 xsize = int(data.shape[1] / xstep) ysize = int(data.shape[0] / ystep) # sampling data = data[int(ystep / 2)::ystep, int(xstep / 2)::xstep] data = data[:ysize, :xsize] return data
def get_slant_range_distance(self, box=None, xstep=1, ystep=1): """Generate 2D slant range distance if missing from input template file""" if not self.extraMetadata: return None if 'Y_FIRST' in self.extraMetadata.keys(): # for dataset in geo-coordinates, use contant value from SLANT_RANGE_DISTANCE. key = 'SLANT_RANGE_DISTANCE' print('geocoded input, use contant value from metadata {}'.format(key)) if key in self.extraMetadata.keys(): length = int(self.extraMetadata['LENGTH']) width = int(self.extraMetadata['WIDTH']) range_dist = float(self.extraMetadata[key]) data = np.ones((length, width), dtype=np.float32) * range_dist else: return None else: # for dataset in radar-coordinates, calculate 2D pixel-wise value from geometry data = ut.range_distance(self.extraMetadata, dimension=2, print_msg=False) # subset if box is not None: data = data[box[1]:box[3], box[0]:box[2]] # multilook if xstep * ystep > 1: # output size if x/ystep > 1 xsize = int(data.shape[1] / xstep) ysize = int(data.shape[0] / ystep) # sampling data = data[int(ystep/2)::ystep, int(xstep/2)::xstep] data = data[:ysize, :xsize] return data