Skip to content

Commit 5bb32d8

Browse files
feat: aria stacking uses aria frame id instead of frame number, add asf_enumeration package
1 parent c73b02c commit 5bb32d8

3 files changed

Lines changed: 12 additions & 53 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ and uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
3232

3333
### Changed
3434
- Aria stack supports different output types
35+
- Aria stacking uses aria frame id instead of frame number for stacking
3536
- asf_search uses `SearchAPISession` by default for search queries
3637
- bump asf-search to v9.0.4
3738

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ watchfiles==0.19.0
2424

2525
asf_search==9.0.4
2626
python-json-logger==2.0.7
27+
asf_enumeration
2728

2829
pyshp==2.1.3
2930
geopandas

src/SearchAPI/application/search.py

Lines changed: 10 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -2,64 +2,21 @@
22

33
import dateparser
44
import asf_search as asf
5-
from asf_search import ASFSearchResults
5+
from asf_search import ASFSearchResults, ASFProduct
66
from shapely.wkt import dumps as dump_to_wkt
77
from 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

Comments
 (0)