@@ -1609,6 +1609,20 @@ def scanMetadata(self):
16091609 else :
16101610 raise RuntimeError (f"unsupported acquisition mode: '{ meta ['acquisition_mode' ]} '" )
16111611
1612+ def val_convert (val ):
1613+ try :
1614+ out = int (val )
1615+ except ValueError :
1616+ try :
1617+ out = float (val )
1618+ except ValueError :
1619+ if re .search ('[0-9]{2}-[A-Z]{3}-[0-9]{2}' , val ):
1620+ out = dateparse (val )
1621+ out = out .replace (tzinfo = timezone .utc )
1622+ else :
1623+ out = val
1624+ return out
1625+
16121626 with self .getFileObj (self .file ) as obj :
16131627 mph = obj .read (1247 ).decode ('ascii' )
16141628 sph = obj .read (1059 ).decode ('ascii' )
@@ -1622,7 +1636,7 @@ def scanMetadata(self):
16221636 match = re .match (pattern , line )
16231637 if match :
16241638 matchdict = match .groupdict ()
1625- val = str (matchdict ['value' ]).strip ()
1639+ val = val_convert ( str (matchdict ['value' ]).strip () )
16261640 origin [section ][matchdict ['key' ]] = val
16271641
16281642 raw = []
@@ -1631,17 +1645,18 @@ def scanMetadata(self):
16311645 match = re .match (pattern , line )
16321646 if match :
16331647 matchdict = match .groupdict ()
1634- raw .append ((matchdict ['key' ], str (matchdict ['value' ]).strip ()))
1648+ val = val_convert (str (matchdict ['value' ]).strip ())
1649+ raw .append ((matchdict ['key' ], val ))
16351650 raw = [raw [i :i + 7 ] for i in range (0 , len (raw ), 7 )]
16361651 datasets = {x .pop (0 )[1 ]: {y [0 ]: y [1 ] for y in x } for x in raw }
16371652 origin ['DSD' ] = datasets
16381653
16391654 meta ['origin' ] = origin
16401655
16411656 key = 'GEOLOCATION GRID ADS'
1642- ds_offset = int ( origin ['DSD' ][key ]['DS_OFFSET' ])
1643- ds_size = int ( origin ['DSD' ][key ]['DS_SIZE' ])
1644- dsr_size = int ( origin ['DSD' ][key ]['DSR_SIZE' ])
1657+ ds_offset = origin ['DSD' ][key ]['DS_OFFSET' ]
1658+ ds_size = origin ['DSD' ][key ]['DS_SIZE' ]
1659+ dsr_size = origin ['DSD' ][key ]['DSR_SIZE' ]
16451660 obj .seek (ds_offset )
16461661 geo = obj .read (ds_size )
16471662
@@ -1710,19 +1725,17 @@ def scanMetadata(self):
17101725 meta ['polarizations' ] = ['VV' ]
17111726
17121727 meta ['orbit' ] = origin ['SPH' ]['PASS' ][0 ]
1713- start = datetime .strptime (origin ['MPH' ]['SENSING_START' ], '%d-%b-%Y %H:%M:%S.%f' )
1714- meta ['start' ] = start .strftime ('%Y%m%dT%H%M%S' )
1715- stop = datetime .strptime (origin ['MPH' ]['SENSING_STOP' ], '%d-%b-%Y %H:%M:%S.%f' )
1716- meta ['stop' ] = stop .strftime ('%Y%m%dT%H%M%S' )
1717- meta ['spacing' ] = (float (origin ['SPH' ]['RANGE_SPACING' ]), float (origin ['SPH' ]['AZIMUTH_SPACING' ]))
1718- meta ['looks' ] = (float (origin ['SPH' ]['RANGE_LOOKS' ]), float (origin ['SPH' ]['AZIMUTH_LOOKS' ]))
1719- meta ['samples' ] = int (origin ['SPH' ]['LINE_LENGTH' ])
1720- meta ['lines' ] = int (origin ['DSD' ]['MDS1' ]['NUM_DSR' ])
1721-
1722- meta ['orbitNumber_abs' ] = int (origin ['MPH' ]['ABS_ORBIT' ])
1723- meta ['orbitNumber_rel' ] = int (origin ['MPH' ]['REL_ORBIT' ])
1724- meta ['cycleNumber' ] = int (origin ['MPH' ]['CYCLE' ])
1725- meta ['frameNumber' ] = int (origin ['MPH' ]['ABS_ORBIT' ])
1728+ meta ['start' ] = origin ['MPH' ]['SENSING_START' ].strftime ('%Y%m%dT%H%M%S' )
1729+ meta ['stop' ] = origin ['MPH' ]['SENSING_STOP' ].strftime ('%Y%m%dT%H%M%S' )
1730+ meta ['spacing' ] = (origin ['SPH' ]['RANGE_SPACING' ], origin ['SPH' ]['AZIMUTH_SPACING' ])
1731+ meta ['looks' ] = (origin ['SPH' ]['RANGE_LOOKS' ], origin ['SPH' ]['AZIMUTH_LOOKS' ])
1732+ meta ['samples' ] = origin ['SPH' ]['LINE_LENGTH' ]
1733+ meta ['lines' ] = origin ['DSD' ]['MDS1' ]['NUM_DSR' ]
1734+
1735+ meta ['orbitNumber_abs' ] = origin ['MPH' ]['ABS_ORBIT' ]
1736+ meta ['orbitNumber_rel' ] = origin ['MPH' ]['REL_ORBIT' ]
1737+ meta ['cycleNumber' ] = origin ['MPH' ]['CYCLE' ]
1738+ meta ['frameNumber' ] = origin ['MPH' ]['ABS_ORBIT' ]
17261739
17271740 meta ['incidenceAngleMin' ], meta ['incidenceAngleMax' ], \
17281741 meta ['rangeResolution' ], meta ['azimuthResolution' ], \
0 commit comments