19
19
from pybind_nisar .workflows .h5_prep import add_radar_grid_cubes_to_hdf5
20
20
from pybind_nisar .workflows .yaml_argparse import YamlArgparse
21
21
from pybind_nisar .workflows .gcov_runconfig import GCOVRunConfig
22
+ from pybind_nisar .workflows .h5_prep import set_get_geo_info
22
23
23
24
def run (cfg ):
24
25
'''
@@ -51,6 +52,7 @@ def run(cfg):
51
52
flag_upsample_radar_grid = geocode_dict ['upsample_radargrid' ]
52
53
flag_save_nlooks = geocode_dict ['save_nlooks' ]
53
54
flag_save_rtc = geocode_dict ['save_rtc' ]
55
+ flag_save_dem = geocode_dict ['save_dem' ]
54
56
55
57
# unpack RTC run parameters
56
58
rtc_dict = cfg ['processing' ]['rtc' ]
@@ -202,6 +204,25 @@ def run(cfg):
202
204
temp_rtc = None
203
205
out_geo_rtc_obj = None
204
206
207
+ if flag_save_dem :
208
+ temp_interpolated_dem = tempfile .NamedTemporaryFile (
209
+ dir = scratch_path , suffix = '.tif' )
210
+ if (output_mode ==
211
+ isce3 .geocode .GeocodeOutputMode .AREA_PROJECTION ):
212
+ interpolated_dem_width = geogrid .width + 1
213
+ interpolated_dem_length = geogrid .length + 1
214
+ else :
215
+ interpolated_dem_width = geogrid .width
216
+ interpolated_dem_length = geogrid .length
217
+ out_geo_dem_obj = isce3 .io .Raster (
218
+ temp_interpolated_dem .name ,
219
+ interpolated_dem_width ,
220
+ interpolated_dem_length , 1 ,
221
+ gdal .GDT_Float32 , "GTiff" )
222
+ else :
223
+ temp_interpolated_dem = None
224
+ out_geo_dem_obj = None
225
+
205
226
# geocode rasters
206
227
geo .geocode (radar_grid = radar_grid ,
207
228
input_raster = input_raster_obj ,
@@ -223,6 +244,7 @@ def run(cfg):
223
244
out_off_diag_terms = out_off_diag_terms_obj ,
224
245
out_geo_nlooks = out_geo_nlooks_obj ,
225
246
out_geo_rtc = out_geo_rtc_obj ,
247
+ out_geo_dem = out_geo_dem_obj ,
226
248
input_rtc = None ,
227
249
output_rtc = None ,
228
250
memory_mode = memory_mode )
@@ -235,6 +257,9 @@ def run(cfg):
235
257
if flag_save_rtc :
236
258
del out_geo_rtc_obj
237
259
260
+ if flag_save_dem :
261
+ del out_geo_dem_obj
262
+
238
263
if flag_fullcovariance :
239
264
# out_off_diag_terms_obj.close_dataset()
240
265
del out_off_diag_terms_obj
@@ -284,6 +309,35 @@ def run(cfg):
284
309
units = '' ,
285
310
valid_min = 0 )
286
311
312
+ # save interpolated DEM
313
+ if flag_save_dem :
314
+
315
+ '''
316
+ The DEM is interpolated over the geogrid pixels vertices
317
+ rather than the pixels centers.
318
+ '''
319
+ if (output_mode ==
320
+ isce3 .geocode .GeocodeOutputMode .AREA_PROJECTION ):
321
+ dem_geogrid = isce3 .product .GeoGridParameters (
322
+ start_x = geogrid .start_x - geogrid .spacing_x / 2 ,
323
+ start_y = geogrid .start_y - geogrid .spacing_y / 2 ,
324
+ spacing_x = geogrid .spacing_x ,
325
+ spacing_y = geogrid .spacing_y ,
326
+ width = int (geogrid .width ) + 1 ,
327
+ length = int (geogrid .length ) + 1 ,
328
+ epsg = geogrid .epsg )
329
+ yds_dem , xds_dem = \
330
+ set_get_geo_info (hdf5_obj , root_ds , dem_geogrid )
331
+ else :
332
+ yds_dem = yds
333
+ xds_dem = xds
334
+
335
+ _save_hdf5_dataset (temp_interpolated_dem .name , hdf5_obj ,
336
+ root_ds , yds_dem , xds_dem ,
337
+ 'interpolatedDem' ,
338
+ long_name = 'Interpolated DEM' ,
339
+ units = '' )
340
+
287
341
# save GCOV off-diagonal elements
288
342
if flag_fullcovariance :
289
343
off_diag_terms_list = []
0 commit comments