121 lines
2.7 KiB
Python
121 lines
2.7 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
import os
|
||
|
import glob
|
||
|
import argparse
|
||
|
|
||
|
import isce # noqa
|
||
|
import isceobj
|
||
|
import subprocess
|
||
|
import shelve
|
||
|
|
||
|
|
||
|
def get_cli_args():
|
||
|
"""
|
||
|
Create command line parser.
|
||
|
"""
|
||
|
|
||
|
parser = argparse.ArgumentParser(description="Prepare UAVSAR HDF5 SLC Stack files.")
|
||
|
parser.add_argument(
|
||
|
"-i",
|
||
|
"--input-dir",
|
||
|
dest="input_dir",
|
||
|
required=True,
|
||
|
help="Input UAVSAR HDF5 file",
|
||
|
)
|
||
|
parser.add_argument(
|
||
|
"-o",
|
||
|
"--output",
|
||
|
required=True,
|
||
|
help="Output SLC directory",
|
||
|
)
|
||
|
parser.add_argument(
|
||
|
"-p",
|
||
|
"--polarization",
|
||
|
dest="polarization",
|
||
|
default="VV",
|
||
|
help="SLC polarization (default=%(default)s ) ",
|
||
|
)
|
||
|
parser.add_argument(
|
||
|
"-f",
|
||
|
"--frequency",
|
||
|
default="A",
|
||
|
choices=("A", "B"),
|
||
|
help="NISAR frequency choices (choices = %(choices)s , default=%(default)s )",
|
||
|
)
|
||
|
return parser.parse_args()
|
||
|
|
||
|
|
||
|
def write_xml(shelveFile, slcFile):
|
||
|
with shelve.open(shelveFile, flag="r") as db:
|
||
|
frame = db["frame"]
|
||
|
|
||
|
length = frame.numberOfLines
|
||
|
width = frame.numberOfSamples
|
||
|
print(width, length)
|
||
|
|
||
|
slc = isceobj.createSlcImage()
|
||
|
slc.setWidth(width)
|
||
|
slc.setLength(length)
|
||
|
slc.filename = slcFile
|
||
|
slc.setAccessMode("write")
|
||
|
slc.renderHdr()
|
||
|
slc.renderVRT()
|
||
|
|
||
|
|
||
|
def get_date(file):
|
||
|
yyyymmdd = "20" + file.split("_")[4]
|
||
|
return yyyymmdd
|
||
|
|
||
|
|
||
|
def main():
|
||
|
"""
|
||
|
The main driver.
|
||
|
"""
|
||
|
|
||
|
inps = get_cli_args()
|
||
|
|
||
|
outputDir = os.path.abspath(inps.output)
|
||
|
|
||
|
#######################################
|
||
|
slc_files = glob.glob(os.path.join(inps.input_dir, "*.h5"))
|
||
|
|
||
|
for h5_file in slc_files:
|
||
|
imgDate = get_date(h5_file)
|
||
|
print(imgDate)
|
||
|
print(h5_file)
|
||
|
imgDir = os.path.join(outputDir, imgDate)
|
||
|
os.makedirs(imgDir, exist_ok=True)
|
||
|
|
||
|
cmd = (
|
||
|
"unpackFrame_UAVSAR_HDF5_SLC.py -i "
|
||
|
+ h5_file
|
||
|
+ " -p "
|
||
|
+ inps.polarization
|
||
|
+ " -f "
|
||
|
+ inps.frequency
|
||
|
+ " -o "
|
||
|
+ imgDir
|
||
|
)
|
||
|
print(cmd)
|
||
|
subprocess.check_call(cmd, shell=True)
|
||
|
|
||
|
slcFile = os.path.join(imgDir, imgDate + ".slc")
|
||
|
|
||
|
# Now extract the correct pol SLC from the HDF5 file
|
||
|
subdataset = "/science/LSAR/SLC/swaths"
|
||
|
subdataset += "/frequency{}/{}".format(inps.frequency, inps.polarization)
|
||
|
cmd = 'gdal_translate -of ISCE HDF5:"{fname}":"/{sds}" {out}'.format(
|
||
|
fname=h5_file, sds=subdataset, out=slcFile
|
||
|
)
|
||
|
|
||
|
print(cmd)
|
||
|
subprocess.check_call(cmd, shell=True)
|
||
|
|
||
|
shelveFile = os.path.join(imgDir, "data")
|
||
|
write_xml(shelveFile, slcFile)
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|