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