Skip to content

Commit 668804b

Browse files
Merge pull request #46 from asfadmin/dev
ARIA GUNW uses aria frame id for stacking
2 parents f52dd00 + 5bb32d8 commit 668804b

4 files changed

Lines changed: 15 additions & 55 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ 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
37+
- bump asf-search to v9.0.4
3638

3739
------
3840
## [1.0.4](https://github.com/asfadmin/Discovery-SearchAPI-v3/compare/v1.0.3...v1.0.4)

requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ ujson==5.7.0
2222
uvicorn==0.21.1
2323
watchfiles==0.19.0
2424

25-
asf_search==9.0.2
25+
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/application.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ async def query_baseline(searchOptions: BaselineSearchOptsModel = Depends(proces
107107
media_type='text/html; charset=utf-8',
108108
headers=constants.DEFAULT_HEADERS
109109
)
110-
return
110+
111111
stack = stack_aria_gunw(reference)
112112
response_info = as_output(stack, output=output)
113113
return Response(**response_info)

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)