ISCE_INSAR/components/isceobj/RtcProc/runGeocode.py

81 lines
2.8 KiB
Python

#!/usr/bin/env python3
# coding: utf-8
# Author: Simon Kraatz
# Copyright 2016
import logging
import isceobj
import os
import numpy as np
from isceobj.Util.decorators import use_api
from osgeo import gdal, ogr, osr
logger = logging.getLogger('isce.grdsar.looks')
def runGeocode(self):
'''
Geocode a swath file using corresponding lat, lon files
'''
sourcexmltmpl = ''' <SimpleSource>
<SourceFilename>{0}</SourceFilename>
<SourceBand>{1}</SourceBand>
</SimpleSource>'''
gcl = [f for f in os.listdir(self._grd.outputFolder) if f.startswith('gamma') and f.endswith('.vrt')]
a, b = os.path.split(self._grd.outputFolder)
latfile = os.path.join(a,self._grd.geometryFolder,'lat.rdr.vrt')
lonfile = os.path.join(a,self._grd.geometryFolder,'lon.rdr.vrt')
outsrs = 'EPSG:'+str(self.epsg)
gspacing = self.gspacing
method = self.intmethod
insrs = 4326
fmt = 'GTiff'
fl = len(gcl)
for num, val in enumerate(gcl):
print('****Geocoding file %s out of %s: %s****' %(num+1, fl, val))
infile = os.path.join(a, self._grd.outputFolder, val)
outfile = os.path.join(a, self._grd.outputFolder, val[:-3]+'tif')
driver = gdal.GetDriverByName('VRT')
tempvrtname = os.path.join(a, self._grd.outputFolder, 'geocode.vrt')
inds = gdal.OpenShared(infile, gdal.GA_ReadOnly)
tempds = driver.Create(tempvrtname, inds.RasterXSize, inds.RasterYSize, 0)
for ii in range(inds.RasterCount):
band = inds.GetRasterBand(1)
tempds.AddBand(band.DataType)
tempds.GetRasterBand(ii+1).SetMetadata({'source_0': sourcexmltmpl.format(infile, ii+1)}, 'vrt_sources')
sref = osr.SpatialReference()
sref.ImportFromEPSG(insrs)
srswkt = sref.ExportToWkt()
tempds.SetMetadata({'SRS' : srswkt,
'X_DATASET': lonfile,
'X_BAND' : '1',
'Y_DATASET': latfile,
'Y_BAND' : '1',
'PIXEL_OFFSET' : '0',
'LINE_OFFSET' : '0',
'PIXEL_STEP' : '1',
'LINE_STEP' : '1'}, 'GEOLOCATION')
band = None
tempds = None
inds = None
bounds = None
spacing = [gspacing, gspacing]
warpOptions = gdal.WarpOptions(format=fmt,
xRes=spacing[0], yRes=spacing[1],
dstSRS=outsrs,
outputBounds = bounds,
resampleAlg=method, geoloc=True)
gdal.Warp(outfile, tempvrtname, options=warpOptions)
return