Skip to content

Commit e5630ae

Browse files
authored
Merge branch 'main' into issue_228
2 parents 5b948bb + 7683afd commit e5630ae

File tree

5 files changed

+429
-0
lines changed

5 files changed

+429
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
[{
2+
"id": "worldcover_statistics",
3+
"type": "openeo",
4+
"description": "World cover statistics.",
5+
"backend": "openeofed.dataspace.copernicus.eu",
6+
"process_graph": {
7+
"worldcover_statistics": {
8+
"arguments": {
9+
"geometries": {
10+
"coordinates": [
11+
[
12+
[
13+
6.990046173926822,
14+
50.92370033913926
15+
],
16+
[
17+
6.990915651805,
18+
50.8595444392102
19+
],
20+
[
21+
7.239586324963913,
22+
50.84527557041392
23+
],
24+
[
25+
7.238716847085734,
26+
50.92917965051333
27+
],
28+
[
29+
6.990046173926822,
30+
50.92370033913926
31+
]
32+
]
33+
],
34+
"type": "Polygon"
35+
}
36+
},
37+
"description": "Land cover statistics for one or more areas based on ESA WorldCover 2021, provided by Terrascope.",
38+
"namespace": "https://raw.githubusercontent.com/ESA-APEx/apex_algorithms/refs/heads/main/algorithm_catalog/vito/worldcover_statistics/openeo_udp/worldcover_statistics.json",
39+
"process_id": "worldcover_statistics",
40+
"result": true
41+
}
42+
},
43+
"reference_data": {}
44+
}]
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# 2021 landcover statistics
2+
3+
Computes landcover statistics over multiple user provided areas, based on the ESA WorldCover product.
4+
5+
As input, the service takes GeoJSON, which can also be a FeatureCollection defining multiple feature.
6+
7+
The output is a csv file containing the fraction of a specific landcover present in each area.
8+
9+
This service is maintained and provided by Terrascope.
10+
11+
![statistics](statistics.png)
12+
13+
## Methodology
14+
15+
The European Space Agency (ESA) WorldCover 10 m 2021 product provides a global land cover map for 2021 at 10 m resolution based on Sentinel-1 and Sentinel-2 data. The WorldCover product comes with 11 land cover classes, aligned with UN-FAO's Land Cover Classification System, and has been generated in the framework of the ESA WorldCover project.
16+
17+
18+
## Performance
19+
20+
The cost of an example run using 3 medium sized areas spread across Europe was 6 platform credits, it finished in under 4 minutes total runtime.
21+
Performance characteristics may differ depending on the type of polygon inputs, for instance, a single large area versus many small areas. Hence it
22+
is advised to perform tests based on your desired geometry.
23+
16.7 KB
Loading
Lines changed: 259 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,259 @@
1+
{
2+
"id": "worldcover_statistics",
3+
"summary": "Land cover statistics for one or more areas based on ESA WorldCover 2021, provided by Terrascope.",
4+
"description": "# 2021 landcover statistics\n\nComputes landcover statistics over multiple areas, based on the ESA WorldCover product.\n\nAs input, the service takes GeoJSON, which can also be a FeatureCollection defining multiple feature.\n\nThe output is a csv file containing the fraction of a specific landcover present in each area.\n\nThis service is maintained and provided by Terrascope.\n\n![statistics](statistics.png)\n\n## Methodology\n\nThe European Space Agency (ESA) WorldCover 10 m 2021 product provides a global land cover map for 2021 at 10 m resolution based on Sentinel-1 and Sentinel-2 data. The WorldCover product comes with 11 land cover classes, aligned with UN-FAO's Land Cover Classification System, and has been generated in the framework of the ESA WorldCover project.\n\n",
5+
"process_graph": {
6+
"load4": {
7+
"process_id": "load_collection",
8+
"arguments": {
9+
"spatial_extent": null,
10+
"temporal_extent": null,
11+
"bands": [
12+
"MAP"
13+
],
14+
"id": "ESA_WORLDCOVER_10M_2021_V2"
15+
}
16+
},
17+
"apply6": {
18+
"process_id": "apply_dimension",
19+
"arguments": {
20+
"data": {
21+
"from_node": "load4"
22+
},
23+
"dimension": "bands",
24+
"process": {
25+
"process_graph": {
26+
"1": {
27+
"arguments": {
28+
"data": [
29+
{
30+
"process_graph": {
31+
"eq1": {
32+
"arguments": {
33+
"x": {
34+
"from_parameter": "data"
35+
},
36+
"y": 10
37+
},
38+
"process_id": "eq",
39+
"result": true
40+
}
41+
}
42+
},
43+
{
44+
"process_graph": {
45+
"eq1": {
46+
"arguments": {
47+
"x": {
48+
"from_parameter": "data"
49+
},
50+
"y": 20
51+
},
52+
"process_id": "eq",
53+
"result": true
54+
}
55+
}
56+
},
57+
{
58+
"process_graph": {
59+
"eq1": {
60+
"arguments": {
61+
"x": {
62+
"from_parameter": "data"
63+
},
64+
"y": 30
65+
},
66+
"process_id": "eq",
67+
"result": true
68+
}
69+
}
70+
},
71+
{
72+
"process_graph": {
73+
"eq1": {
74+
"arguments": {
75+
"x": {
76+
"from_parameter": "data"
77+
},
78+
"y": 40
79+
},
80+
"process_id": "eq",
81+
"result": true
82+
}
83+
}
84+
},
85+
{
86+
"process_graph": {
87+
"eq1": {
88+
"arguments": {
89+
"x": {
90+
"from_parameter": "data"
91+
},
92+
"y": 50
93+
},
94+
"process_id": "eq",
95+
"result": true
96+
}
97+
}
98+
},
99+
{
100+
"process_graph": {
101+
"eq1": {
102+
"arguments": {
103+
"x": {
104+
"from_parameter": "data"
105+
},
106+
"y": 60
107+
},
108+
"process_id": "eq",
109+
"result": true
110+
}
111+
}
112+
},
113+
{
114+
"process_graph": {
115+
"eq1": {
116+
"arguments": {
117+
"x": {
118+
"from_parameter": "data"
119+
},
120+
"y": 70
121+
},
122+
"process_id": "eq",
123+
"result": true
124+
}
125+
}
126+
},
127+
{
128+
"process_graph": {
129+
"eq1": {
130+
"arguments": {
131+
"x": {
132+
"from_parameter": "data"
133+
},
134+
"y": 80
135+
},
136+
"process_id": "eq",
137+
"result": true
138+
}
139+
}
140+
},
141+
{
142+
"process_graph": {
143+
"eq1": {
144+
"arguments": {
145+
"x": {
146+
"from_parameter": "data"
147+
},
148+
"y": 90
149+
},
150+
"process_id": "eq",
151+
"result": true
152+
}
153+
}
154+
},
155+
{
156+
"process_graph": {
157+
"eq1": {
158+
"arguments": {
159+
"x": {
160+
"from_parameter": "data"
161+
},
162+
"y": 95
163+
},
164+
"process_id": "eq",
165+
"result": true
166+
}
167+
}
168+
},
169+
{
170+
"process_graph": {
171+
"eq1": {
172+
"arguments": {
173+
"x": {
174+
"from_parameter": "data"
175+
},
176+
"y": 100
177+
},
178+
"process_id": "eq",
179+
"result": true
180+
}
181+
}
182+
}
183+
]
184+
},
185+
"process_id": "array_create",
186+
"result": true
187+
}
188+
}
189+
}
190+
}
191+
},
192+
"rename7": {
193+
"process_id": "rename_labels",
194+
"arguments": {
195+
"data": {
196+
"from_node": "apply6"
197+
},
198+
"dimension": "bands",
199+
"target": [
200+
"treecover",
201+
"shrubland",
202+
"grassland",
203+
"cropland",
204+
"builtup",
205+
"bare/sparse vegetation",
206+
"snow and ice",
207+
"water",
208+
"herbaceous wetland",
209+
"mangroves",
210+
"moss and lichen"
211+
]
212+
}
213+
},
214+
"aggregate5": {
215+
"process_id": "aggregate_spatial",
216+
"arguments": {
217+
"data": {
218+
"from_node": "rename7"
219+
},
220+
"geometries": {
221+
"from_parameter": "geometries"
222+
},
223+
"reducer": {
224+
"process_graph": {
225+
"count1": {
226+
"arguments": {
227+
"data": {
228+
"from_parameter": "data"
229+
}
230+
},
231+
"process_id": "mean",
232+
"result": true
233+
}
234+
}
235+
}
236+
}
237+
},
238+
"save3": {
239+
"process_id": "save_result",
240+
"arguments": {
241+
"data": {
242+
"from_node": "aggregate5"
243+
},
244+
"format": "CSV"
245+
},
246+
"result": true
247+
}
248+
},
249+
"parameters": [
250+
{
251+
"name": "geometries",
252+
"description": "Geometries for which the statistics will be computed, as a GeoJSON FeatureCollection. Feature properties are preserved for vector data cubes and all GeoJSON Features.\n\nOne value will be computed per label in the dimension of type `geometries`, GeoJSON `Feature` or `Geometry`. For a `FeatureCollection` multiple values will be computed, one value per contained `Feature`. No values will be computed for empty geometries. For example, a single value will be computed for a `MultiPolygon`, but two values will be computed for a `FeatureCollection` containing two polygons.\n\n- For **polygons**, the process considers all pixels for which the point at the pixel center intersects with the corresponding polygon (as defined in the Simple Features standard by the OGC).\n- For **points**, the process considers the closest pixel center.\n- For **lines** (line strings), the process considers all the pixels whose centers are closest to at least one point on the line.\n\nThus, pixels may be part of multiple geometries and be part of multiple aggregations. No operation is applied to geometries that are outside of the bounds of the data.",
253+
"schema": {
254+
"type": "object",
255+
"subtype": "geojson"
256+
}
257+
}
258+
]
259+
}

0 commit comments

Comments
 (0)