def topo(swath, track, demFile, latFile, lonFile, hgtFile, losFile=None, incFile=None, mskFile=None, numberRangeLooks=1, numberAzimuthLooks=1, multilookTimeOffset=True): import datetime import isceobj from zerodop.topozero import createTopozero from isceobj.Planet.Planet import Planet pointingDirection = {'right': -1, 'left': 1} demImage = isceobj.createDemImage() demImage.load(demFile + '.xml') demImage.setAccessMode('read') #####Run Topo planet = Planet(pname='Earth') topo = createTopozero() topo.slantRangePixelSpacing = numberRangeLooks * swath.rangePixelSize topo.prf = 1.0 / (numberAzimuthLooks * swath.azimuthLineInterval) topo.radarWavelength = track.radarWavelength topo.orbit = track.orbit topo.width = int(swath.numberOfSamples / numberRangeLooks) topo.length = int(swath.numberOfLines / numberAzimuthLooks) topo.wireInputPort(name='dem', object=demImage) topo.wireInputPort(name='planet', object=planet) topo.numberRangeLooks = 1 #must be set as 1 topo.numberAzimuthLooks = 1 #must be set as 1 Cunren topo.lookSide = pointingDirection[track.pointingDirection] if multilookTimeOffset == True: topo.sensingStart = swath.sensingStart + datetime.timedelta( seconds=(numberAzimuthLooks - 1.0) / 2.0 / swath.prf) topo.rangeFirstSample = swath.startingRange + ( numberRangeLooks - 1.0) / 2.0 * swath.rangePixelSize else: topo.sensingStart = swath.sensingStart topo.rangeFirstSample = swath.startingRange topo.demInterpolationMethod = 'BIQUINTIC' topo.latFilename = latFile topo.lonFilename = lonFile topo.heightFilename = hgtFile if losFile != None: topo.losFilename = losFile if incFile != None: topo.incFilename = incFile if mskFile != None: topo.maskFilename = mskFile topo.topo() return list(topo.snwe)
def runTopoCPU(info, demImage, dop=None, nativedop=False, legendre=False): from zerodop.topozero import createTopozero from isceobj.Planet.Planet import Planet if not os.path.isdir(info.outdir): os.makedirs(info.outdir) #####Run Topo planet = Planet(pname='Earth') topo = createTopozero() topo.slantRangePixelSpacing = info.slantRangePixelSpacing topo.prf = info.prf topo.radarWavelength = info.radarWavelength topo.orbit = info.orbit topo.width = info.width // info.numberRangeLooks topo.length = info.length // info.numberAzimuthLooks topo.wireInputPort(name='dem', object=demImage) topo.wireInputPort(name='planet', object=planet) topo.numberRangeLooks = info.numberRangeLooks topo.numberAzimuthLooks = info.numberAzimuthLooks topo.lookSide = info.lookSide topo.sensingStart = info.sensingStart + datetime.timedelta(seconds=( (info.numberAzimuthLooks - 1) / 2) / info.prf) topo.rangeFirstSample = info.rangeFirstSample + ( (info.numberRangeLooks - 1) / 2) * info.slantRangePixelSpacing topo.demInterpolationMethod = 'BIQUINTIC' if legendre: topo.orbitInterpolationMethod = 'LEGENDRE' topo.latFilename = info.latFilename topo.lonFilename = info.lonFilename topo.losFilename = info.losFilename topo.heightFilename = info.heightFilename topo.incFilename = info.incFilename topo.maskFilename = info.maskFilename if nativedop and (dop is not None): try: coeffs = dop._coeffs except: coeffs = dop doppler = Poly2D() doppler.setWidth(info.width // info.numberRangeLooks) doppler.setLength(info.length // info.numberAzimuthLooks) doppler.initPoly(rangeOrder=len(coeffs) - 1, azimuthOrder=0, coeffs=[coeffs]) else: print('Zero doppler') doppler = None topo.polyDoppler = doppler topo.topo() return
def create_georectified_lat_lon(swathList, reference, outdir, demZero, load_function): """ export geo rectified latitude and longitude """ for swath in swathList: reference = load_function( os.path.join(reference, 'IW{0}.xml'.format(swath))) ###Check if geometry directory already exists. dirname = os.path.join(outdir, 'IW{0}'.format(swath)) if os.path.isdir(dirname): print('Geometry directory {0} already exists.'.format(dirname)) else: os.makedirs(dirname) ###For each burst for ind in range(reference.numberOfBursts): burst = reference.bursts[ind] latname = os.path.join(dirname, 'lat_%02d.rdr' % (ind + 1)) lonname = os.path.join(dirname, 'lon_%02d.rdr' % (ind + 1)) hgtname = os.path.join(dirname, 'hgt_%02d.rdr' % (ind + 1)) losname = os.path.join(dirname, 'los_%02d.rdr' % (ind + 1)) if not (os.path.exists(latname + '.xml') or os.path.exists(lonname + '.xml')): #####Run Topo planet = Planet(pname='Earth') topo = createTopozero() topo.slantRangePixelSpacing = burst.rangePixelSize topo.prf = 1.0 / burst.azimuthTimeInterval topo.radarWavelength = burst.radarWavelength topo.orbit = burst.orbit topo.width = burst.numberOfSamples topo.length = burst.numberOfLines topo.wireInputPort(name='dem', object=demZero) topo.wireInputPort(name='planet', object=planet) topo.numberRangeLooks = 1 topo.numberAzimuthLooks = 1 topo.lookSide = -1 topo.sensingStart = burst.sensingStart topo.rangeFirstSample = burst.startingRange topo.demInterpolationMethod = 'BIQUINTIC' topo.latFilename = latname topo.lonFilename = lonname topo.heightFilename = hgtname topo.losFilename = losname topo.topo() return
def topoCPU(masterTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile, lonFile, hgtFile, losFile): import datetime import isceobj from zerodop.topozero import createTopozero from isceobj.Planet.Planet import Planet pointingDirection = {'right': -1, 'left': 1} demImage = isceobj.createDemImage() demImage.load(demFile + '.xml') demImage.setAccessMode('read') planet = Planet(pname='Earth') topo = createTopozero() topo.slantRangePixelSpacing = numberRangeLooks * masterTrack.rangePixelSize topo.prf = 1.0 / (numberAzimuthLooks * masterTrack.azimuthLineInterval) topo.radarWavelength = masterTrack.radarWavelength topo.orbit = masterTrack.orbit topo.width = masterTrack.numberOfSamples topo.length = masterTrack.numberOfLines topo.wireInputPort(name='dem', object=demImage) topo.wireInputPort(name='planet', object=planet) topo.numberRangeLooks = 1 #must be set as 1 topo.numberAzimuthLooks = 1 #must be set as 1 Cunren topo.lookSide = pointingDirection[masterTrack.pointingDirection] topo.sensingStart = masterTrack.sensingStart + datetime.timedelta( seconds=(numberAzimuthLooks - 1.0) / 2.0 * masterTrack.azimuthLineInterval) topo.rangeFirstSample = masterTrack.startingRange + ( numberRangeLooks - 1.0) / 2.0 * masterTrack.rangePixelSize topo.demInterpolationMethod = 'BIQUINTIC' topo.latFilename = latFile topo.lonFilename = lonFile topo.heightFilename = hgtFile topo.losFilename = losFile #topo.incFilename = incName #topo.maskFilename = mskName topo.topo() return list(topo.snwe)
def call_topo(input): (dirname, demImage, master, ind) = input burst = master.bursts[ind] latname = os.path.join(dirname, 'lat_%02d.rdr' % (ind + 1)) lonname = os.path.join(dirname, 'lon_%02d.rdr' % (ind + 1)) hgtname = os.path.join(dirname, 'hgt_%02d.rdr' % (ind + 1)) losname = os.path.join(dirname, 'los_%02d.rdr' % (ind + 1)) maskname = os.path.join(dirname, 'shadowMask_%02d.rdr' % (ind + 1)) incname = os.path.join(dirname, 'incLocal_%02d.rdr' % (ind + 1)) #####Run Topo planet = Planet(pname='Earth') topo = createTopozero() topo.slantRangePixelSpacing = burst.rangePixelSize topo.prf = 1.0 / burst.azimuthTimeInterval topo.radarWavelength = burst.radarWavelength topo.orbit = burst.orbit topo.width = burst.numberOfSamples topo.length = burst.numberOfLines topo.wireInputPort(name='dem', object=demImage) topo.wireInputPort(name='planet', object=planet) topo.numberRangeLooks = 1 topo.numberAzimuthLooks = 1 topo.lookSide = -1 topo.sensingStart = burst.sensingStart topo.rangeFirstSample = burst.startingRange topo.demInterpolationMethod = 'BIQUINTIC' topo.latFilename = latname topo.lonFilename = lonname topo.heightFilename = hgtname topo.losFilename = losname topo.maskFilename = maskname topo.incFilename = incname topo.topo() bbox = [ topo.minimumLatitude, topo.maximumLatitude, topo.minimumLongitude, topo.maximumLongitude ] topo = None return bbox
def runTopo(frame, demImage, latName='lat.rdr', lonName='lon.rdr', hgtName='z.rdr', losName='los.rdr', incName='inc.rdr', mskName='msk.rdr', offsetFromStart=0, numOfLines=100): from zerodop.topozero import createTopozero from isceobj.Planet.Planet import Planet #####Run Topo planet = Planet(pname='Earth') topo = createTopozero() topo.slantRangePixelSpacing = 0.5 * SPEED_OF_LIGHT / frame.rangeSamplingRate topo.prf = frame.PRF #!!!should be changed to azimuth time interval for burst mode topo.radarWavelength = frame.radarWavelegth topo.orbit = frame.getOrbit() topo.width = frame.getNumberOfSamples() #topo.length = frame.getNumberOfLines() topo.length = numOfLines topo.wireInputPort(name='dem', object=demImage) topo.wireInputPort(name='planet', object=planet) topo.numberRangeLooks = 1 #must be set as 1 topo.numberAzimuthLooks = 1 #must be set as 1 Cunren #topo.lookSide = -1 topo.lookSide = frame.getInstrument().getPlatform().pointingDirection topo.sensingStart = frame.getSensingStart() + datetime.timedelta( seconds=offsetFromStart * (1.0 / topo.prf)) topo.rangeFirstSample = frame.startingRange topo.demInterpolationMethod = 'BIQUINTIC' topo.latFilename = latName topo.lonFilename = lonName topo.heightFilename = hgtName topo.losFilename = losName topo.incFilename = incName topo.maskFilename = mskName topo.topo() return list(topo.snwe)
def runTopo(self): from zerodop.topozero import createTopozero from isceobj.Planet.Planet import Planet swathList = self._insar.getValidSwathList(self.swaths) ####Catalog for logging catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name) ####Load in DEM demfilename = self.verifyDEM() catalog.addItem('Dem Used', demfilename, 'topo') boxes = [] for swath in swathList: #####Load the master product master = self._insar.loadProduct( os.path.join(self._insar.masterSlcProduct, 'IW{0}.xml'.format(swath))) numCommon = self._insar.numberOfCommonBursts[swath - 1] startIndex = self._insar.commonBurstStartMasterIndex[swath - 1] if numCommon > 0: catalog.addItem('Number of common bursts IW-{0}'.format(swath), self._insar.numberOfCommonBursts[swath - 1], 'topo') ###Check if geometry directory already exists. dirname = os.path.join(self._insar.geometryDirname, 'IW{0}'.format(swath)) if os.path.isdir(dirname): logger.info( 'Geometry directory {0} already exists.'.format(dirname)) else: os.makedirs(dirname) ###For each burst for index in range(numCommon): ind = index + startIndex burst = master.bursts[ind] latname = os.path.join(dirname, 'lat_%02d.rdr' % (ind + 1)) lonname = os.path.join(dirname, 'lon_%02d.rdr' % (ind + 1)) hgtname = os.path.join(dirname, 'hgt_%02d.rdr' % (ind + 1)) losname = os.path.join(dirname, 'los_%02d.rdr' % (ind + 1)) incangname = os.path.join(dirname, 'incang_%02d.rdr' % (ind + 1)) demImage = isceobj.createDemImage() demImage.load(demfilename + '.xml') #####Run Topo planet = Planet(pname='Earth') topo = createTopozero() topo.slantRangePixelSpacing = burst.rangePixelSize topo.prf = 1.0 / burst.azimuthTimeInterval topo.radarWavelength = burst.radarWavelength topo.orbit = burst.orbit topo.width = burst.numberOfSamples topo.length = burst.numberOfLines topo.wireInputPort(name='dem', object=demImage) topo.wireInputPort(name='planet', object=planet) topo.numberRangeLooks = 1 topo.numberAzimuthLooks = 1 topo.lookSide = -1 topo.sensingStart = burst.sensingStart topo.rangeFirstSample = burst.startingRange topo.demInterpolationMethod = 'BIQUINTIC' topo.latFilename = latname topo.lonFilename = lonname topo.heightFilename = hgtname topo.losFilename = losname topo.incFilename = incangname topo.topo() bbox = [ topo.minimumLatitude, topo.maximumLatitude, topo.minimumLongitude, topo.maximumLongitude ] boxes.append(bbox) catalog.addItem( 'Number of lines for burst {0} - IW-{1}'.format( index, swath), burst.numberOfLines, 'topo') catalog.addItem( 'Number of pixels for bursts {0} - IW-{1}'.format( index, swath), burst.numberOfSamples, 'topo') catalog.addItem( 'Bounding box for burst {0} - IW-{1}'.format(index, swath), bbox, 'topo') else: print('Skipping Processing for Swath {0}'.format(swath)) topo = None boxes = np.array(boxes) bbox = [ np.min(boxes[:, 0]), np.max(boxes[:, 1]), np.min(boxes[:, 2]), np.max(boxes[:, 3]) ] catalog.addItem('Overall bounding box', bbox, 'topo') catalog.printToLog(logger, "runTopo") self._insar.procDoc.addAllFromCatalog(catalog) return
def main(iargs=None): inps = cmdLineParse(iargs) swathList = ut.getSwathList(inps.master) demImage = isceobj.createDemImage() demImage.load(inps.dem + '.xml') boxes = [] for swath in swathList: master = ut.loadProduct(os.path.join(inps.master , 'IW{0}.xml'.format(swath))) ###Check if geometry directory already exists. dirname = os.path.join(inps.geom_masterDir, 'IW{0}'.format(swath)) if os.path.isdir(dirname): print('Geometry directory {0} already exists.'.format(dirname)) else: os.makedirs(dirname) ###For each burst for ind in range(master.numberOfBursts): burst = master.bursts[ind] latname = os.path.join(dirname, 'lat_%02d.rdr'%(ind+1)) lonname = os.path.join(dirname, 'lon_%02d.rdr'%(ind+1)) hgtname = os.path.join(dirname, 'hgt_%02d.rdr'%(ind+1)) losname = os.path.join(dirname, 'los_%02d.rdr'%(ind+1)) maskname = os.path.join(dirname, 'shadowMask_%02d.rdr'%(ind+1)) incname = os.path.join(dirname, 'incLocal_%02d.rdr'%(ind+1)) #####Run Topo planet = Planet(pname='Earth') topo = createTopozero() topo.slantRangePixelSpacing = burst.rangePixelSize topo.prf = 1.0/burst.azimuthTimeInterval topo.radarWavelength = burst.radarWavelength topo.orbit = burst.orbit topo.width = burst.numberOfSamples topo.length = burst.numberOfLines topo.wireInputPort(name='dem', object=demImage) topo.wireInputPort(name='planet', object=planet) topo.numberRangeLooks = 1 topo.numberAzimuthLooks = 1 topo.lookSide = -1 topo.sensingStart = burst.sensingStart topo.rangeFirstSample = burst.startingRange topo.demInterpolationMethod='BIQUINTIC' topo.latFilename = latname topo.lonFilename = lonname topo.heightFilename = hgtname topo.losFilename = losname topo.maskFilename = maskname topo.incFilename = incname topo.topo() bbox = [topo.minimumLatitude, topo.maximumLatitude, topo.minimumLongitude, topo.maximumLongitude] boxes.append(bbox) topo = None boxes = np.array(boxes) bbox = [np.min(boxes[:,0]), np.max(boxes[:,1]), np.min(boxes[:,2]), np.max(boxes[:,3])] print ('bbox : ',bbox)
def runTopo(self): from zerodop.topozero import createTopozero from isceobj.Planet.Planet import Planet logger.info("Running topo") #IU.copyAttributes(demImage, objDem) geometryDir = self.insar.geometryDirname os.makedirs(geometryDir, exist_ok=True) demFilename = self.verifyDEM() objDem = isceobj.createDemImage() objDem.load(demFilename + '.xml') info = self._insar.loadProduct(self._insar.masterSlcCropProduct) intImage = info.getImage() planet = info.getInstrument().getPlatform().getPlanet() topo = createTopozero() topo.slantRangePixelSpacing = 0.5 * SPEED_OF_LIGHT / info.rangeSamplingRate topo.prf = info.PRF topo.radarWavelength = info.radarWavelegth topo.orbit = info.orbit topo.width = intImage.getWidth() topo.length = intImage.getLength() topo.wireInputPort(name='dem', object=objDem) topo.wireInputPort(name='planet', object=planet) topo.numberRangeLooks = 1 topo.numberAzimuthLooks = 1 topo.lookSide = info.getInstrument().getPlatform().pointingDirection topo.sensingStart = info.getSensingStart() topo.rangeFirstSample = info.startingRange topo.demInterpolationMethod = 'BIQUINTIC' topo.latFilename = os.path.join(geometryDir, self.insar.latFilename + '.full') topo.lonFilename = os.path.join(geometryDir, self.insar.lonFilename + '.full') topo.losFilename = os.path.join(geometryDir, self.insar.losFilename + '.full') topo.heightFilename = os.path.join(geometryDir, self.insar.heightFilename + '.full') # topo.incFilename = os.path.join(info.outdir, 'inc.rdr') # topo.maskFilename = os.path.join(info.outdir, 'mask.rdr') ####Doppler adjustment dop = [x / 1.0 for x in info._dopplerVsPixel] doppler = Poly2D() doppler.setWidth(topo.width // topo.numberRangeLooks) doppler.setLength(topo.length // topo.numberAzimuthLooks) if self._insar.masterGeometrySystem.lower().startswith('native'): doppler.initPoly(rangeOrder=len(dop) - 1, azimuthOrder=0, coeffs=[dop]) else: doppler.initPoly(rangeOrder=0, azimuthOrder=0, coeffs=[[0.]]) topo.polyDoppler = doppler topo.topo() # Record the inputs and outputs from isceobj.Catalog import recordInputsAndOutputs recordInputsAndOutputs(self._insar.procDoc, topo, "runTopo", logger, "runTopo") self._insar.estimatedBbox = [ topo.minimumLatitude, topo.maximumLatitude, topo.minimumLongitude, topo.maximumLongitude ] return topo
def runTopo(self): from zerodop.topozero import createTopozero from isceobj.Planet.Planet import Planet logger.info("Running topo") #IU.copyAttributes(demImage, objDem) objDem = self.insar.demImage.clone() info = self.insar.masterFrame slc = self.insar.formSLC1 intImage = slc.slcImage planet = info.getInstrument().getPlatform().getPlanet() topo = createTopozero() topo.slantRangePixelSpacing = 0.5 * SPEED_OF_LIGHT / info.rangeSamplingRate topo.prf = info.PRF topo.radarWavelength = info.radarWavelegth topo.orbit = info.orbit topo.width = intImage.getWidth() topo.length = intImage.getLength() topo.wireInputPort(name='dem', object=objDem) topo.wireInputPort(name='planet', object=planet) topo.numberRangeLooks = 1 topo.numberAzimuthLooks = 1 topo.lookSide = info.getInstrument().getPlatform().pointingDirection topo.sensingStart = slc.slcSensingStart topo.rangeFirstSample = slc.startingRange topo.demInterpolationMethod='BIQUINTIC' topo.latFilename = self.insar.latFilename topo.lonFilename = self.insar.lonFilename topo.losFilename = self.insar.losFilename topo.heightFilename = self.insar.heightFilename # topo.incFilename = os.path.join(info.outdir, 'inc.rdr') # topo.maskFilename = os.path.join(info.outdir, 'mask.rdr') ####Doppler adjustment dop = info._dopplerVsPixel[::-1] xx = np.linspace(0, (topo.width-1), num=len(dop)+ 1) x = (topo.rangeFirstSample - info.startingRange)/topo.slantRangePixelSpacing + xx * topo.numberRangeLooks v = np.polyval(dop, x) p = np.polyfit(xx, v, len(dop)-1)[::-1] doppler = Poly2D() doppler.setWidth(topo.width) doppler.setLength(topo.length) doppler.initPoly(rangeOrder = len(dop)-1, azimuthOrder=0, coeffs=[list(p)]) topo.polyDoppler = doppler topo.topo() # Record the inputs and outputs from isceobj.Catalog import recordInputsAndOutputs recordInputsAndOutputs(self._insar.procDoc, topo, "runTopo", logger, "runTopo") self._insar.setTopo(topo) return topo
def runTopo(self, method='legendre'): from zerodop.topozero import createTopozero from isceobj.Planet.Planet import Planet refPol = self._grd.polarizations[0] reference = self._grd.loadProduct( os.path.join(self._grd.outputFolder, 'beta_{0}.xml'.format(refPol))) azlooks, rglooks = self._grd.getLooks(self.posting, reference.azimuthPixelSize, reference.groundRangePixelSize, self.numberAzimuthLooks, self.numberRangeLooks) if (azlooks == 1) and (rglooks == 1): rangeName = reference.slantRangeImage.filename else: rangeName = filenameWithLooks(reference.slantRangeImage.filename, azlooks, rglooks) print('Range name : ', rangeName) ####Dem name demname = self.verifyDEM() print('DEM name: ', demname) demImg = isceobj.createDemImage() demImg.load(demname + '.xml') os.makedirs(self._grd.geometryFolder, exist_ok=True) #####Run Topo planet = Planet(pname='Earth') topo = createTopozero() topo.prf = 1.0 / reference.azimuthTimeInterval topo.radarWavelength = reference.radarWavelength topo.orbit = reference.orbit topo.width = reference.numberOfSamples // rglooks topo.length = reference.numberOfLines // azlooks topo.wireInputPort(name='dem', object=demImg) topo.wireInputPort(name='planet', object=planet) topo.numberRangeLooks = 1 topo.numberAzimuthLooks = azlooks topo.lookSide = reference.side topo.sensingStart = reference.sensingStart + datetime.timedelta(seconds=( (azlooks - 1) / 2) * reference.azimuthTimeInterval) topo.slantRangeFilename = rangeName topo.demInterpolationMethod = 'BIQUINTIC' topo.orbitInterpolationMethod = method.upper() topo.latFilename = os.path.join(self._grd.geometryFolder, 'lat.rdr') topo.lonFilename = os.path.join(self._grd.geometryFolder, 'lon.rdr') topo.heightFilename = os.path.join(self._grd.geometryFolder, 'z.rdr') topo.losFilename = os.path.join(self._grd.geometryFolder, self._grd.losFileName) topo.incFilename = os.path.join(self._grd.geometryFolder, self._grd.incFileName) topo.maskFilename = os.path.join(self._grd.geometryFolder, self._grd.slMaskFileName) topo.slantRangeFilename = rangeName topo.topo() runSimamp(self._grd.geometryFolder) return