2020-03-29 02:19:21 +00:00
|
|
|
#
|
|
|
|
# Author: Cunren Liang
|
|
|
|
# Copyright 2015-present, NASA-JPL/Caltech
|
|
|
|
#
|
|
|
|
|
|
|
|
import os
|
|
|
|
import logging
|
|
|
|
import numpy as np
|
|
|
|
|
|
|
|
import isceobj
|
|
|
|
from isceobj.Alos2Proc.Alos2ProcPublic import getBboxGeo
|
|
|
|
|
|
|
|
logger = logging.getLogger('isce.alos2insar.runGeocode')
|
|
|
|
|
|
|
|
def runGeocode(self):
|
|
|
|
'''geocode final products
|
|
|
|
'''
|
|
|
|
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
|
|
|
self.updateParamemetersFromUser()
|
|
|
|
|
|
|
|
masterTrack = self._insar.loadTrack(master=True)
|
|
|
|
#slaveTrack = self._insar.loadTrack(master=False)
|
|
|
|
|
|
|
|
demFile = os.path.abspath(self._insar.demGeo)
|
|
|
|
|
|
|
|
insarDir = 'insar'
|
2020-04-13 19:40:32 +00:00
|
|
|
os.makedirs(insarDir, exist_ok=True)
|
2020-03-29 02:19:21 +00:00
|
|
|
os.chdir(insarDir)
|
|
|
|
|
|
|
|
#compute bounding box for geocoding
|
|
|
|
if self.bbox == None:
|
|
|
|
bbox = getBboxGeo(masterTrack)
|
|
|
|
else:
|
|
|
|
bbox = self.bbox
|
|
|
|
catalog.addItem('geocode bounding box', bbox, 'runGeocode')
|
|
|
|
|
|
|
|
if self.geocodeList == None:
|
|
|
|
geocodeList = [self._insar.unwrappedInterferogram,
|
|
|
|
self._insar.unwrappedMaskedInterferogram,
|
|
|
|
self._insar.multilookCoherence,
|
|
|
|
self._insar.multilookLos]
|
|
|
|
if self.doIon:
|
|
|
|
geocodeList.append(self._insar.multilookIon)
|
|
|
|
else:
|
|
|
|
geocodeList = self.geocodeList
|
|
|
|
|
|
|
|
numberRangeLooks = self._insar.numberRangeLooks1 * self._insar.numberRangeLooks2
|
|
|
|
numberAzimuthLooks = self._insar.numberAzimuthLooks1 * self._insar.numberAzimuthLooks2
|
|
|
|
|
|
|
|
for inputFile in geocodeList:
|
|
|
|
if self.geocodeInterpMethod == None:
|
|
|
|
img = isceobj.createImage()
|
|
|
|
img.load(inputFile + '.xml')
|
|
|
|
if img.dataType.upper() == 'CFLOAT':
|
|
|
|
interpMethod = 'sinc'
|
|
|
|
else:
|
|
|
|
interpMethod = 'bilinear'
|
|
|
|
else:
|
|
|
|
interpMethod = self.geocodeInterpMethod.lower()
|
|
|
|
|
|
|
|
geocode(masterTrack, demFile, inputFile, bbox, numberRangeLooks, numberAzimuthLooks, interpMethod, 0, 0)
|
|
|
|
|
|
|
|
|
|
|
|
os.chdir('../')
|
|
|
|
|
|
|
|
catalog.printToLog(logger, "runGeocode")
|
|
|
|
self._insar.procDoc.addAllFromCatalog(catalog)
|
|
|
|
|
|
|
|
|
|
|
|
def geocode(track, demFile, inputFile, bbox, numberRangeLooks, numberAzimuthLooks, interpMethod, topShift, leftShift, addMultilookOffset=True):
|
|
|
|
import datetime
|
|
|
|
from zerodop.geozero import createGeozero
|
|
|
|
from isceobj.Planet.Planet import Planet
|
|
|
|
|
|
|
|
pointingDirection = {'right': -1, 'left' :1}
|
|
|
|
|
|
|
|
demImage = isceobj.createDemImage()
|
|
|
|
demImage.load(demFile + '.xml')
|
|
|
|
demImage.setAccessMode('read')
|
|
|
|
|
|
|
|
inImage = isceobj.createImage()
|
|
|
|
inImage.load(inputFile + '.xml')
|
|
|
|
inImage.setAccessMode('read')
|
|
|
|
|
|
|
|
planet = Planet(pname='Earth')
|
|
|
|
|
|
|
|
topo = createGeozero()
|
|
|
|
topo.configure()
|
|
|
|
topo.slantRangePixelSpacing = numberRangeLooks * track.rangePixelSize
|
|
|
|
topo.prf = 1.0 / (numberAzimuthLooks*track.azimuthLineInterval)
|
|
|
|
topo.radarWavelength = track.radarWavelength
|
|
|
|
topo.orbit = track.orbit
|
|
|
|
topo.width = inImage.width
|
|
|
|
topo.length = inImage.length
|
|
|
|
topo.wireInputPort(name='dem', object=demImage)
|
|
|
|
topo.wireInputPort(name='planet', object=planet)
|
|
|
|
topo.wireInputPort(name='tobegeocoded', object=inImage)
|
|
|
|
topo.numberRangeLooks = 1
|
|
|
|
topo.numberAzimuthLooks = 1
|
|
|
|
topo.lookSide = pointingDirection[track.pointingDirection]
|
|
|
|
sensingStart = track.sensingStart + datetime.timedelta(seconds=topShift*track.azimuthLineInterval)
|
|
|
|
rangeFirstSample = track.startingRange + leftShift * track.rangePixelSize
|
|
|
|
if addMultilookOffset:
|
|
|
|
sensingStart += datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*track.azimuthLineInterval)
|
|
|
|
rangeFirstSample += (numberRangeLooks-1.0)/2.0*track.rangePixelSize
|
|
|
|
topo.setSensingStart(sensingStart)
|
|
|
|
topo.rangeFirstSample = rangeFirstSample
|
|
|
|
topo.method=interpMethod
|
|
|
|
topo.demCropFilename = 'crop.dem'
|
|
|
|
#looks like this does not work
|
|
|
|
#topo.geoFilename = outputName
|
|
|
|
topo.dopplerCentroidCoeffs = [0.]
|
|
|
|
#snwe list <class 'list'>
|
|
|
|
topo.snwe = bbox
|
|
|
|
|
|
|
|
topo.geocode()
|
|
|
|
|
|
|
|
print('South: ', topo.minimumGeoLatitude)
|
|
|
|
print('North: ', topo.maximumGeoLatitude)
|
|
|
|
print('West: ', topo.minimumGeoLongitude)
|
|
|
|
print('East: ', topo.maximumGeoLongitude)
|
|
|
|
|
|
|
|
return
|