Skip to content

Commit 1a5e612

Browse files
[ESA.scanMetadata] convert original metadata to python types (int, float, datetime)
1 parent d7a7723 commit 1a5e612

File tree

1 file changed

+31
-18
lines changed

1 file changed

+31
-18
lines changed

pyroSAR/drivers.py

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)