|
1 | 1 | # Processes
|
2 | 2 |
|
3 |
| -## Core Profile |
| 3 | +The openEO project defines a large number of processes, which can be found at <https://processes.openeo.org>. |
| 4 | +Due to the number of processes, we need to define a profile (i.e. a subset of processes) that must be implemented on each back-end so that a certain level of interoperability can be achieved. |
4 | 5 |
|
5 |
| -As the openEO project defines a lot of processes, we need to define a core profile (i.e. a subset) that needs to be implemented on each back-end. |
6 |
| -All processes specifications can be found at <https://processes.openeo.org> |
| 6 | +In addition to the general openEO Processes specification and their [Processes Profiles](https://openeo.org/documentation/1.0/developers/profiles/processes.html), |
| 7 | +openEO Platform requires to implement an additional Process profile: |
| 8 | +*L2P: Required - openEO Platform*, which requires one of the openEO profiles *L2A: Recommended (Raster)* or *L2B: Recommended (Vector)*. |
| 9 | +There are two additional openEO Platform specific profiles with additional requirements: *L3P: Advanced - openEO Platform* and *L4P: Complete - openEO Platform*. |
7 | 10 |
|
8 |
| -### Data Cubes |
9 |
| -- `add_dimension`: Add a new dimension |
10 |
| -- `aggregate_spatial`: Zonal statistics for geometries |
11 |
| -- `aggregate_temporal`: Temporal aggregations |
12 |
| -- `aggregate_temporal_period`: Temporal aggregations based on calendar hierarchies |
13 |
| -- `apply`: Apply a process to each pixel |
14 |
| -- `apply_dimension`: Apply a process to pixels along a dimension |
15 |
| -- `apply_kernel`: Apply a spatial convolution with a kernel |
16 |
| -- `dimension_labels`: Get the dimension labels |
17 |
| -- `drop_dimension`: Remove a dimension |
18 |
| -- `filter_bands`: Filter the bands by names |
19 |
| -- `filter_bbox`: Spatial filter using a bounding box |
20 |
| -- `filter_spatial`: Spatial filter using geometries |
21 |
| -- `filter_temporal`: Temporal filter for temporal intervals |
22 |
| -- `load_collection`: Load a collection |
23 |
| -- `load_result`: Load batch job results - **experimental** |
24 |
| -- `mask`: Apply a raster mask |
25 |
| -- `mask_polygon`: Apply a polygon mask |
26 |
| -- `merge_cubes`: Merge two data cubes |
27 |
| -- `reduce_dimension`: Reduce dimensions |
28 |
| -- `rename_dimension`: Rename a dimension |
29 |
| -- `rename_labels`: Rename dimension labels -> needed often for apply_dimension |
30 |
| -- `resample_cube_spatial`: Resample the spatial dimensions to match a target data cube |
31 |
| -- `resample_cube_temporal`: Resample temporal dimensions to match a target data cube - **experimental** |
32 |
| -- `resample_spatial`: Resample and warp the spatial dimensions |
33 |
| -- `save_result`: Save processed data |
| 11 | +<figure> |
| 12 | + <img src="./profiles/processes.png" alt="The hierarchy of openEO and openEO Platform Processes profiles."> |
| 13 | + <figcaption>An overview of the openEO and openEO Platform Processes profiles.</figcaption> |
| 14 | +</figure> |
34 | 15 |
|
35 |
| -### Arrays / Reducers |
36 |
| -- `array_append`: Append a value to an array - **experimental** |
37 |
| -- `array_apply`: Apply a process to each array element |
38 |
| -- `array_concat`: Merge two arrays - **experimental** |
39 |
| -- `array_contains`: Check whether the array contains a given value |
40 |
| -- `array_create`: Create an array - **experimental** |
41 |
| -- `array_element`: Get an element from an array |
42 |
| -- `array_filter`: Filter an array based on a condition |
43 |
| -- `array_find`: Get the index for a value in an array |
44 |
| -- `array_interpolate_linear`: One-dimensional linear interpolation for arrays - **experimental** |
45 |
| -- `array_labels`: Get the labels for an array |
46 |
| -- `array_modify`: Change the content of an array (insert, remove, update) - **experimental** |
47 |
| -- `count`: Count the number of elements |
48 |
| -- `extrema`: Minimum and maximum values |
49 |
| -- `first`: First element |
50 |
| -- `last`: Last element |
51 |
| -- `max`: Maximum value |
52 |
| -- `mean`: Arithmetic mean (average) |
53 |
| -- `median`: Statistical median |
54 |
| -- `min`: Minimum value |
55 |
| -- `order`: Create a permutation |
56 |
| -- `product`: Compute the product by multiplying numbers |
57 |
| -- `rearrange`: Rearrange an array based on a permutation |
58 |
| -- `sort`: Sort data |
59 |
| -- `sum`: Compute the sum by adding up numbers |
| 16 | +### Requirements per Profile |
60 | 17 |
|
61 |
| -### Math |
62 |
| -- `absolute`: Absolute value |
63 |
| -- `add`: Addition of two numbers |
64 |
| -- `arccos`: Inverse cosine |
65 |
| -- `arcosh`: Inverse hyperbolic cosine |
66 |
| -- `arcsin`: Inverse sine |
67 |
| -- `arctan`: Inverse tangent |
68 |
| -- `arctan2`: Inverse tangent of two numbers |
69 |
| -- `arsinh`: Inverse hyperbolic sine |
70 |
| -- `artanh`: Inverse hyperbolic tangent |
71 |
| -- `ceil`: Round fractions up |
72 |
| -- `clip`: Clip a value between a minimum and a maximum |
73 |
| -- `constant`: Define a constant value -> pretty easy implementation |
74 |
| -- `cos`: Cosine |
75 |
| -- `cosh`: Hyperbolic cosine |
76 |
| -- `divide`: Division of two numbers |
77 |
| -- `e`: Euler's number |
78 |
| -- `exp`: Exponentiation to the base e |
79 |
| -- `floor`: Round fractions down |
80 |
| -- `int`: Integer part of a number |
81 |
| -- `linear_scale_range`: Linear transformation between two ranges |
82 |
| -- `ln`: Natural logarithm |
83 |
| -- `log`: Logarithm to a base |
84 |
| -- `mod`: Modulo |
85 |
| -- `multiply`: Multiplication of two numbers |
86 |
| -- `nan` - Not a Number - **experimental** |
87 |
| -- `pi`: Pi |
88 |
| -- `power`: Exponentiation |
89 |
| -- `round`: Round to a specified precision |
90 |
| -- `sgn`: Signum |
91 |
| -- `sin`: Sine |
92 |
| -- `sinh`: Hyperbolic sine |
93 |
| -- `sqrt`: Square root |
94 |
| -- `subtract`: Subtraction of two numbers |
95 |
| -- `tan`: Tangent |
96 |
| -- `tanh`: Hyperbolic tangent |
| 18 | +The profiles below only lists requirements that are not covered by the corresponding openEO profiles yet. |
97 | 19 |
|
98 |
| -### Statistics / Indices |
99 |
| -- `ndvi`: Normalized Difference Vegetation Index |
100 |
| -- `normalized_difference`: Normalized difference |
101 |
| -- `quantiles`: Quantiles |
102 |
| -- `sd`: Standard deviation |
103 |
| -- `variance`: Variance |
| 20 | +Although in the openEO Profiles experimental processes shall only lead to a "warning", experimental processes in profiles that *L2P* depends on are required to be available (which currently are `inspect` and `nan`). |
104 | 21 |
|
105 |
| -### Logic |
106 |
| -- `and`: Logical AND |
107 |
| -- `all`: Are all of the values true? |
108 |
| -- `any`: Is at least one value true? |
109 |
| -- `between`: Between comparison |
110 |
| -- `eq`: Equal to comparison |
111 |
| -- `gt`: Greater than comparison |
112 |
| -- `gte`: Greater than or equal to comparison |
113 |
| -- `if`: If-Then-Else conditional |
114 |
| -- `is_infinite`: Value is an infinite number - **experimental** |
115 |
| -- `is_nan`: Value is not a number |
116 |
| -- `is_nodata`: Value is a no-data value |
117 |
| -- `is_valid`: Value is valid data |
118 |
| -- `lt`: Less than comparison |
119 |
| -- `lte`: Less than or equal to comparison |
120 |
| -- `neq`: Not equal to comparison |
121 |
| -- `not`: Inverting a boolean |
122 |
| -- `or`: Logical OR |
123 |
| -- `xor`: Logical XOR (exclusive or) |
| 22 | +## L2P: Required - openEO Platform |
| 23 | + |
| 24 | +Requires [openEO Profile L2: Recommended](https://openeo.org/documentation/1.0/developers/profiles/processes.html#l2-recommended) and additionally: |
| 25 | + |
| 26 | +- **`add_dimension`** |
| 27 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 28 | +- **`aggregate_spatial`** |
| 29 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 30 | +- **`aggregate_temporal`** |
| 31 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 32 | +- **`aggregate_temporal_period`** |
| 33 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 34 | +- **`apply`** |
| 35 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 36 | +- **`apply_dimension`** |
| 37 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 38 | +- **`apply_kernel`** |
| 39 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 40 | +- **`array_contains`** |
| 41 | +- **`dimension_labels`** |
| 42 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 43 | +- **`drop_dimension`** |
| 44 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 45 | +- **`filter_bands`** |
| 46 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 47 | +- **`filter_bbox`** |
| 48 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 49 | +- **`filter_spatial`** |
| 50 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 51 | +- **`filter_temporal`** |
| 52 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 53 | +- **`load_collection`** |
| 54 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 55 | +- **`mask`** |
| 56 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 57 | +- **`mask_polygon`** |
| 58 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 59 | +- **`merge_cubes`** |
| 60 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 61 | +- **`ndvi`** |
| 62 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 63 | +- **`reduce_dimension`** |
| 64 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 65 | +- **`rename_dimension`** |
| 66 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 67 | +- **`rename_labels`** |
| 68 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 69 | +- **`resample_cube_spatial`** |
| 70 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 71 | +- **`resample_spatial`** |
| 72 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 73 | +- **`save_result`** |
| 74 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 75 | + |
| 76 | +## L3P: Advanced - openEO Platform |
| 77 | + |
| 78 | +Requires [openEO Profile L3: Advanced](https://openeo.org/documentation/1.0/developers/profiles/processes.html#l3-advanced) and additionally: |
| 79 | + |
| 80 | +- **`apply_neighborhood`** |
| 81 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 82 | +- **`ard_surface_reflectance`** (experimental) |
| 83 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 84 | +- **`filter_labels`** (experimental) |
| 85 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 86 | +- **`load_stac (load_result)`** (experimental) |
| 87 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 88 | +- **`reduce_spatial`** (experimental) |
| 89 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 90 | +- **`resample_cube_temporal`** |
| 91 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 92 | +- **`run_udf`** |
| 93 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 94 | + |
| 95 | +## L4P: Complete - openEO Platform |
| 96 | + |
| 97 | +Requires [openEO Profile L4: Above and Beyond](https://openeo.org/documentation/1.0/developers/profiles/processes.html#l4-above-and-beyond) and additionally: |
| 98 | + |
| 99 | +- **`atmospheric_correction`** (experimental) |
| 100 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 101 | +- **`load_uploaded_files`** (experimental) |
| 102 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 103 | +- **`load_url`** (experimental) |
| 104 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
| 105 | +- **`sar_backscatter`** (experimental) |
| 106 | + - has been tested on > 100x100km at 10m resolution (or equivalent) |
0 commit comments