ISCE_INSAR/contrib/stack/alosStack/geocode.py

88 lines
3.2 KiB
Python
Executable File

#!/usr/bin/env python3
#
# Author: Cunren Liang
# Copyright 2015-present, NASA-JPL/Caltech
#
import os
import glob
import shutil
import datetime
import numpy as np
import xml.etree.ElementTree as ET
import isce, isceobj
from isceobj.Alos2Proc.runGeocode import geocode
from isceobj.Alos2Proc.Alos2ProcPublic import getBboxGeo
from StackPulic import loadProduct
def cmdLineParse():
'''
command line parser.
'''
import sys
import argparse
parser = argparse.ArgumentParser(description='geocode')
parser.add_argument('-ref_date_stack_track', dest='ref_date_stack_track', type=str, required=True,
help = 'track parameter of reference date of stack. format: YYMMDD.track.xml')
parser.add_argument('-dem', dest='dem', type=str, required=True,
help = 'dem file used for geocoding')
parser.add_argument('-input', dest='input', type=str, required=True,
help='input file to be geocoded')
parser.add_argument('-bbox', dest='bbox', type=str, default=None,
help = 'user input bounding box, format: s/n/w/e. default: bbox of ref_date_stack_track')
parser.add_argument('-interp_method', dest='interp_method', type=str, default='nearest',
help = 'interpolation method: sinc, bilinear, bicubic, nearest. default: nearest')
parser.add_argument('-nrlks', dest='nrlks', type=int, default=1,
help = 'total number of range looks = number of range looks 1 * number of range looks 2. default: 1')
parser.add_argument('-nalks', dest='nalks', type=int, default=1,
help = 'total number of azimuth looks = number of azimuth looks 1 * number of azimuth looks 2. default: 1')
if len(sys.argv) <= 1:
print('')
parser.print_help()
sys.exit(1)
else:
return parser.parse_args()
if __name__ == '__main__':
inps = cmdLineParse()
#get user parameters from input
ref_date_stack_track = inps.ref_date_stack_track
demGeo = inps.dem
inputFile = inps.input
bbox = inps.bbox
geocodeInterpMethod = inps.interp_method
numberRangeLooks = inps.nrlks
numberAzimuthLooks = inps.nalks
#######################################################
demFile = os.path.abspath(demGeo)
trackReferenceStack = loadProduct(ref_date_stack_track)
#compute bounding box for geocoding
if bbox is not None:
bbox = [float(x) for x in bbox.split('/')]
if len(bbox)!=4:
raise Exception('user input bbox must have four elements')
else:
img = isceobj.createImage()
img.load(inputFile+'.xml')
bbox = getBboxGeo(trackReferenceStack, useTrackOnly=True, numberOfSamples=img.width, numberOfLines=img.length, numberRangeLooks=numberRangeLooks, numberAzimuthLooks=numberAzimuthLooks)
print('=====================================================================================================')
print('geocode bounding box: {}'.format(bbox))
print('=====================================================================================================')
interpMethod = geocodeInterpMethod
geocode(trackReferenceStack, demFile, inputFile, bbox, numberRangeLooks, numberAzimuthLooks, interpMethod, 0, 0)