ISCE_INSAR/contrib/stack/stripmapStack/bbox.py

87 lines
2.7 KiB
Python
Raw Normal View History

2019-01-16 19:40:08 +00:00
#!/usr/bin/env python3
import numpy as np
import argparse
import os
import isce
import isceobj
from isceobj.Planet.Planet import Planet
import datetime
import shelve
from isceobj.Constants import SPEED_OF_LIGHT
from isceobj.Util.Poly2D import Poly2D
def cmdLineParse():
'''
Command line parser.
'''
parser = argparse.ArgumentParser( description='Generate offset field between two Sentinel swaths')
parser.add_argument('-i', type=str, dest='reference', required=True,
help='Directory with the reference image')
2019-01-16 19:40:08 +00:00
parser.add_argument('-n', action='store_true', dest='isnative', default=False,
help='If product is native doppler')
parser.add_argument('-m', type=float, dest='margin', default=0.05,
help='Margin in degrees')
return parser.parse_args()
if __name__ == '__main__':
'''
Generate offset fields burst by burst.
'''
inps = cmdLineParse()
try:
mdb = shelve.open( os.path.join(inps.reference, 'data'), flag='r')
2019-01-16 19:40:08 +00:00
except:
print('SLC not found ... trying RAW data')
mdb = shelve.open( os.path.join(inps.reference, 'raw'), flag='r')
2019-01-16 19:40:08 +00:00
inps.isnative = True
frame = mdb['frame']
lookSide = frame.instrument.platform.pointingDirection
planet = Planet(pname='Earth')
wvl = frame.instrument.getRadarWavelength()
zrange = [-500., 9000.]
if inps.isnative:
####If geometry is in native doppler / raw
####You need doppler as a function of range to do
####geometry mapping correctly
###Currently doppler is saved as function of pixel number - old ROIPAC style
###Transform to function of slant range
coeff = frame._dopplerVsPixel
doppler = Poly2D()
doppler._meanRange = frame.startingRange
doppler._normRange = frame.instrument.rangePixelSize
doppler.initPoly(azimuthOrder=0, rangeOrder=len(coeff)-1, coeffs=[coeff])
else:
###Zero doppler system
doppler = Poly2D()
doppler.initPoly(azimuthOrder=0, rangeOrder=0, coeffs=[[0.]])
llh = []
for z in zrange:
for taz in [frame.sensingStart, frame.sensingMid, frame.sensingStop]:
for rng in [frame.startingRange, frame.getFarRange()]:
pt = frame.orbit.rdr2geo(taz, rng, doppler=doppler, height=z,
wvl=wvl, side=lookSide)
llh.append(pt)
llh = np.array(llh)
minLat = np.min(llh[:,0]) - inps.margin
maxLat = np.max(llh[:,0]) + inps.margin
minLon = np.min(llh[:,1]) - inps.margin
maxLon = np.max(llh[:,1]) + inps.margin
print('Lat limits: ', minLat, maxLat)
print('Lon limits: ', minLon, maxLon)