ISCE_INSAR/components/isceobj/TopsProc/runVerifyDEM.py

101 lines
3.2 KiB
Python

#
# Author: Piyush Agram
# Copyright 2016
#
import logging
import isceobj
import mroipac
from isceobj.Util.ImageUtil import DemImageLib
import os
import numpy as np
logger = logging.getLogger('isce.insar.VerifyDEM')
class INFO:
def __init__(self, snwe):
self.extremes = snwe
def getExtremes(self, x):
return self.extremes
def runVerifyDEM(self):
'''
Make sure that a DEM is available for processing the given data.
'''
self.demStitcher.noFilling = False
###If provided in the input XML file
if self.demFilename not in ['',None]:
demimg = isceobj.createDemImage()
demimg.load(self.demFilename + '.xml')
if not os.path.exists(self.demFilename + '.vrt'):
demimg.renderVRT()
if demimg.reference.upper() == 'EGM96':
wgsdemname = self.demFilename + '.wgs84'
if os.path.exists(wgsdemname) and os.path.exists(wgsdemname + '.xml'):
demimg = isceobj.createDemImage()
demimg.load(wgsdemname + '.xml')
if demimg.reference.upper() == 'EGM96':
raise Exception('WGS84 version of dem found by reference set to EGM96')
else:
demimg = self.demStitcher.correct(demimg)
elif demimg.reference.upper() != 'WGS84':
raise Exception('Unknown reference system for DEM: {0}'.format(demimg.reference))
else:
swathList = self._insar.getValidSwathList(self.swaths)
bboxes = []
for swath in swathList:
if self._insar.numberOfCommonBursts[swath-1] > 0:
reference = self._insar.loadProduct( os.path.join(self._insar.referenceSlcProduct, 'IW{0}.xml'.format(swath)))
secondary = self._insar.loadProduct( os.path.join(self._insar.secondarySlcProduct, 'IW{0}.xml'.format(swath)))
####Merges orbit as needed for multi-stitched frames
mOrb = self._insar.getMergedOrbit([reference])
sOrb = self._insar.getMergedOrbit([secondary])
mbox = reference.getBbox()
sbox = secondary.getBbox()
####Union of bounding boxes
bbox = [min(mbox[0], sbox[0]), max(mbox[1], sbox[1]),
min(mbox[2], sbox[2]), max(mbox[3], sbox[3])]
bboxes.append(bbox)
if len(bboxes) == 0 :
raise Exception('Something went wrong in determining bboxes')
else:
bbox = [min([x[0] for x in bboxes]),
max([x[1] for x in bboxes]),
min([x[2] for x in bboxes]),
max([x[3] for x in bboxes])]
####Truncate to integers
tbox = [np.floor(bbox[0]), np.ceil(bbox[1]),
np.floor(bbox[2]), np.ceil(bbox[3])]
#EMG
info = INFO(tbox)
self.useZeroTiles = True
DemImageLib.createDem(tbox, info, self, self.demStitcher,
self.useHighResolutionDemOnly, self.useZeroTiles)
# createDem puts the dem image in self. Put a reference in
# local variable demimg to return the filename in the same
# way as done in the "if" clause above
demimg = self.demImage
return demimg.filename