Merge pull request #125 from yunjunz/topo

stripmapStack/topo: call gdal2isce_xml.py inside runMultilook() if xml file missing
LT1AB
Heresh Fattahi 2020-05-03 09:22:50 -07:00 committed by GitHub
commit c9dd735a7b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 77 additions and 72 deletions

View File

@ -1,12 +1,15 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import isce
import os import os
import logging
from components.stdproc.stdproc import crossmul
import isceobj
from iscesys.ImageUtil.ImageUtil import ImageUtil as IU
import isceobj
import argparse import argparse
import logging
import isce
import isceobj
from components.stdproc.stdproc import crossmul
from iscesys.ImageUtil.ImageUtil import ImageUtil as IU
def createParser(): def createParser():

View File

@ -1,18 +1,19 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import os
import argparse
import shelve
import json
import logging
import numpy as np
import isce import isce
import isceobj import isceobj
import stdproc import stdproc
from stdproc.stdproc import crossmul from stdproc.stdproc import crossmul
import numpy as np
from isceobj.Util.Poly2D import Poly2D
import argparse
import os
import shelve
from iscesys.ImageUtil.ImageUtil import ImageUtil as IU
import json
import logging
from isceobj.Util.decorators import use_api from isceobj.Util.decorators import use_api
from isceobj.Util.Poly2D import Poly2D
from iscesys.ImageUtil.ImageUtil import ImageUtil as IU
def createParser(): def createParser():
parser = argparse.ArgumentParser( description='Use polynomial offsets and create burst by burst interferograms') parser = argparse.ArgumentParser( description='Use polynomial offsets and create burst by burst interferograms')

View File

@ -6,11 +6,12 @@ import shelve
import datetime import datetime
import shutil import shutil
import numpy as np import numpy as np
import gdal
import isce import isce
import isceobj import isceobj
from isceobj.Constants import SPEED_OF_LIGHT from isceobj.Constants import SPEED_OF_LIGHT
from isceobj.Util.Poly2D import Poly2D from isceobj.Util.Poly2D import Poly2D
from mroipac.looks.Looks import Looks
def createParser(): def createParser():
''' '''
@ -49,12 +50,11 @@ class Dummy(object):
def runTopoGPU(info, demImage, dop=None, nativedop=False, legendre=False): def runTopoGPU(info, demImage, dop=None, nativedop=False, legendre=False):
from isceobj.Planet.Planet import Planet
from zerodop.GPUtopozero.GPUtopozero import PyTopozero
from isceobj import Constants as CN from isceobj import Constants as CN
from isceobj.Planet.Planet import Planet
from isceobj.Util.Poly2D import Poly2D from isceobj.Util.Poly2D import Poly2D
from iscesys import DateTimeUtil as DTU from iscesys import DateTimeUtil as DTU
from zerodop.GPUtopozero.GPUtopozero import PyTopozero
## TODO GPU does not support shadow and layover and local inc file generation ## TODO GPU does not support shadow and layover and local inc file generation
full = False full = False
@ -358,20 +358,35 @@ def runSimamp(outdir, hname='z.rdr'):
return return
def runMultilook(in_dir, out_dir, alks, rlks): def runMultilook(in_dir, out_dir, alks, rlks, in_ext='.rdr', out_ext='.rdr', method='gdal',
print('generate multilooked geometry files with alks={} and rlks={}'.format(alks, rlks)) fbase_list=['hgt', 'incLocal', 'lat', 'lon', 'los', 'shadowMask', 'waterMask']):
"""
Multilook geometry files.
"""
from iscesys.Parsers.FileParserFactory import createFileParser from iscesys.Parsers.FileParserFactory import createFileParser
FP = createFileParser('xml') from mroipac.looks.Looks import Looks
msg = 'generate multilooked geometry files with alks={} and rlks={}'.format(alks, rlks)
if method == 'isce':
msg += ' using mroipac.looks.Looks() ...'
else:
msg += ' using gdal.Translate() ...'
print('-'*50+'\n'+msg)
# create 'geom_master' directory
os.makedirs(out_dir, exist_ok=True) os.makedirs(out_dir, exist_ok=True)
for fbase in ['hgt', 'incLocal', 'lat', 'lon', 'los', 'shadowMask', 'waterMask']: # multilook files one by one
fname = '{}.rdr'.format(fbase) for fbase in fbase_list:
in_file = os.path.join(in_dir, fname) in_file = os.path.join(in_dir, '{}{}'.format(fbase, in_ext))
out_file = os.path.join(out_dir, fname) out_file = os.path.join(out_dir, '{}{}'.format(fbase, out_ext))
if os.path.isfile(in_file): if all(os.path.isfile(in_file+ext) for ext in ['','.vrt','.xml']):
xmlProp = FP.parse(in_file+'.xml')[0] print('multilook {}'.format(in_file))
# option 1 - Looks module (isce)
if method == 'isce':
xmlProp = createFileParser('xml').parse(in_file+'.xml')[0]
if('image_type' in xmlProp and xmlProp['image_type'] == 'dem'): if('image_type' in xmlProp and xmlProp['image_type'] == 'dem'):
inImage = isceobj.createDemImage() inImage = isceobj.createDemImage()
else: else:
@ -387,29 +402,8 @@ def runMultilook(in_dir, out_dir, alks, rlks):
lkObj.setOutputFilename(out_file) lkObj.setOutputFilename(out_file)
lkObj.looks() lkObj.looks()
# copy the full resolution xml/vrt file from ./merged/geom_master to ./geom_master # option 2 - gdal_translate (gdal)
# to facilitate the number of looks extraction elif method == 'gdal':
# the file path inside .xml file is not, but should, updated
shutil.copy(in_file+'.xml', out_file+'.full.xml')
shutil.copy(in_file+'.vrt', out_file+'.full.vrt')
return out_dir
def runMultilookGdal(in_dir, out_dir, alks, rlks, in_ext='.rdr', out_ext='.rdr',
fbase_list=['hgt', 'incLocal', 'lat', 'lon', 'los', 'shadowMask', 'waterMask']):
print('generate multilooked geometry files with alks={} and rlks={}'.format(alks, rlks))
import gdal
# create 'geom_master' directory
os.makedirs(out_dir, exist_ok=True)
# multilook files one by one
for fbase in fbase_list:
in_file = os.path.join(in_dir, '{}{}'.format(fbase, in_ext))
out_file = os.path.join(out_dir, '{}{}'.format(fbase, out_ext))
if os.path.isfile(in_file):
ds = gdal.Open(in_file, gdal.GA_ReadOnly) ds = gdal.Open(in_file, gdal.GA_ReadOnly)
in_wid = ds.RasterXSize in_wid = ds.RasterXSize
in_len = ds.RasterYSize in_len = ds.RasterYSize
@ -419,11 +413,19 @@ def runMultilookGdal(in_dir, out_dir, alks, rlks, in_ext='.rdr', out_ext='.rdr',
src_wid = out_wid * rlks src_wid = out_wid * rlks
src_len = out_len * alks src_len = out_len * alks
cmd = 'gdal_translate -of ENVI -a_nodata 0 -outsize {ox} {oy} '.format(ox=out_wid, oy=out_len) options_str = '-of ENVI -a_nodata 0 -outsize {ox} {oy} -srcwin 0 0 {sx} {sy} '.format(
cmd += ' -srcwin 0 0 {sx} {sy} {fi} {fo} '.format(sx=src_wid, sy=src_len, fi=in_file, fo=out_file) ox=out_wid, oy=out_len, sx=src_wid, sy=src_len)
gdal.Translate(out_file, ds, options=options_str)
# generate ISCE .xml file
if not os.path.isfile(out_file+'.xml'):
cmd = 'gdal2isce_xml.py -i {}.vrt'.format(out_file)
print(cmd) print(cmd)
os.system(cmd) os.system(cmd)
else:
raise ValueError('un-supported multilook method: {}'.format(method))
# copy the full resolution xml/vrt file from ./merged/geom_master to ./geom_master # copy the full resolution xml/vrt file from ./merged/geom_master to ./geom_master
# to facilitate the number of looks extraction # to facilitate the number of looks extraction
# the file path inside .xml file is not, but should, updated # the file path inside .xml file is not, but should, updated
@ -521,8 +523,7 @@ def main(iargs=None):
# write multilooked geometry files in "geom_master" directory, same level as "Igrams" # write multilooked geometry files in "geom_master" directory, same level as "Igrams"
if inps.rlks * inps.rlks > 1: if inps.rlks * inps.rlks > 1:
out_dir = os.path.join(os.path.dirname(os.path.dirname(info.outdir)), 'geom_master') out_dir = os.path.join(os.path.dirname(os.path.dirname(info.outdir)), 'geom_master')
runMultilookGdal(in_dir=info.outdir, out_dir=out_dir, alks=inps.alks, rlks=inps.rlks) runMultilook(in_dir=info.outdir, out_dir=out_dir, alks=inps.alks, rlks=inps.rlks)
#runMultilook(in_dir=info.outdir, out_dir=out_dir, alks=inps.alks, rlks=inps.rlks)
return return