Processing a staged Landsat-9 acquisition
The non-Cloud native Workflow chains the crop
, norm_diff
, otsu
and stac
steps taking a staged EO acquisition as a STAC Catalog in a directory as input parameters:
- a local STAC Catalog in a directory
- a bounding box area of interest (AOI)
- the EPSG code of the bounding box area of interest
- a list of common band names (["green", "nir08"])
graph TB
S[(local storage)]
S -- STAC Catalog --> B(("crop(green)"));
S -- STAC Catalog --> C(("crop(nir)"));
S -- STAC Catalog --> F
P[bands]
Q[EPSG code]
R[AOI]
subgraph scatter on bands
P --> B(("crop(green)"))
P --> C(("crop(nir08)"))
Q --> B(("crop(green)"))
Q --> C(("crop(nir08)"))
R --> B(("crop(green)"))
R --> C(("crop(nir08)"))
end
B(("crop(green)")) --> D
C(("crop(nir08)")) --> D
D(("`Normalized
difference`"));
D --> E(("`Otsu
threshold`"))
E --> F(("`Create
STAC Catalog`"))
The CWL Workflow is shown below and the lines highlighted show the changes to manage a staged STAC Catalog instead of an URL to a STAC Item:
app-water-body.cwl |
---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191 | cwlVersion: v1.0
$namespaces:
s: https://schema.org/
s:softwareVersion: 1.0.0
schemas:
- http://schema.org/version/9.0/schemaorg-current-http.rdf
$graph:
- class: Workflow
id: main
label: Water body detection based on NDWI and the otsu threshold
doc: Water bodies detection based on NDWI and otsu threshold applied to Sentinel-2 or Landsat-9 staged acquisitions
requirements:
- class: ScatterFeatureRequirement
inputs:
aoi:
label: area of interest
doc: area of interest as a bounding box
type: string
epsg:
label: EPSG code
doc: EPSG code
type: string
default: "EPSG:4326"
bands:
label: bands used for the NDWI
doc: bands used for the NDWI
type: string[]
default: ["green", "nir"]
item:
doc: Reference to a STAC item
label: STAC item reference
type: Directory
outputs:
- id: stac_catalog
outputSource:
- node_stac/stac_catalog
type: Directory
steps:
node_crop:
run: "#crop"
in:
item: item
aoi: aoi
epsg: epsg
band: bands
out:
- cropped
scatter: band
scatterMethod: dotproduct
node_normalized_difference:
run: "#norm_diff"
in:
rasters:
source: node_crop/cropped
out:
- ndwi
node_otsu:
run: "#otsu"
in:
raster:
source: node_normalized_difference/ndwi
out:
- binary_mask_item
node_stac:
run: "#stac"
in:
item: item
rasters:
source: node_otsu/binary_mask_item
out:
- stac_catalog
- class: CommandLineTool
id: crop
requirements:
InlineJavascriptRequirement: {}
EnvVarRequirement:
envDef:
PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PYTHONPATH: /app
ResourceRequirement:
coresMax: 1
ramMax: 512
hints:
DockerRequirement:
dockerPull: localhost/crop:latest
baseCommand: ["python", "-m", "app"]
arguments: []
inputs:
item:
type: Directory
inputBinding:
prefix: --input-item
aoi:
type: string
inputBinding:
prefix: --aoi
epsg:
type: string
inputBinding:
prefix: --epsg
band:
type: string
inputBinding:
prefix: --band
outputs:
cropped:
outputBinding:
glob: '*.tif'
type: File
- class: CommandLineTool
id: norm_diff
requirements:
InlineJavascriptRequirement: {}
EnvVarRequirement:
envDef:
PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PYTHONPATH: /app
ResourceRequirement:
coresMax: 1
ramMax: 512
hints:
DockerRequirement:
dockerPull: localhost/norm-diff:latest
baseCommand: ["python", "-m", "app"]
arguments: []
inputs:
rasters:
type: File[]
inputBinding:
position: 1
outputs:
ndwi:
outputBinding:
glob: '*.tif'
type: File
- class: CommandLineTool
id: otsu
requirements:
InlineJavascriptRequirement: {}
EnvVarRequirement:
envDef:
PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PYTHONPATH: /app
ResourceRequirement:
coresMax: 1
ramMax: 512
hints:
DockerRequirement:
dockerPull: localhost/otsu:latest
baseCommand: ["python", "-m", "app"]
arguments: []
inputs:
raster:
type: File
inputBinding:
position: 1
outputs:
binary_mask_item:
outputBinding:
glob: '*.tif'
type: File
- class: CommandLineTool
id: stac
requirements:
InlineJavascriptRequirement: {}
EnvVarRequirement:
envDef:
PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PYTHONPATH: /app
ResourceRequirement:
coresMax: 1
ramMax: 512
hints:
DockerRequirement:
dockerPull: localhost/stac:latest
baseCommand: ["python", "-m", "app"]
arguments: []
inputs:
item:
type: Directory
inputBinding:
prefix: --input-item
rasters:
type: File
inputBinding:
prefix: --water-body
outputs:
stac_catalog:
outputBinding:
glob: .
type: Directory
|