1+ from collections import defaultdict
2+
3+ import dateparser
4+ import asf_search as asf
5+ from shapely .wkt import dumps as dump_to_wkt
6+ from shapely import Polygon
7+
8+ def stack_aria_gunw (frame : str ):
9+ reference = asf .search (frame = int (frame ), dataset = asf .DATASET .ARIA_S1_GUNW , maxResults = 1 )[0 ]
10+
11+ opts = asf .ASFSearchOptions (
12+ relativeOrbit = reference .properties ['pathNumber' ],
13+ processingLevel = asf .PRODUCT_TYPE .SLC ,
14+ dataset = asf .DATASET .SENTINEL1 ,
15+ beamMode = 'IW' ,
16+ polarization = ['VV' ,'VV+VH' ],
17+ flightDirection = reference .properties ['flightDirection' ],
18+ intersectsWith = dump_to_wkt (Polygon (reference .geometry ['coordinates' ][0 ]))
19+ )
20+
21+ slc_stack = asf .search (opts = opts )
22+
23+ groups = defaultdict (list )
24+ for product in slc_stack :
25+ group_id = product .properties ['platform' ] + '_' + str (product .properties ['orbit' ])
26+ groups [group_id ].append (product )
27+ # dateparser.parse(str(value))
28+ aria_groups = [
29+ {
30+ 'date' : min (dateparser .parse (product .properties ['startTime' ]) for product in group ),
31+ 'products' : [product for product in group ],
32+ }
33+ for group in groups .values ()
34+ ]
35+
36+ # track group index on each product, naively choose first granule available
37+ for idx , group in enumerate (aria_groups ):
38+ group_granule_idx = None
39+ for idy , product in enumerate (group ['products' ]):
40+ product .properties ['groupIDX' ] = idx
41+ if group_granule_idx is None :
42+ if product .has_baseline ():
43+ group_granule_idx = idy
44+
45+ group ['group_granule_idx' ] = group_granule_idx
46+
47+
48+
49+ stack = asf .ASFSearchResults ([group ['products' ][group ['group_granule_idx' ]] for group in aria_groups if group ['group_granule_idx' ] is not None ])
50+ target_stack , warnings = asf .baseline .get_baseline_from_stack (reference , stack )
51+ for product in target_stack :
52+ group_idx = product .properties .pop ('groupIDX' )
53+ aria_groups [group_idx ]['perpendicularBaseline' ] = product .properties ['perpendicularBaseline' ]
54+ aria_groups [group_idx ]['temporalBaseline' ] = product .properties ['temporalBaseline' ]
55+
56+ for group in aria_groups :
57+ for idx , product in enumerate (group ['products' ]):
58+ group ['products' ][idx ] = product .properties ['sceneName' ]
59+ group ['date' ] = group ['date' ].strftime ('%Y-%m-%dT%H:%M:%SZ' )
60+
61+ return aria_groups
0 commit comments