66import pandas as pd
77import xarray as xr
88import numpy as np
9+ import math
910from osgeo import gdal
1011from xarray .backends import AbstractDataStore
1112from xarray .core .types import ReadBuffer
@@ -58,7 +59,8 @@ def open_asar_dataset(filepath: str | os.PathLike[Any] | ReadBuffer[Any] | Abstr
5859 metadata = get_metadata (gdal_dataset )
5960
6061 # Duplicate, read directly from file, as gdal does not parse some necessary metadata
61- metadata ["direct_parse" ] = envisat_direct .parse_direct (filepath )
62+
63+ metadata ["direct_parse" ] = envisat_direct .parse_direct (filepath , metadata )
6264
6365 # Create an xarray Dataset with pixel data and metadata attributes
6466 dataset : xr .Dataset = create_dataset (metadata , filepath )
@@ -80,14 +82,17 @@ def create_dataset(metadata: dict[str, Any], filepath: str) -> xr.Dataset:
8082 number_of_samples = metadata ["line_length" ]
8183 product_first_line_utc_time = metadata ["first_line_time" ]
8284 product_last_line_utc_time = metadata ["last_line_time" ]
83- print (product_first_line_utc_time )
8485
8586 number_of_lines = metadata ["records" ]["main_processing_params" ]["num_output_lines" ]
86- azimuth_time_interval = 1 / metadata ["records" ]["main_processing_params" ]["image_parameters" ]["prf_value" ][0 ]
87+ azimuth_time_interval = metadata ["line_time_interval" ]
88+
8789 range_sampling_rate = metadata ["records" ]["main_processing_params" ]["range_samp_rate" ]
8890 image_slant_range_time = metadata ["direct_parse" ]["slant_time_first" ] * 1e-9
8991
90- number_of_bursts = 0
92+ if metadata ["sph_descriptor" ] == "Image Mode SLC Image" :
93+ product_type = "SLC"
94+ else :
95+ raise RuntimeError ("Only Image mode SLC files(IMS) supported for now" )
9196
9297 attrs = {
9398 "family_name" : "Envisat" ,
@@ -98,33 +103,29 @@ def create_dataset(metadata: dict[str, Any], filepath: str) -> xr.Dataset:
98103 "relative_orbit_number" : metadata ["rel_orbit" ],
99104 "pass" : metadata ["pass" ],
100105 "transmitter_receiver_polarisations" : metadata ["mds1_tx_rx_polar" ],
101- "product_type" : "SLC" ,
106+ "product_type" : product_type ,
102107 "start_time" : product_first_line_utc_time ,
103108 "stop_time" : product_last_line_utc_time ,
104-
109+ "range_pixel_spacing" : metadata ["range_spacing" ],
110+ "azimuth_pixel_spacing" : metadata ["azimuth_spacing" ],
105111 "radar_frequency" : metadata ["records" ]["main_processing_params" ]["radar_freq" ] / 1e9 ,
106112 "ascending_node_time" : "" ,
107113 "azimuth_pixel_spacing" : metadata ["records" ]["main_processing_params" ]["azimuth_spacing" ],
108- "range_pixel_spacing" : metadata ["records" ]["main_processing_params" ]["range_samp_rate" ],
109114 "product_first_line_utc_time" : product_first_line_utc_time ,
110115 "product_last_line_utc_time" : product_last_line_utc_time ,
111116 "azimuth_time_interval" : azimuth_time_interval ,
112117 "image_slant_range_time" : image_slant_range_time ,
113118 "range_sampling_rate" : range_sampling_rate ,
114- "incidence_angle_mid_swath" : metadata ["direct_parse" ]["incidence_angle_center" ],
119+ "incidence_angle_mid_swath" : metadata ["direct_parse" ]["incidence_angle_center" ] * 2 * math . pi / 360 ,
115120 "metadata" : metadata
116121 }
117122
118123 azimuth_time = compute_azimuth_time (
119124 product_first_line_utc_time , product_last_line_utc_time , number_of_lines
120125 )
121126
122- if number_of_bursts == 0 :
123- swap_dims = {"line" : "azimuth_time" , "pixel" : "slant_range_time" }
124- else :
125- raise NotImplementedError (
126- "Burst processing is not implemented yet."
127- )
127+
128+ swap_dims = {"line" : "azimuth_time" , "pixel" : "slant_range_time" }
128129
129130 coords : dict [str , Any ] = {
130131 "pixel" : np .arange (0 , number_of_samples , dtype = int ),
@@ -179,7 +180,7 @@ def get_chirp_parameters(dataset: gdal.Dataset) -> dict[str, Any]:
179180 new_key = key .replace ('CHIRP_PARAMS_ADS_CHIRP_' , '' ).lower ()
180181 params ['chirp' ][new_key ] = float (value )
181182
182- params ['elev_corr_factor' ] = float (metadata .get ('CHIRP_PARAMS_ADS_ELEV_CORR_FACTOR' ))
183+ # params['elev_corr_factor'] = float(metadata.get('CHIRP_PARAMS_ADS_ELEV_CORR_FACTOR'))
183184 params ['cal_pulse_info' ] = get_chirp_cal_pulse_info (metadata )
184185
185186 return params
0 commit comments