22
33import dateparser
44import asf_search as asf
5+ from asf_search import ASFSearchResults , ASFProduct
56from shapely .wkt import dumps as dump_to_wkt
67from shapely import Polygon
78
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
9+ from asf_enumeration import aria_s1_gunw
4610
11+ def stack_aria_gunw (frame_id : str ):
12+ reference , aria_groups = get_aria_groups_for_frame (frame_id )
13+
14+ stack = ASFSearchResults ([group .products [0 ] for group in aria_groups ])
15+ target_stack , warnings = asf .baseline .get_baseline_from_stack (reference , stack )
4716
17+ return target_stack
4818
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
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