{"processes":[{"id":"absolute","summary":"Absolute value","description":"Computes the absolute value of a real number `x`, which is the \"unsigned\" portion of `x` and often denoted as *|x|*.\n\nNo-data values are passed through.","categories":["math"],"parameters":[{"name":"x","description":"A number.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed absolute value.","schema":{"type":["number","null"],"minimum":0}},"examples":[{"arguments":{"x":3.5},"returns":3.5},{"arguments":{"x":-0.4},"returns":0.4}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/AbsoluteValue.html","title":"Absolute value explained by Wolfram MathWorld"}]},{"id":"add_dimension","summary":"Add a new dimension","description":"Adds a new named dimension to the data cube.\n\nAfterwards, the dimension can be referred to with the specified `name`. If a dimension with the specified name exists, the process fails with a `DimensionExists` exception. The dimension label of the dimension is set to the specified `label`.","categories":["cubes"],"experimental":true,"parameters":[{"name":"data","description":"A data cube to add the dimension to.","schema":{"type":"object","subtype":"raster-cube"}},{"name":"name","description":"Name for the dimension.","schema":{"type":"string"}},{"name":"label","description":"A dimension label.","schema":[{"type":"number"},{"type":"string"}]},{"name":"type","description":"The type of dimension, defaults to `other`.","schema":{"type":"string","enum":["temporal","bands","other"]},"default":"other","optional":true}],"returns":{"description":"The data cube with a newly added dimension. The new dimension has exactly one dimension label. All other dimensions remain unchanged.","schema":{"type":"object","subtype":"raster-cube"}},"exceptions":{"DimensionExists":{"message":"A dimension with the specified name already exists."}}},{"id":"aggregate_temporal","summary":"Temporal aggregations","description":"Computes a temporal aggregation based on an array of temporal intervals.\n\nFor common regular calendar hierarchies such as year, month, week or seasons ``aggregate_temporal_period()`` can be used. Other calendar hierarchies must be transformed into specific intervals by the clients.\n\nFor each interval, all data along the dimension will be passed through the reducer.\n\nThe computed values will be projected to the labels. If no labels are specified, the start of the temporal interval will be used as label for the corresponding values. In case of a conflict (i.e. the user-specified values for the start times of the temporal intervals are not distinct), the user-defined labels must be specified in the parameter `labels` as otherwise a `DistinctDimensionLabelsRequired` exception would be thrown. The number of user-defined labels and the number of intervals need to be equal.\n\nIf the dimension is not set or is set to `null`, the data cube is expected to only have one temporal dimension.","categories":["cubes","aggregate"],"parameters":[{"name":"data","description":"A data cube.","schema":{"type":"object","subtype":"raster-cube"}},{"name":"intervals","description":"Left-closed temporal intervals, which are allowed to overlap. Each temporal interval in the array has exactly two elements:\n\n1. The first element is the start of the temporal interval. The specified time instant is **included** in the interval.\n2. The second element is the end of the temporal interval. The specified time instant is **excluded** from the interval.\n\nThe second element must always be greater/later than the first element, except when using time without date. Otherwise, a `TemporalExtentEmpty` exception is thrown.","schema":{"type":"array","subtype":"temporal-intervals","minItems":1,"items":{"type":"array","subtype":"temporal-interval","uniqueItems":true,"minItems":2,"maxItems":2,"items":{"anyOf":[{"type":"string","format":"date-time","subtype":"date-time","description":"Date and time with a time zone."},{"type":"string","format":"date","subtype":"date","description":"Date only, formatted as `YYYY-MM-DD`. The time zone is UTC. Missing time components are all 0."},{"type":"string","subtype":"time","pattern":"^\\d{2}:\\d{2}:\\d{2}$","description":"Time only, formatted as `HH:MM:SS`. The time zone is UTC."},{"type":"null"}]}},"examples":[[["2015-01-01","2016-01-01"],["2016-01-01","2017-01-01"],["2017-01-01","2018-01-01"]],[["06:00:00","18:00:00"],["18:00:00","06:00:00"]]]}},{"name":"reducer","description":"A reducer to be applied for the values contained in each interval. A reducer is a single process such as ``mean()`` or a set of processes, which computes a single value for a list of values, see the category 'reducer' for such processes. Intervals may not contain any values, which for most reducers leads to no-data (`null`) values by default.","schema":{"type":"object","subtype":"process-graph","parameters":[{"name":"data","description":"A labeled array with elements of any type. If there's no data for the interval, the array is empty.","schema":{"type":"array","subtype":"labeled-array","items":{"description":"Any data type."}}},{"name":"context","description":"Additional data passed by the user.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"The value to be set in the new data cube.","schema":{"description":"Any data type."}}}},{"name":"labels","description":"Distinct labels for the intervals, which can contain dates and/or times. Is only required to be specified if the values for the start of the temporal intervals are not distinct and thus the default labels would not be unique. The number of labels and the number of groups need to be equal.","schema":{"type":"array","uniqueItems":true,"items":{"type":["number","string"]}},"default":[],"optional":true},{"name":"dimension","description":"The name of the temporal dimension for aggregation. All data along the dimension is passed through the specified reducer. If the dimension is not set or set to `null`, the data cube is expected to only have one temporal dimension. Fails with a `TooManyDimensions` exception if it has more dimensions. Fails with a `DimensionNotAvailable` exception if the specified dimension does not exist or no temporal dimension is available.","schema":{"type":["string","null"]},"default":null,"optional":true},{"name":"context","description":"Additional data to be passed to the reducer.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"A new data cube with the same dimensions. The dimension properties (name, type, labels, reference system and resolution) remain unchanged, except for the resolution and dimension labels of the given temporal dimension.","schema":{"type":"object","subtype":"raster-cube"}},"examples":[{"arguments":{"data":{"from_parameter":"data"},"intervals":[["2015-01-01","2016-01-01"],["2016-01-01","2017-01-01"],["2017-01-01","2018-01-01"],["2018-01-01","2019-01-01"],["2019-01-01","2020-01-01"]],"labels":["2015","2016","2017","2018","2019"],"reducer":{"process_graph":{"mean1":{"process_id":"mean","arguments":{"data":{"from_parameter":"data"}},"result":true}}}}}],"exceptions":{"TooManyDimensions":{"message":"The data cube contains multiple temporal dimensions. The parameter `dimension` must be specified."},"DimensionNotAvailable":{"message":"A dimension with the specified name does not exist or no temporal dimension is available."},"DistinctDimensionLabelsRequired":{"message":"The dimension labels have duplicate values. Distinct labels must be specified."},"TemporalExtentEmpty":{"message":"At least one of the intervals is empty. The second instant in time must always be greater/later than the first instant."}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#aggregate","rel":"about","title":"Aggregation explained in the openEO documentation"},{"href":"https://www.rfc-editor.org/rfc/rfc3339.html","rel":"about","title":"RFC3339: Details about formatting temporal strings"}]},{"id":"add","summary":"Addition of two numbers","description":"Sums up the two numbers `x` and `y` (*`x + y`*) and returns the computed sum.\n\nNo-data values are taken into account so that the no-data value is returned if any element is such a value.\n\nThe computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it.","categories":["math"],"parameters":[{"name":"x","description":"The first summand.","schema":{"type":["number","null"]}},{"name":"y","description":"The second summand.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed sum of the two numbers.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":5,"y":2.5},"returns":7.5},{"arguments":{"x":-2,"y":-4},"returns":-6},{"arguments":{"x":1,"y":null},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Sum.html","title":"Sum explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/8766229","title":"IEEE Standard 754-2019 for Floating-Point Arithmetic"}]},{"id":"and","summary":"Logical AND","description":"Checks if **both** values are true.\n\nEvaluates parameter `x` before `y` and stops once the outcome is unambiguous. If any argument is `null`, the result will be `null` if the outcome is ambiguous.\n\n**Truth table:**\n\n```\nx \\ y || null  | false | true\n----- || ----- | ----- | -----\nnull  || null  | false | null\nfalse || false | false | false\ntrue  || null  | false | true\n```","categories":["logic"],"parameters":[{"name":"x","description":"A boolean value.","schema":{"type":["boolean","null"]}},{"name":"y","description":"A boolean value.","schema":{"type":["boolean","null"]}}],"returns":{"description":"Boolean result of the logical AND.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":true,"y":true},"returns":true},{"arguments":{"x":true,"y":false},"returns":false},{"arguments":{"x":false,"y":false},"returns":false},{"arguments":{"x":false,"y":null},"returns":false},{"arguments":{"x":true,"y":null},"returns":null}]},{"id":"all","summary":"Are all of the values true?","description":"Checks if **all** of the values in `data` are true.","categories":["logic","reducer"],"parameters":[{"name":"data","description":"A set of boolean values.","schema":{"type":"array","items":{"type":["boolean","null"]}}}],"returns":{"description":"Boolean result of the logical operation.","schema":{"type":["boolean","null"]}}},{"id":"aggregate_temporal_period","summary":"Temporal aggregations based on calendar hierarchies","description":"Computes a temporal aggregation based on calendar hierarchies such as years, months or seasons. For other calendar hierarchies ``aggregate_temporal()`` can be used.\n\nFor each interval, all data along the dimension will be passed through the reducer.\n\nIf the dimension is not set or is set to `null`, the data cube is expected to only have one temporal dimension.","categories":["aggregate","climatology","cubes"],"experimental":true,"parameters":[{"name":"data","description":"The source data cube.","schema":{"type":"object","subtype":"raster-cube"}},{"name":"period","description":"The time intervals to aggregate. The following pre-defined values are available:\n\n* `hour`: Hour of the day\n* `day`: Day of the year\n* `week`: Week of the year as defined in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Week_dates)\n* `dekad`: Ten day periods, counted per year with three periods per month (day 1 - 10, 11 - 20 and 21 - end of month). The third dekad of the month can range from 8 to 11 days. For example, the third dekad of a year spans from January 21 till January 31 (11 days), the fourth dekad spans from February 1 till February 10 (10 days) and the sixth dekad spans from February 21 till February 28 or February 29 in a leap year (8 or 9 days respectively).\n* `month`: Month of the year\n* `season`: Three month periods of the calendar seasons (December - February, March - May, June - August, September - November).\n* `tropical-season`: Six month periods of the tropical seasons (November - April, May - October).\n* `year`: Proleptic years\n* `decade`: Ten year periods ([0-to-9 decade](https://en.wikipedia.org/wiki/Decade#0-to-9_decade)), from a year ending in a 0 to the next year ending in a 9.\n* `decade-ad`: Ten year periods ([1-to-0 decade](https://en.wikipedia.org/wiki/Decade#1-to-0_decade)) better aligned with the anno Domini (AD) calendar era, from a year ending in a 1 to the next year ending in a 0.","schema":{"type":"string","enum":["hour","day","week","month","season","tropical-season","year"]}},{"name":"reducer","description":"A reducer to be applied for the values contained in each period. A reducer is a single process such as ``mean()`` or a set of processes, which computes a single value for a list of values, see the category 'reducer' for such processes. Periods may not contain any values, which for most reducers leads to no-data (`null`) values by default.","schema":{"type":"object","subtype":"process-graph","parameters":[{"name":"data","description":"A labeled array with elements of any type. If there's no data for the period, the array is empty.","schema":{"type":"array","subtype":"labeled-array","items":{"description":"Any data type."}}},{"name":"context","description":"Additional data passed by the user.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"The value to be set in the new data cube.","schema":{"description":"Any data type."}}}},{"name":"dimension","description":"The name of the temporal dimension for aggregation. All data along the dimension is passed through the specified reducer. If the dimension is not set or set to `null`, the source data cube is expected to only have one temporal dimension. Fails with a `TooManyDimensions` exception if it has more dimensions. Fails with a `DimensionNotAvailable` exception if the specified dimension does not exist or no temporal dimension is available.","schema":{"type":["string","null"]},"optional":true,"default":null},{"name":"context","description":"Additional data to be passed to the reducer.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"A new data cube with the same dimensions. The dimension properties (name, type, labels, reference system and resolution) remain unchanged, except for the resolution and dimension labels of the given temporal dimension. The specified temporal dimension has the following dimension labels (`YYYY` = four-digit year, `MM` = two-digit month, `DD` two-digit day of month):\n\n* `hour`: `YYYY-MM-DD-00` - `YYYY-MM-DD-23`\n* `day`: `YYYY-001` - `YYYY-365`\n* `week`: `YYYY-01` - `YYYY-52`\n* `dekad`: `YYYY-00` - `YYYY-36`\n* `month`: `YYYY-01` - `YYYY-12`\n* `season`: `YYYY-djf` (December - February), `YYYY-mam` (March - May), `YYYY-jja` (June - August), `YYYY-son` (September - November).\n* `tropical-season`: `YYYY-ndjfma` (November - April), `YYYY-mjjaso` (May - October).\n* `year`: `YYYY`\n* `decade`: `YYY0`\n* `decade-ad`: `YYY1`\n\nThe dimension labels in the new data cube are complete for the whole extent of the source data cube. For example, if `period` is set to `day` and the source data cube has two dimension labels at the beginning of the year (`2020-01-01`) and the end of a year (`2020-12-31`), the process returns a data cube with 365 dimension labels (`2020-001`, `2020-002`, ..., `2020-365`). In contrast, if `period` is set to `day` and the source data cube has just one dimension label `2020-01-05`, the process returns a data cube with just a single dimension label (`2020-005`).","schema":{"type":"object","subtype":"raster-cube"}},"exceptions":{"TooManyDimensions":{"message":"The data cube contains multiple temporal dimensions. The parameter `dimension` must be specified."},"DimensionNotAvailable":{"message":"A dimension with the specified name does not exist or no temporal dimension is available."}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#aggregate","rel":"about","title":"Aggregation explained in the openEO documentation"}]},{"id":"any","summary":"Is at least one value true?","description":"Checks if **any** (i.e. at least one) value in `data` is `true`.","categories":["logic","reducer"],"parameters":[{"name":"data","description":"A set of boolean values.","schema":{"type":"array","items":{"type":["boolean","null"]}}}],"returns":{"description":"Boolean result of the logical operation.","schema":{"type":["boolean","null"]}}},{"id":"apply_kernel","summary":"Apply a spatial convolution with a kernel","description":"Applies a 2D convolution (i.e. a focal operation with a weighted kernel) on the horizontal spatial dimensions (axes `x` and `y`) of a raster data cube.\n\nEach value in the kernel is multiplied with the corresponding pixel value and all products are summed up afterwards. The sum is then multiplied with the factor.","categories":["cubes","math > image filter"],"parameters":[{"name":"data","description":"A raster data cube.","schema":{"type":"object","subtype":"raster-cube"}},{"name":"kernel","description":"Kernel as a two-dimensional array of weights. The inner level of the nested array aligns with the `x` axis and the outer level aligns with the `y` axis. Each level of the kernel must have an uneven number of elements, otherwise the process throws a `KernelDimensionsUneven` exception.","schema":{"description":"A two-dimensional array of numbers.","type":"array","subtype":"kernel","items":{"type":"array","items":{"type":"number"}}}},{"name":"factor","description":"A factor that is multiplied to each value after the kernel has been applied.\n\nThis is basically a shortcut for explicitly multiplying each value by a factor afterwards, which is often required for some kernel-based algorithms such as the Gaussian blur.","schema":{"type":"number"},"default":1,"optional":true}],"returns":{"description":"A data cube with the newly computed values and the same dimensions. The dimension properties (name, type, labels, reference system and resolution) remain unchanged.","schema":{"type":"object","subtype":"raster-cube"}},"exceptions":{"KernelDimensionsUneven":{"message":"Each dimension of the kernel must have an uneven number of elements."}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#apply","rel":"about","title":"Apply explained in the openEO documentation"},{"rel":"about","href":"http://www.songho.ca/dsp/convolution/convolution.html","title":"Convolutions explained"},{"rel":"about","href":"http://www.songho.ca/dsp/convolution/convolution2d_example.html","title":"Example of 2D Convolution"}]},{"id":"apply","summary":"Apply a process to each value","description":"Applies a process to each value in the data cube (i.e. a local operation). In contrast, the process ``apply_dimension()`` applies a process to all values along a particular dimension.","categories":["cubes"],"parameters":[{"name":"data","description":"A data cube.","schema":{"type":"object","subtype":"raster-cube"}},{"name":"process","description":"A process that accepts and returns a single value and is applied on each individual value in the data cube. The process may consist of multiple sub-processes and could, for example, consist of processes such as ``absolute()`` or ``linear_scale_range()``.","schema":{"type":"object","subtype":"process-graph","parameters":[{"name":"x","description":"The value to process.","schema":{"description":"Any data type."}},{"name":"context","description":"Additional data passed by the user.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"The value to be set in the new data cube.","schema":{"description":"Any data type."}}}},{"name":"context","description":"Additional data to be passed to the process.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"A data cube with the newly computed values and the same dimensions. The dimension properties (name, type, labels, reference system and resolution) remain unchanged.","schema":{"type":"object","subtype":"raster-cube"}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#apply","rel":"about","title":"Apply explained in the openEO documentation"}]},{"id":"anomaly","summary":"Compute anomalies","description":"Computes anomalies based on normals for temporal periods. It compares the data for each label in the temporal dimension with the corresponding data in the normals data cube by subtracting the normal from the data.","categories":["climatology","cubes","math"],"experimental":true,"parameters":[{"name":"data","description":"A data cube with exactly one temporal dimension and the following dimension labels for the given period (`YYYY` = four-digit year, `MM` = two-digit month, `DD` two-digit day of month):\n\n* `hour`: `YYYY-MM-DD-00` - `YYYY-MM-DD-23`\n* `day`: `YYYY-001` - `YYYY-365`\n* `week`: `YYYY-01` - `YYYY-52`\n* `dekad`: `YYYY-00` - `YYYY-36`\n* `month`: `YYYY-01` - `YYYY-12`\n* `season`: `YYYY-djf` (December - February), `YYYY-mam` (March - May), `YYYY-jja` (June - August), `YYYY-son` (September - November).\n* `tropical-season`: `YYYY-ndjfma` (November - April), `YYYY-mjjaso` (May - October).\n* `year`: `YYYY`\n* `decade`: `YYY0`\n* `decade-ad`: `YYY1`\n* `single-period` / `climatology-period`: Any\n\n``aggregate_temporal_period()`` can compute such a data cube.","schema":{"type":"object","subtype":"raster-cube"}},{"name":"normals","description":"A data cube with normals, e.g. daily, monthly or yearly values computed from a process such as ``climatological_normal()``. Must contain exactly one temporal dimension with the following dimension labels for the given period:\n\n* `hour`: `00` - `23`\n* `day`: `001` - `365`\n* `week`: `01` - `52`\n* `dekad`: `00` - `36`\n* `month`: `01` - `12`\n* `season`: `djf` (December - February), `mam` (March - May), `jja` (June - August), `son` (September - November)\n* `tropical-season`: `ndjfma` (November - April), `mjjaso` (May - October)\n* `year`: Four-digit year numbers\n* `decade`: Four-digit year numbers, the last digit being a `0`\n* `decade-ad`: Four-digit year numbers, the last digit being a `1`\n* `single-period` / `climatology-period`: A single dimension label with any name is expected.","schema":{"type":"object","subtype":"raster-cube"}},{"name":"period","description":"Specifies the time intervals available in the normals data cube. The following options are available:\n\n* `hour`: Hour of the day\n* `day`: Day of the year\n* `week`: Week of the year\n* `dekad`: Ten day periods, counted per year with three periods per month (day 1 - 10, 11 - 20 and 21 - end of month). The third dekad of the month can range from 8 to 11 days. For example, the fourth dekad is Feb, 1 - Feb, 10 each year.\n* `month`: Month of the year\n* `season`: Three month periods of the calendar seasons (December - February, March - May, June - August, September - November).\n* `tropical-season`: Six month periods of the tropical seasons (November - April, May - October).\n* `year`: Proleptic years\n* `decade`: Ten year periods ([0-to-9 decade](https://en.wikipedia.org/wiki/Decade#0-to-9_decade)), from a year ending in a 0 to the next year ending in a 9.\n* `decade-ad`: Ten year periods ([1-to-0 decade](https://en.wikipedia.org/wiki/Decade#1-to-0_decade)) better aligned with the anno Domini (AD) calendar era, from a year ending in a 1 to the next year ending in a 0.\n* `single-period` / `climatology-period`: A single period of arbitrary length","schema":{"type":"string","enum":["hour","day","week","month","season","tropical-season","year"]}}],"returns":{"description":"A data cube with the same dimensions. The dimension properties (name, type, labels, reference system and resolution) remain unchanged.","schema":{"type":"object","subtype":"raster-cube"}}},{"id":"arctan","summary":"Inverse tangent","description":"Computes the arc tangent of `x`. The arc tangent is the inverse function of the tangent so that *`arctan(tan(x)) = x`*.\n\nWorks on radians only.\nNo-data values are passed through.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"A number.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed angle in radians in the range *(−π/2, π/2)*.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/InverseTangent.html","title":"Inverse tangent explained by Wolfram MathWorld"}]},{"id":"arcosh","summary":"Inverse hyperbolic cosine","description":"Computes the inverse hyperbolic cosine of `x`. It is the inverse function of the hyperbolic cosine so that *`arcosh(cosh(x)) = x`*.\n\nNo-data values are passed through. `NaN` is returned for values outside of the allowed range.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"A number in the range *[1, +∞)*.","schema":{"type":["number","null"]},"minimum":1}],"returns":{"description":"The computed hyperbolic angle in radians in the range *[0, +∞)*.","schema":{"type":["number","null"],"minimum":0}},"examples":[{"arguments":{"x":1},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/InverseHyperbolicCosine.html","title":"Inverse hyperbolic cosine explained by Wolfram MathWorld"}]},{"id":"arccos","summary":"Inverse cosine","description":"Computes the arc cosine of `x`. The arc cosine is the inverse function of the cosine so that *`arccos(cos(x)) = x`*.\n\nWorks on radians only.\nNo-data values are passed through. `NaN` is returned for values < -1 and > 1.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"A number in the range *[-1, 1]*.","schema":{"type":["number","null"],"minimum":-1,"maximum":1}}],"returns":{"description":"The computed angle in radians in the range *[0, π]*.","schema":{"type":["number","null"],"minimum":0}},"examples":[{"arguments":{"x":1},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/InverseCosine.html","title":"Inverse cosine explained by Wolfram MathWorld"}]},{"id":"arcsin","summary":"Inverse sine","description":"Computes the arc sine of `x`. The arc sine is the inverse function of the sine so that *`arcsin(sin(x)) = x`*.\n\nWorks on radians only.\nNo-data values are passed through. `NaN` is returned for values < -1 and > 1.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"A number in the range *[-1, 1]*.","schema":{"type":["number","null"],"minimum":-1,"maximum":1}}],"returns":{"description":"The computed angle in radians in the range *[-π/2, π/2]*.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/InverseSine.html","title":"Inverse sine explained by Wolfram MathWorld"}]},{"id":"array_concat","summary":"Merge two arrays","description":"Concatenates two arrays into a single array by appending the second array to the first array.\n\nArray labels are kept only if both given arrays are labeled. Otherwise, the labels get discarded from both arrays.","categories":["arrays"],"parameters":[{"name":"array1","description":"The first array.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"array2","description":"The second array.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}}],"returns":{"description":"The merged array.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},"examples":[{"description":"Concatenates two numerical arrays.","arguments":{"array1":[1.5,2.5],"array2":[5]},"returns":[1.5,2.5,5]},{"description":"Concatenates two arrays containing different data type, may not always be supported.","arguments":{"array1":["a","b"],"array2":[1,2]},"returns":["a","b",1,2]}]},{"id":"array_create","summary":"Create an array","description":"Creates a new array, which by default is empty.\n\nThe second parameter `repeat` allows to add the given array multiple times to the new array.\n\nIn most cases you can simply pass a (native) array to processes directly, but this process is especially useful to create a new array that is getting returned by a child process, for example in ``apply_dimension()``.","categories":["arrays"],"parameters":[{"name":"data","description":"A (native) array to fill the newly created array with. Defaults to an empty array.","optional":true,"default":[],"schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"repeat","description":"The number of times the (native) array specified in `data` is repeatedly added after each other to the new array being created. Defaults to `1`.","optional":true,"default":1,"schema":{"type":"integer","minimum":1}}],"returns":{"description":"The newly created array.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},"examples":[{"arguments":{},"returns":[]},{"arguments":{"data":["this","is","a","test"]},"returns":["this","is","a","test"]},{"arguments":{"data":[null],"repeat":3},"returns":[null,null,null]},{"arguments":{"data":[1,2,3],"repeat":2},"returns":[1,2,3,1,2,3]}]},{"id":"array_append","summary":"Append a value to an array","description":"Appends a new value to the end of the array, which may also include a new label for labeled arrays.","categories":["arrays"],"parameters":[{"name":"data","description":"An array.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"value","description":"Value to append to the array.","schema":{"description":"Any data type is allowed."}},{"name":"label","description":"Provides a label for the new value. If not given or `null`, the natural next array index as number is used as the label.\n\nThis parameter only applies if the given array is a labeled array. If a non-null values is provided and the array is not labeled, an `ArrayNotLabeled` exception is thrown.","optional":true,"default":null,"schema":[{"type":"number"},{"type":"string"},{"type":"null"}]}],"returns":{"description":"The new array with the value being appended.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},"exceptions":{"ArrayNotLabeled":{"message":"A label can't be provided as the given array is not labeled."}},"examples":[{"arguments":{"data":[1,2],"value":3},"returns":[1,2,3]}]},{"id":"array_element","summary":"Get an element from an array","description":"Gives the element with the specified index or label from the array.\n\nEither the parameter `index` or `label` must be specified, otherwise the `ArrayElementParameterMissing` exception is thrown. If both parameters are set the `ArrayElementParameterConflict` exception is thrown.","categories":["arrays","reducer"],"parameters":[{"name":"data","description":"An array.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"index","description":"The zero-based index of the element to retrieve.","schema":{"type":"integer","minimum":0},"optional":true},{"name":"label","description":"The label of the element to retrieve. Throws an `ArrayNotLabeled` exception, if the given array is not a labeled array and this parameter is set.","schema":[{"type":"number"},{"type":"string"}],"optional":true}],"returns":{"description":"The value of the requested element.","schema":{"description":"Any data type is allowed."}},"exceptions":{"ArrayElementNotAvailable":{"message":"The array has no element with the specified index or label."},"ArrayElementParameterMissing":{"message":"The process `array_element` requires either the `index` or `labels` parameter to be set."},"ArrayElementParameterConflict":{"message":"The process `array_element` only allows that either the `index` or the `labels` parameter is set."},"ArrayNotLabeled":{"message":"The array is not a labeled array, but the `label` parameter is set. Use the `index` instead."}},"examples":[{"arguments":{"data":[9,8,7,6,5],"index":2},"returns":7},{"arguments":{"data":["A","B","C"],"index":0},"returns":"A"},{"arguments":{"data":[],"index":0,"return_nodata":true},"returns":null}]},{"id":"array_create_labeled","summary":"Create a labeled array","description":"Creates a new labeled array by using the values from the `labels` array as labels and the values from the `data` array as the corresponding values.\n\nThe exception `ArrayLengthMismatch` is thrown, if the number of the values in the given arrays don't match exactly.\n\nThe primary use case here is to be able to transmit labeled arrays from the client to the server as JSON doesn't support this data type.","categories":["arrays"],"experimental":true,"parameters":[{"name":"data","description":"An array of values to be used.","schema":{"description":"Any data type is allowed."}},{"name":"labels","description":"An array of labels to be used.","schema":{"type":"array","uniqueItems":true,"items":{"type":["number","string"]}}}],"returns":{"description":"The newly created labeled array.","schema":{"type":"array","subtype":"labeled-array","items":{"description":"Any data type is allowed."}}},"exceptions":{"ArrayLengthMismatch":{"message":"The number of values in the parameters `data` and `labels` don't match."}}},{"id":"array_contains","summary":"Check whether the array contains a given value","description":"Checks whether the array specified for `data` contains the value specified in `value`. Returns `true` if there's a match, otherwise `false`.\n\n**Remarks:**\n\n* To get the index or the label of the value found, use ``array_find()``.\n* All definitions for the process ``eq()`` regarding the comparison of values apply here as well. A no-data return value from ``eq()`` is handled as `false` (no match).\n* Data types MUST be checked strictly. For example, a string with the content *1* is not equal to the number *1*.\n* An integer *1* is equal to a floating-point number *1.0* as `integer` is a sub-type of `number`. Still, this process may return unexpectedly `false` when comparing floating-point numbers due to floating-point inaccuracy in machine-based computation.\n* Temporal strings are treated as normal strings and MUST NOT be interpreted.\n\nSee the examples to check for no-data values.","categories":["arrays","comparison","reducer"],"parameters":[{"name":"data","description":"List to find the value in.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"value","description":"Value to find in `data`. If the value is no-data value (or `null`), this process returns always `false`.","schema":{"type":["number","boolean","string","null"]}}],"returns":{"description":"`true` if the list contains the value, false` otherwise.","schema":{"type":"boolean"}},"examples":[{"arguments":{"data":[1,2,3],"value":2},"returns":true},{"arguments":{"data":["A","B","C"],"value":"b"},"returns":false},{"arguments":{"data":[1,2,3],"value":"2"},"returns":false},{"arguments":{"data":[1,2,null],"value":null},"returns":false},{"arguments":{"data":[[1,2],[3,4]],"value":2},"returns":false}],"links":[{"rel":"example","type":"application/json","href":"https://raw.githubusercontent.com/Open-EO/openeo-community-examples/main/processes/array_contains_nodata.json","title":"Check for no-data values in arrays"}]},{"id":"arsinh","summary":"Inverse hyperbolic sine","description":"Computes the inverse hyperbolic sine of `x`. It is the inverse function of the hyperbolic sine so that *`arsinh(sinh(x)) = x`*.\n\nNo-data values are passed through.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"A number.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed hyperbolic angle in radians.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/InverseHyperbolicSine.html","title":"Inverse hyperbolic sine explained by Wolfram MathWorld"}]},{"id":"ceil","summary":"Round fractions up","description":"The least integer greater than or equal to the number `x`.\n\nNo-data values are passed through.","categories":["math > rounding"],"parameters":[{"name":"x","description":"A number to round up.","schema":{"type":["number","null"]}}],"returns":{"description":"The number rounded up.","schema":{"type":["integer","null"]}},"examples":[{"arguments":{"x":0},"returns":0},{"arguments":{"x":3.5},"returns":4},{"arguments":{"x":-0.4},"returns":0},{"arguments":{"x":-3.5},"returns":-3}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/CeilingFunction.html","title":"Ceiling explained by Wolfram MathWorld"}]},{"id":"artanh","summary":"Inverse hyperbolic tangent","description":"Computes the inverse hyperbolic tangent of `x`. It is the inverse function of the hyperbolic tangent so that *`artanh(tanh(x)) = x`*.\n\nNo-data values are passed through. `NaN` is returned for values outside of the allowed range. The computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it. Therefore, `x` = 1 results in +infinity and `x` = 0 results in -infinity. Otherwise, an exception is thrown.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"A number in the range *(-1, 1)*.","schema":{"type":["number","null"],"minimumExclusive":-1,"maximumExclusive":1}}],"returns":{"description":"The computed hyperbolic angle in radians.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/InverseHyperbolicTangent.html","title":"Inverse hyperbolic tangent explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/4610935","title":"IEEE Standard 754-2008 for Floating-Point Arithmetic"}]},{"id":"climatological_normal","summary":"Compute climatology normals","description":"Climatological normal period is a usually 30 year average of a weather variable. Climatological normals are used as an average or baseline to evaluate climate events and provide context for yearly, monthly, daily or seasonal variability.","categories":["cubes","climatology"],"experimental":true,"parameters":[{"name":"data","description":"A data cube with exactly one temporal dimension. The data cube must span at least the temporal interval specified in the parameter `climatology-period`.\n\nSeasonal periods may span two consecutive years, e.g. temporal winter that includes months December, January and February. If the required months before the actual climate period are available, the season is taken into account. If not available, the first season is not taken into account and the seasonal mean is based on one year less than the other seasonal normals. The incomplete season at the end of the last year is never taken into account.","schema":{"type":"object","subtype":"raster-cube"}},{"name":"period","description":"The time intervals to aggregate the average value for. The following pre-defined frequencies are supported:\n\n* `day`: Day of the year\n* `month`: Month of the year\n* `climatology-period`: The period specified in the `climatology-period`.\n* `season`: Three month periods of the calendar seasons (December - February, March - May, June - August, September - November).\n* `tropical-season`: Six month periods of the tropical seasons (November - April, May - October).","schema":{"type":"string","enum":["day","month","season","tropical-season","climatology-period"]}},{"name":"climatology_period","description":"The climatology period as a closed temporal interval. The first element of the array is the first year to be fully included in the temporal interval. The second element is the last year to be fully included in the temporal interval.\n\nThe default climatology period is from 1981 until 2010 (both inclusive) right now, but this might be updated over time to what is commonly used in climatology. If you don't want to keep your research to be reproducible, please explicitly specify a period.","schema":{"type":"array","uniqueItems":true,"minItems":2,"maxItems":2,"items":{"type":"integer","subtype":"year"}},"default":[1981,2010],"optional":true}],"returns":{"description":"A data cube with the same dimensions. The dimension properties (name, type, labels, reference system and resolution) remain unchanged, except for the resolution and dimension labels of the temporal dimension. The temporal dimension has the following dimension labels:\n\n* `day`: `001` - `365`\n* `month`: `01` - `12`\n* `climatology-period`: `climatology-period`\n* `season`: `djf` (December - February), `mam` (March - May), `jja` (June - August), `son` (September - November)\n* `tropical-season`: `ndjfma` (November - April), `mjjaso` (May - October)","schema":{"type":"object","subtype":"raster-cube"}},"links":[{"rel":"about","href":"https://en.wikipedia.org/wiki/Climatological_normal","title":"Background information on climatology normal by Wikipedia"}]},{"id":"between","summary":"Between comparison","description":"By default, this process checks whether `x` is greater than or equal to `min` and lower than or equal to `max`, which is the same as computing `and(gte(x, min), lte(x, max))`. Therefore, all definitions from ``and()``, ``gte()`` and ``lte()`` apply here as well.\n\nIf `exclude_max` is set to `true` the upper bound is excluded so that the process checks whether `x` is greater than or equal to `min` and lower than `max`. In this case, the process works the same as computing `and(gte(x, min), lt(x, max))`.\n\nLower and upper bounds are not allowed to be swapped. So `min` MUST be lower than or equal to `max` or otherwise the process always returns `false`.","categories":["comparison"],"parameters":[{"name":"x","description":"The value to check.\n\nThe no-data value `null` is passed through and therefore gets propagated.","schema":{"description":"Any data type is allowed."}},{"name":"min","description":"Lower boundary (inclusive) to check against.","schema":{"type":"number"}},{"name":"max","description":"Upper boundary (inclusive) to check against.","schema":{"type":"number"}},{"name":"exclude_max","description":"Exclude the upper boundary `max` if set to `true`. Defaults to `false`.","schema":{"type":"boolean"},"default":false,"optional":true}],"returns":{"description":"`true` if `x` is between the specified bounds, `null` if `x` is a no-data value, `false` otherwise.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":null,"min":0,"max":1},"returns":null},{"arguments":{"x":1,"min":0,"max":1},"returns":true},{"arguments":{"x":1,"min":0,"max":1,"exclude_max":true},"returns":false},{"description":"Swapped bounds (min is greater than max) MUST always return `false`.","arguments":{"x":0.5,"min":1,"max":0},"returns":false},{"arguments":{"x":-0.5,"min":-1,"max":0},"returns":true}]},{"id":"cos","summary":"Cosine","description":"Computes the cosine of `x`.\n\nWorks on radians only.\nNo-data values are passed through.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"An angle in radians.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed cosine in the range *[-1, 1]*.","schema":{"type":["number","null"],"minimum":-1,"maximum":1}},"examples":[{"arguments":{"x":0},"returns":1}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Cosine.html","title":"Cosine explained by Wolfram MathWorld"}]},{"id":"clip","summary":"Clip a value between a minimum and a maximum","description":"Clips a number between specified minimum and maximum values. A value larger than the maximum value is set to the maximum value, a value lower than the minimum value is set to the minimum value. If the maximum value is smaller than the minimum number, the process throws a `MinMaxSwapped` exception.\n\nNo-data values are passed through.","categories":["math"],"parameters":[{"name":"x","description":"A number.","schema":{"type":["number","null"]}},{"name":"min","description":"Minimum value. If the value is lower than this value, the process will return the value of this parameter.","schema":{"type":"number"}},{"name":"max","description":"Maximum value. If the value is greater than this value, the process will return the value of this parameter.","schema":{"type":"number"}}],"returns":{"description":"The value clipped to the specified range.","schema":{"type":["number","null"]}},"exceptions":{"MinMaxSwapped":{"message":"The minimum value should be lower than or equal to the maximum value."}},"examples":[{"arguments":{"x":-5,"min":-1,"max":1},"returns":-1},{"arguments":{"x":10.001,"min":1,"max":10},"returns":10},{"arguments":{"x":0.000001,"min":0,"max":0.02},"returns":0.000001},{"arguments":{"x":null,"min":0,"max":1},"returns":null}]},{"id":"constant","summary":"Define a constant value","description":"Defines a constant value that can be reused in multiple places of a process.","categories":["math > constants"],"parameters":[{"name":"x","description":"The value of the constant.","schema":{"description":"Any data type."}}],"returns":{"description":"The value of the constant.","schema":{"description":"Any data type."}}},{"id":"cosh","summary":"Hyperbolic cosine","description":"Computes the hyperbolic cosine of `x`.\n\nNo-data values are passed through.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"An hyperbolic angle in radians.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed hyperbolic cosine in the range *[1, +∞)*.","schema":{"type":["number","null"],"minimum":1}},"examples":[{"arguments":{"x":0},"returns":1}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/HyperbolicCosine.html","title":"Hyperbolic cosine explained by Wolfram MathWorld"}]},{"id":"count","summary":"Count the number of elements","description":"Gives the number of elements in an array that matches the specified condition.\n\n**Remarks:**\n\n* Counts the number of valid elements by default (`condition` is set to `null`). A valid element is every element for which ``is_valid()`` returns `true`.\n* To count all elements in a list set the `condition` parameter to boolean `true`.","categories":["arrays","math > statistics","reducer"],"parameters":[{"name":"data","description":"An array with elements of any data type.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"condition","description":"A condition consists of one or more processes, which in the end return a boolean value. It is evaluated against each element in the array. An element is counted only if the condition returns `true`. Defaults to count valid elements in a list (see ``is_valid()``). Setting this parameter to boolean `true` counts all elements in the list.","schema":[{"title":"All elements","description":"Boolean `true` counts all elements in the list.","type":"boolean","const":true},{"title":"Valid elements","description":"`null` counts valid elements in the list.","type":"null"}],"default":null,"optional":true}],"returns":{"description":"The counted number of elements.","schema":{"type":"number"}},"examples":[{"arguments":{"data":[]},"returns":0},{"arguments":{"data":[1,0,3,2]},"returns":4},{"arguments":{"data":["ABC",null]},"returns":1},{"arguments":{"data":[false,null],"condition":true},"returns":2}]},{"id":"create_data_cube","summary":"Create an empty data cube","description":"Creates a new data cube without dimensions. Dimensions can be added with ``add_dimension()``.","categories":["cubes"],"parameters":[],"returns":{"description":"An empty data cube with no dimensions.","schema":{"type":"object","subtype":"raster-cube"}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html","rel":"about","title":"Data Cubes explained in the openEO documentation"}]},{"id":"date_between","summary":"Between comparison for dates and times","description":"By default, this process checks whether `x` is later than or equal to `min` and before or equal to `max`.\n\nIf `exclude_max` is set to `true` the upper bound is excluded so that the process checks whether `x` is later than or equal to `min` and before `max`.\n\nLower and upper bounds are not allowed to be swapped. So `min` MUST be before or equal to `max` or otherwise the process always returns `false`.","categories":["comparison","date & time"],"experimental":true,"parameters":[{"name":"x","description":"The value to check.","schema":[{"type":"string","format":"date-time","subtype":"date-time","description":"Date and time with a time zone."},{"type":"string","format":"date","subtype":"date","description":"Date only, formatted as `YYYY-MM-DD`. The time zone is UTC. Missing time components are all 0."}]},{"name":"min","description":"Lower boundary (inclusive) to check against.","schema":[{"type":"string","format":"date-time","subtype":"date-time","description":"Date and time with a time zone."},{"type":"string","format":"date","subtype":"date","description":"Date only, formatted as `YYYY-MM-DD`. The time zone is UTC. Missing time components are all 0."}]},{"name":"max","description":"Upper boundary (inclusive) to check against.","schema":[{"type":"string","format":"date-time","subtype":"date-time","description":"Date and time with a time zone."},{"type":"string","format":"date","subtype":"date","description":"Date only, formatted as `YYYY-MM-DD`. The time zone is UTC. Missing time components are all 0."}]},{"name":"exclude_max","description":"Exclude the upper boundary `max` if set to `true`. Defaults to `false`.","schema":{"type":"boolean"},"default":false,"optional":true}],"returns":{"description":"`true` if `x` is between the specified bounds, otherwise `false`.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":"2020-01-01","min":"2021-01-01","max":"2022-01-01"},"returns":false}]},{"id":"date_difference","summary":"Computes the difference between two time instants","description":"Computes the difference between two instants in time and returns the difference between them in the unit given.\n\nThe process converts the given dates into numerical timestamps and returns the result of subtracting the other date from the base date. If a given date doesn't include the time, the process assumes that the time component is `00:00:00Z` (i.e. midnight, in UTC). The millisecond part of the times are optional and default to `0` if not given. The process doesn't take daylight saving time (DST) into account as only dates and times in UTC (with potential numerical time zone modifier) are supported.","categories":["comparison","date & time"],"experimental":true,"parameters":[{"name":"date1","description":"The base date, optionally with a time component.","schema":[{"type":"string","format":"date-time","subtype":"date-time"},{"type":"string","format":"date","subtype":"date"}]},{"name":"date2","description":"The other date, optionally with a time component.","schema":[{"type":"string","format":"date-time","subtype":"date-time"},{"type":"string","format":"date","subtype":"date"}]},{"name":"unit","description":"The unit for the returned value. The following units are available:\n\n- second - leap seconds are ignored in computations.\n- minute\n- hour\n- day\n- week\n- month\n- year","optional":true,"default":"second","schema":{"type":"string","enum":["second","minute","hour","day","week","month","year"]}}],"returns":{"description":"Returns the difference between date1 and date2 in the given unit (seconds by default), including a fractional part if required.\n\nFor comparison purposes this means:\n\n- If `date1` < `date2`, the returned value is positive.\n- If `date1` = `date2`, the returned value is 0.\n- If `date1` > `date2`, the returned value is negative.","schema":{"type":"number"}},"examples":[{"arguments":{"date1":"2020-01-01T00:00:00.0Z","date2":"2020-01-01T00:00:15.5Z"},"returns":15.5},{"arguments":{"date1":"2020-01-01T00:00:00Z","date2":"2020-01-01T01:00:00+01:00"},"returns":0},{"arguments":{"date1":"2020-01-02","date2":"2020-01-01"},"returns":-86400},{"arguments":{"date1":"2020-01-02","date2":"2020-01-01","unit":"day"},"returns":-1}]},{"id":"dimension_labels","summary":"Get the dimension labels","description":"Gives all labels for a dimension in the data cube. The labels have the same order as in the data cube.\n\nIf a dimension with the specified name does not exist, the process fails with a `DimensionNotAvailable` exception.","categories":["cubes"],"parameters":[{"name":"data","description":"The data cube.","schema":{"type":"object","subtype":"raster-cube"}},{"name":"dimension","description":"The name of the dimension to get the labels for.","schema":{"type":"string"}}],"returns":{"description":"The labels as an array.","schema":{"type":"array","items":{"type":["number","string"]}}},"exceptions":{"DimensionNotAvailable":{"message":"A dimension with the specified name does not exist."}}},{"id":"divide","summary":"Division of two numbers","description":"Divides argument `x` by the argument `y` (*`x / y`*) and returns the computed result.\n\nNo-data values are taken into account so that the no-data value is returned if any element is such a value.\n\nThe computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it. A division by zero results in:\n\n- +infinity for `x` > 0,\n- -infinity for `x` < 0,\n- `NaN` for `x` = 0,\n- or otherwise, throws a `DivisionByZero` exception if the other options are not supported by the processing environment.","categories":["math"],"parameters":[{"name":"x","description":"The dividend.","schema":{"type":["number","null"]}},{"name":"y","description":"The divisor.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed result.","schema":{"type":["number","null"]}},"exceptions":{"DivisionByZero":{"message":"Division by zero is not supported."}},"examples":[{"arguments":{"x":5,"y":2.5},"returns":2},{"arguments":{"x":-2,"y":4},"returns":-0.5},{"arguments":{"x":1,"y":null},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Division.html","title":"Division explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/8766229","title":"IEEE Standard 754-2019 for Floating-Point Arithmetic"}]},{"id":"drop_dimension","summary":"Remove a dimension","description":"Drops a dimension from the data cube.\n\nDropping a dimension only works on dimensions with a single dimension label left, otherwise the process fails with a `DimensionLabelCountMismatch` exception. Dimension values can be reduced to a single value with a filter such as ``filter_bands()`` or the ``reduce_dimension()`` process. If a dimension with the specified name does not exist, the process fails with a `DimensionNotAvailable` exception.","categories":["cubes"],"parameters":[{"name":"data","description":"The data cube to drop a dimension from.","schema":{"type":"object","subtype":"raster-cube"}},{"name":"name","description":"Name of the dimension to drop.","schema":{"type":"string"}}],"returns":{"description":"A data cube without the specified dimension. The number of dimensions decreases by one, but the dimension properties (name, type, labels, reference system and resolution) for all other dimensions remain unchanged.","schema":{"type":"object","subtype":"raster-cube"}},"exceptions":{"DimensionLabelCountMismatch":{"message":"The number of dimension labels exceeds one, which requires a reducer."},"DimensionNotAvailable":{"message":"A dimension with the specified name does not exist."}}},{"id":"date_shift","summary":"Manipulates dates and times by addition or subtraction","description":"Based on a given date (and optionally time), calculates a new date (and time if given) by adding or subtracting a given temporal period.\n\nSome specifics about dates and times need to be taken into account:\n\n* This process doesn't have any effect on the time zone.\n* It doesn't take daylight saving time (DST) into account as only dates and times in UTC (with potential numerical time zone modifier) are supported.\n* Leap years are implemented in a way that computations handle them gracefully (see parameter `unit` for details).\n* Leap seconds are mostly ignored in manipulations as they don't follow a regular pattern. Leap seconds can be passed to the process, but will never be returned.","categories":["date & time"],"experimental":true,"parameters":[{"name":"date","description":"The date (and optionally time) to manipulate.\n\nIf the given date doesn't include the time, the process assumes that the time component is `00:00:00Z` (i.e. midnight, in UTC). The millisecond part of the time is optional and defaults to `0` if not given.","schema":[{"type":"string","format":"date-time","subtype":"date-time"},{"type":"string","format":"date","subtype":"date"}]},{"name":"value","description":"The period of time in the unit given that is added (positive numbers) or subtracted (negative numbers). The value `0` doesn't have any effect.","schema":{"type":"integer"}},{"name":"unit","description":"The unit for the value given. The following pre-defined units are available:\n\n- second: Seconds - leap seconds are ignored in computations.\n- minute: Minutes\n- hour: Hours\n- day: Days - changes only the the day part of a date\n- week: Weeks (equivalent to 7 days)\n- month: Months\n- year: Years\n\nManipulations with the unit `year`, `month`, `week` or `day` do never change the time. If any of the manipulations result in an invalid date or time, the corresponding part is rounded down to the next valid date or time respectively. For example, adding a month to `2020-01-31` would result in `2020-02-29`.","schema":{"type":"string","enum":["second","minute","hour","day","week","month","year"]}}],"returns":{"description":"The manipulated date. If a time component was given in the parameter `date`, the time component is returned with the date.","schema":[{"type":"string","format":"date-time","subtype":"date-time"},{"type":"string","format":"date","subtype":"date"}]},"examples":[{"arguments":{"date":"2020-02-01T17:22:45Z","value":6,"unit":"month"},"returns":"2020-08-01T17:22:45Z"},{"arguments":{"date":"2021-03-31T00:00:00+02:00","value":-7,"unit":"day"},"returns":"2021-03-24T00:00:00+02:00"},{"description":"Adding a year to February 29th in a leap year will result in February 28th in the next (non-leap) year.","arguments":{"date":"2020-02-29T17:22:45Z","value":1,"unit":"year"},"returns":"2021-02-28T17:22:45Z"},{"description":"Adding a month to January 31th will result in February 29th in leap years.","arguments":{"date":"2020-01-31","value":1,"unit":"month"},"returns":"2020-02-29"},{"description":"The process skips over the leap second `2016-12-31T23:59:60Z`.","arguments":{"date":"2016-12-31T23:59:59Z","value":1,"unit":"second"},"returns":"2017-01-01T00:00:00Z"},{"arguments":{"date":"2018-01-01","value":25,"unit":"hour"},"returns":"2018-01-02"},{"arguments":{"date":"2018-01-01","value":-1,"unit":"hour"},"returns":"2017-12-31"}]},{"id":"e","summary":"Euler's number (e)","description":"The real number *e* is a mathematical constant that is the base of the natural logarithm such that *`ln(e) = 1`*. The numerical value is approximately *2.71828*.","categories":["math > constants","math > exponential & logarithmic"],"parameters":[],"returns":{"description":"The numerical value of Euler's number.","schema":{"type":"number"}},"links":[{"rel":"about","href":"http://mathworld.wolfram.com/e.html","title":"Mathematical constant e explained by Wolfram MathWorld"}]},{"id":"eq","summary":"Equal to comparison","description":"Compares whether `x` is strictly equal to `y`.\n\n**Remarks:**\n\n* Data types MUST be checked strictly. For example, a string with the content *1* is not equal to the number *1*. Nevertheless, an integer *1* is equal to a floating-point number *1.0* as `integer` is a sub-type of `number`.\n* If any operand is `null`, the return value is `null`.\n* Temporal strings are normal strings. To compare temporal strings as dates/times, use ``date_difference()``.","categories":["texts","comparison"],"parameters":[{"name":"x","description":"First operand.","schema":{"type":["number","boolean","string","null"]}},{"name":"y","description":"Second operand.","schema":{"type":["number","boolean","string","null"]}},{"name":"delta","description":"Only applicable for comparing two numbers. If this optional parameter is set to a positive non-zero number the equality of two numbers is checked against a delta value. This is especially useful to circumvent problems with floating-point inaccuracy in machine-based computation.\n\nThis option is basically an alias for the following computation: `lte(abs(minus([x, y]), delta)`","schema":{"type":["number","null"],"minimumExclusive":0},"default":null,"optional":true},{"name":"case_sensitive","description":"Only applicable for comparing two strings. Case sensitive comparison can be disabled by setting this parameter to `false`.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"`true` if `x` is equal to `y`, `null` if any operand is `null`, otherwise `false`.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":1,"y":null},"returns":null},{"arguments":{"x":null,"y":null},"returns":null},{"arguments":{"x":1,"y":1},"returns":true},{"arguments":{"x":1,"y":"1"},"returns":false},{"arguments":{"x":0,"y":false},"returns":false},{"arguments":{"x":1.02,"y":1,"delta":0.01},"returns":false},{"arguments":{"x":-1,"y":-1.001,"delta":0.01},"returns":true},{"arguments":{"x":115,"y":110,"delta":10},"returns":true},{"arguments":{"x":"Test","y":"test"},"returns":false},{"arguments":{"x":"Test","y":"test","case_sensitive":false},"returns":true},{"arguments":{"x":"Ä","y":"ä","case_sensitive":false},"returns":true},{"arguments":{"x":"2018-01-01T00:00:00Z","y":"2018-01-01T00:00:00+00:00"},"returns":false},{"arguments":{"x":null,"y":null},"returns":null}]},{"id":"exp","summary":"Exponentiation to the base e","description":"Exponential function to the base *e* raised to the power of `p`.\n\nNo-data values are passed through.","categories":["math > exponential & logarithmic"],"parameters":[{"name":"p","description":"The numerical exponent.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed value for *e* raised to the power of `p`. Value is in the range of *(0, +8)*","schema":{"type":["number","null"],"minimumExclusive":0}},"examples":[{"arguments":{"p":0},"returns":1},{"arguments":{"p":null},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/ExponentialFunction.html","title":"Exponential function explained by Wolfram MathWorld"}]},{"id":"first","summary":"First element","description":"Gives the first element of an array.\n\nAn array with solely no-data values returns the no-data value (or `null`).","categories":["arrays","reducer"],"parameters":[{"name":"data","description":"An array with elements of any data type.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"ignore_nodata","description":"Indicates whether no-data values are ignored or not. Ignores them by default. If set to `false`, the first value of the array is returned regardless of whether it is a no-data value or not. For the default value `true`, the first non-no-data value is returned.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"The first element of the input array.","schema":{"description":"Any data type is allowed."}},"examples":[{"arguments":{"data":[1,0,3,2]},"returns":1},{"arguments":{"data":[null,"A","B"]},"returns":"A"},{"arguments":{"data":[null,2,3],"ignore_nodata":false},"returns":null}]},{"id":"filter_spatial","summary":"Spatial filter raster data cubes using geometries","description":"Limits the raster data cube over the spatial dimensions to the specified geometries.\n\n- For **polygons**, the filter retains a pixel in the data cube if the point at the pixel center intersects with at least one of the polygons (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\nMore specifically, pixels outside of the bounding box of the given geometries will not be available after filtering. All pixels inside the bounding box that are not retained will be set to no-data values.\n\n Alternatively, use ``filter_bbox()`` to filter with a bounding box or ``filter_vector()`` to filter a vector data cube based on geometries. Use ``mask_polygon()`` to mask without changing the spatial extent of your data cube.","categories":["cubes","filter"],"parameters":[{"name":"data","description":"A raster data cube.","schema":{"type":"object","subtype":"raster-cube"}},{"name":"geometries","description":"One or more geometries used for filtering, given as GeoJSON or vector data cube. If multiple geometries are provided, the union of them is used. Empty geometries are ignored.\n\nLimits the data cube to the bounding box of the given geometries. No implicit masking gets applied. To mask the pixels of the data cube use ``mask_polygon()``.","schema":{"title":"GeoJSON","type":"object","subtype":"geojson"}}],"returns":{"description":"A raster data cube restricted to the specified geometries. The dimensions and dimension properties (name, type, labels, reference system and resolution) remain unchanged, except that the spatial dimensions have less (or the same) dimension labels.","schema":{"type":"object","subtype":"raster-cube"}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#filter","rel":"about","title":"Filters explained in the openEO documentation"},{"href":"http://www.opengeospatial.org/standards/sfa","rel":"about","title":"Simple Features standard by the OGC"}]},{"id":"gt","summary":"Greater than comparison","description":"Compares whether `x` is strictly greater than `y`.\n\n**Remarks:**\n\n* If any operand is `null`, the return value is `null`.\n* If any operand is not a `number`, the process returns `false`.\n* Temporal strings are normal strings. To compare temporal strings as dates/times, use ``date_difference()``.","categories":["comparison"],"parameters":[{"name":"x","description":"First operand.","schema":{"type":["number","boolean","string","null"]}},{"name":"y","description":"Second operand.","schema":{"type":["number","boolean","string","null"]}}],"returns":{"description":"`true` if `x` is strictly greater than `y` or `null` if any operand is `null`, otherwise `false`.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":1,"y":null},"returns":null},{"arguments":{"x":0,"y":0},"returns":false},{"arguments":{"x":2,"y":1},"returns":true},{"arguments":{"x":-0.5,"y":-0.6},"returns":true},{"arguments":{"x":"2018-01-02T00:00:00Z","y":"2018-01-01T00:00:00Z"},"returns":false},{"arguments":{"x":true,"y":0},"returns":false},{"arguments":{"x":true,"y":false},"returns":false},{"arguments":{"x":null,"y":null},"returns":null}]},{"id":"floor","summary":"Round fractions down","description":"The greatest integer less than or equal to the number `x`.\n\nThis process is *not* an alias for the ``int()`` process as defined by some mathematicians, see the examples for negative numbers in both processes for differences.\n\nNo-data values are passed through.","categories":["math > rounding"],"parameters":[{"name":"x","description":"A number to round down.","schema":{"type":["number","null"]}}],"returns":{"description":"The number rounded down.","schema":{"type":["integer","null"]}},"examples":[{"arguments":{"x":0},"returns":0},{"arguments":{"x":3.5},"returns":3},{"arguments":{"x":-0.4},"returns":-1},{"arguments":{"x":-3.5},"returns":-4}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/FloorFunction.html","title":"Floor explained by Wolfram MathWorld"}]},{"id":"gte","summary":"Greater than or equal to comparison","description":"Compares whether `x` is greater than or equal to `y`.\n\n**Remarks:**\n\n* If any operand is `null`, the return value is `null`.\n* If the operands are not equal (see process ``eq()``) and any of them is not a `number`, the process returns `false`.\n* Temporal strings are normal strings. To compare temporal strings as dates/times, use ``date_difference()``.","categories":["comparison"],"parameters":[{"name":"x","description":"First operand.","schema":{"type":["number","boolean","string","null"]}},{"name":"y","description":"Second operand.","schema":{"type":["number","boolean","string","null"]}}],"returns":{"description":"`true` if `x` is greater than or equal to `y`, `null` if any operand is `null`, otherwise `false`.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":1,"y":null},"returns":null},{"arguments":{"x":0,"y":0},"returns":true},{"arguments":{"x":1,"y":2},"returns":false},{"arguments":{"x":-0.5,"y":-0.6},"returns":true},{"arguments":{"x":"2018-01-01T00:00:00Z","y":"2018-01-01T00:00:00+00:00"},"returns":false},{"arguments":{"x":true,"y":false},"returns":false},{"arguments":{"x":null,"y":null},"returns":null}]},{"id":"if","summary":"If-Then-Else conditional","description":"If the value passed is `true`, returns the value of the `accept` parameter, otherwise returns the value of the `reject` parameter.\n\nThis is basically an if-then-else construct as in other programming languages.","categories":["logic","comparison","masks"],"parameters":[{"name":"value","description":"A boolean value.","schema":{"type":["boolean","null"]}},{"name":"accept","description":"A value that is returned if the boolean value is `true`.","schema":{"description":"Any data type is allowed."}},{"name":"reject","description":"A value that is returned if the boolean value is **not** `true`. Defaults to the no-data value (or `null`).","schema":{"description":"Any data type is allowed."},"default":null,"optional":true}],"returns":{"description":"Either the `accept` or `reject` argument depending on the given boolean value.","schema":{"description":"Any data type is allowed."}},"examples":[{"arguments":{"value":true,"accept":"A","reject":"B"},"returns":"A"},{"arguments":{"value":null,"accept":"A","reject":"B"},"returns":"B"},{"arguments":{"value":false,"accept":[1,2,3],"reject":[4,5,6]},"returns":[4,5,6]},{"arguments":{"value":true,"accept":123},"returns":123},{"arguments":{"value":false,"accept":1},"returns":null}]},{"id":"inspect","summary":"Add information to the logs","description":"This process can be used to add runtime information to the logs, e.g. for debugging purposes. This process should be used with caution and it is recommended to remove the process in production workflows. For example, logging each value or array individually in a process such as ``apply()`` or ``reduce_dimension()`` could lead to a (too) large number of log entries. Several data structures (e.g. data cubes) are too large to log and will only return summaries of their contents.\n\nThe data provided in the parameter `data` is returned without changes.","categories":["development"],"parameters":[{"name":"data","description":"Data to log.","schema":{"description":"Any data type is allowed."}},{"name":"message","description":"A message to send in addition to the data.","schema":{"type":"string"},"default":"","optional":true},{"name":"code","description":"A label to help identify one or more log entries originating from this process in the list of all log entries. It can help to group or filter log entries and is usually not unique.","schema":{"type":"string"},"default":"User","optional":true},{"name":"level","description":"The severity level of this message, defaults to `info`.","schema":{"type":"string","enum":["error","warning","info","debug"]},"default":"info","optional":true}],"returns":{"description":"The data as passed to the `data` parameter without any modification.","schema":{"description":"Any data type is allowed."}}},{"id":"last","summary":"Last element","description":"Gives the last element of an array.\n\nAn array with solely no-data values returns the no-data value (or `null`).","categories":["arrays","reducer"],"parameters":[{"name":"data","description":"An array with elements of any data type.","schema":{"type":"array","items":{"description":"Any data type is allowed."}}},{"name":"ignore_nodata","description":"Indicates whether no-data values are ignored or not. Ignores them by default. If set to `false`, the last value of the array is returned regardless of whether it is a no-data value or not. For the default value `true`, the last non-no-data value is returned.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"The last element of the input array.","schema":{"description":"Any data type is allowed."}},"examples":[{"arguments":{"data":[1,0,3,2]},"returns":2},{"arguments":{"data":["A","B",null]},"returns":"B"},{"arguments":{"data":[0,1,null],"ignore_nodata":false},"returns":null}]},{"id":"filter_temporal","summary":"Temporal filter based on temporal intervals","description":"Limits the data cube to the specified interval of dates and/or times.\n\nMore precisely, the filter checks whether each of the temporal dimension labels is greater than or equal to the lower boundary (start date/time) and less than the value of the upper boundary (end date/time). This corresponds to a left-closed interval, which contains the lower boundary but not the upper boundary.","categories":["cubes","filter"],"parameters":[{"name":"data","description":"A data cube.","schema":{"type":"object","subtype":"raster-cube"}},{"name":"extent","description":"Left-closed temporal interval, i.e. an array with exactly two elements:\n\n1. The first element is the start of the temporal interval. The specified time instant is **included** in the interval.\n2. The second element is the end of the temporal interval. The specified time instant is **excluded** from the interval.\n\nThe second element must always be greater/later than the first element. Otherwise, a `TemporalExtentEmpty` exception is thrown.\n\nAlso supports unbounded intervals by setting one of the boundaries to `null`, but never both.","schema":{"type":"array","subtype":"temporal-interval","minItems":2,"maxItems":2,"items":{"anyOf":[{"type":"string","format":"date-time","subtype":"date-time","description":"Date and time with a time zone."},{"type":"string","format":"date","subtype":"date","description":"Date only, formatted as `YYYY-MM-DD`. The time zone is UTC. Missing time components are all 0."},{"type":"null"}]},"examples":[["2015-01-01T00:00:00Z","2016-01-01T00:00:00Z"],["2015-01-01","2016-01-01"]]}}],"returns":{"description":"A data cube restricted to the specified temporal extent. The dimensions and dimension properties (name, type, labels, reference system and resolution) remain unchanged, except that the temporal dimensions (determined by `dimensions` parameter) may have less dimension labels.","schema":{"type":"object","subtype":"raster-cube"}},"exceptions":{"TemporalExtentEmpty":{"message":"The temporal extent is empty. The second instant in time must always be greater/later than the first instant in time."}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#filter","rel":"about","title":"Filters explained in the openEO documentation"},{"href":"https://www.rfc-editor.org/rfc/rfc3339.html","rel":"about","title":"RFC3339: Details about formatting temporal strings"}]},{"id":"int","summary":"Integer part of a number","description":"The integer part of the real number `x`.\n\nThis process is *not* an alias for the ``floor()`` process as defined by some mathematicians, see the examples for negative numbers in both processes for differences.\n\nNo-data values are passed through.","categories":["math","math > rounding"],"parameters":[{"name":"x","description":"A number.","schema":{"type":["number","null"]}}],"returns":{"description":"Integer part of the number.","schema":{"type":["integer","null"]}},"examples":[{"arguments":{"x":0},"returns":0},{"arguments":{"x":3.5},"returns":3},{"arguments":{"x":-0.4},"returns":0},{"arguments":{"x":-3.5},"returns":-3}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/IntegerPart.html","title":"Integer Part explained by Wolfram MathWorld"}]},{"id":"ln","summary":"Natural logarithm","description":"The natural logarithm is the logarithm to the base *e* of the number `x`, which equals to using the *log* process with the base set to *e*. The natural logarithm is the inverse function of taking *e* to the power x.\n\nNo-data values are passed through.\n\nThe computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it. Therefore, *`ln(0)`* results in -infinity if the processing environment supports it or otherwise an exception is thrown. `NaN` is returned for values outside of the allowed range.","categories":["math > exponential & logarithmic"],"parameters":[{"name":"x","description":"A number to compute the natural logarithm for in the range *[0, +∞)*.","schema":{"type":["number","null"],"minimum":0}}],"returns":{"description":"The computed natural logarithm.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":1},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/NaturalLogarithm.html","title":"Natural logarithm explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/8766229","title":"IEEE Standard 754-2019 for Floating-Point Arithmetic"}]},{"id":"load_collection","summary":"Load a collection","description":"Loads a collection from the current back-end by its id and returns it as a processable data cube. The data that is added to the data cube can be restricted with the parameters `spatial_extent`, `temporal_extent`, `bands` and `properties`. If no data is available for the given extents, a `NoDataAvailable` exception is thrown.\n\n**Remarks:**\n\n* The bands (and all dimensions that specify nominal dimension labels) are expected to be ordered as specified in the metadata if the `bands` parameter is set to `null`.\n* If no additional parameter is specified this would imply that the whole data set is expected to be loaded. Due to the large size of many data sets, this is not recommended and may be optimized by back-ends to only load the data that is actually required after evaluating subsequent processes such as filters. This means that the values in the data cube should be processed only after the data has been limited to the required extent and as a consequence also to a manageable size.","categories":["cubes","import"],"parameters":[{"name":"id","description":"The collection id.","schema":{"type":"string","subtype":"collection-id","pattern":"^[\\w\\-\\.~/]+$"}},{"name":"spatial_extent","description":"Limits the data to load from the collection to the specified bounding box or polygons.\n\n* For raster data, the process loads the pixel into the data cube if the point at the pixel center intersects with the bounding box or any of the polygons (as defined in the Simple Features standard by the OGC).\n* For vector data, the process loads the geometry into the data cube if the geometry is fully *within* the bounding box or any of the polygons (as defined in the Simple Features standard by the OGC). Empty geometries may only be in the data cube if no spatial extent has been provided.\n\nThe GeoJSON can be one of the following feature types:\n\n* A `Polygon` or `MultiPolygon` geometry,\n* a `Feature` with a `Polygon` or `MultiPolygon` geometry, or\n* a `FeatureCollection` containing at least one `Feature` with `Polygon` or `MultiPolygon` geometries.\n* Empty geometries are ignored.\n\nSet this parameter to `null` to set no limit for the spatial extent. Be careful with this when loading large datasets! It is recommended to use this parameter instead of using ``filter_bbox()`` or ``filter_spatial()`` directly after loading unbounded data.","schema":[{"title":"Bounding Box","type":"object","subtype":"bounding-box","required":["west","south","east","north"],"properties":{"west":{"description":"West (lower left corner, coordinate axis 1).","type":"number"},"south":{"description":"South (lower left corner, coordinate axis 2).","type":"number"},"east":{"description":"East (upper right corner, coordinate axis 1).","type":"number"},"north":{"description":"North (upper right corner, coordinate axis 2).","type":"number"},"crs":{"description":"Coordinate reference system of the extent, specified as as [EPSG code](http://www.epsg-registry.org/). Defaults to `4326` (EPSG code 4326) unless the client explicitly requests a different coordinate reference system. If the bounding box is not provided in the coordinate reference system (CRS) of the data cube, the bounding box is reprojected to the CRS of the spatial data cube dimensions.","title":"EPSG Code","type":"integer","subtype":"epsg-code","minimum":1000,"default":4326}}},{"title":"GeoJSON","type":"object","subtype":"geojson"},{"title":"No filter","description":"Don't filter spatially. All data is included in the data cube.","type":"null"}]},{"name":"temporal_extent","description":"Limits the data to load from the collection to the specified left-closed temporal interval. Applies to all temporal dimensions. The interval has to be specified as an array with exactly two elements:\n\n1. The first element is the start of the temporal interval. The specified time instant is **included** in the interval.\n2. The second element is the end of the temporal interval. The specified time instant is **excluded** from the interval.\n\nThe second element must always be greater/later than the first element. Otherwise, a `TemporalExtentEmpty` exception is thrown.\n\nAlso supports unbounded intervals by setting one of the boundaries to `null`, but never both.\n\nSet this parameter to `null` to set no limit for the temporal extent. Be careful with this when loading large datasets! It is recommended to use this parameter instead of using ``filter_temporal()`` directly after loading unbounded data.","schema":[{"type":"array","subtype":"temporal-interval","uniqueItems":true,"minItems":2,"maxItems":2,"items":{"anyOf":[{"type":"string","format":"date-time","subtype":"date-time","description":"Date and time with a time zone."},{"type":"string","format":"date","subtype":"date","description":"Date only, formatted as `YYYY-MM-DD`. The time zone is UTC. Missing time components are all 0."},{"type":"null"}]},"examples":[["2015-01-01T00:00:00Z","2016-01-01T00:00:00Z"],["2015-01-01","2016-01-01"]]},{"title":"No filter","description":"Don't filter temporally. All data is included in the data cube.","type":"null"}]},{"name":"bands","description":"Only adds the specified bands into the data cube so that bands that don't match the list of band names are not available. Applies to all dimensions of type `bands`.\n\nEither the unique band name (metadata field `name` in bands) or one of the common band names (metadata field `common_name` in bands) can be specified. If the unique band name and the common name conflict, the unique band name has a higher priority.\n\nThe order of the specified array defines the order of the bands in the data cube. If multiple bands match a common name, all matched bands are included in the original order.\n\nIt is recommended to use this parameter instead of using ``filter_bands()`` directly after loading unbounded data.","schema":[{"type":"array","minItems":1,"items":{"type":"string","subtype":"band-name"}},{"title":"No filter","description":"Don't filter bands. All bands are included in the data cube.","type":"null"}],"default":null,"optional":true}],"returns":{"description":"A data cube for further processing. The dimensions and dimension properties (name, type, labels, reference system and resolution) correspond to the collection's metadata, but the dimension labels are restricted as specified in the parameters.","schema":{"type":"object","subtype":"raster-cube"}},"exceptions":{"NoDataAvailable":{"message":"There is no data available for the given extents."},"TemporalExtentEmpty":{"message":"The temporal extent is empty. The second instant in time must always be greater/later than the first instant in time."}},"examples":[{"description":"Loading `Sentinel-2B` data from a `Sentinel-2` collection for 2018, but only with cloud cover between 0 and 50%.","arguments":{"id":"COPERNICUS/S2","spatial_extent":{"west":16.1,"east":16.6,"north":48.6,"south":47.2},"temporal_extent":["2018-01-01","2019-01-01"]}}],"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html","rel":"about","title":"Data Cubes explained in the openEO documentation"},{"rel":"about","href":"https://proj.org/usage/projections.html","title":"PROJ parameters for cartographic projections"},{"rel":"about","href":"http://www.epsg-registry.org","title":"Official EPSG code registry"},{"rel":"about","href":"http://www.epsg.io","title":"Unofficial EPSG code database"},{"href":"http://www.opengeospatial.org/standards/sfa","rel":"about","title":"Simple Features standard by the OGC"},{"rel":"about","href":"https://github.com/radiantearth/stac-spec/tree/master/extensions/eo#common-band-names","title":"List of common band names as specified by the STAC specification"},{"href":"https://www.rfc-editor.org/rfc/rfc3339.html","rel":"about","title":"RFC3339: Details about formatting temporal strings"}]},{"id":"linear_scale_range","summary":"Linear transformation between two ranges","description":"Performs a linear transformation between the input and output range.\n\nThe given number in `x` is clipped to the bounds specified in `inputMin` and `inputMax` so that the underlying formula *`((x - inputMin) / (inputMax - inputMin)) * (outputMax - outputMin) + outputMin`* never returns a value outside of the range defined by `outputMin` and `outputMax`.\n\nPotential use case include\n\n* scaling values to the 8-bit range (0 - 255) often used for numeric representation of values in one of the channels of the [RGB colour model](https://en.wikipedia.org/wiki/RGB_color_model#Numeric_representations) or\n* calculating percentages (0 - 100).\n\nNo-data values are passed through.","categories":["math"],"parameters":[{"name":"x","description":"A number to transform. The number gets clipped to the bounds specified in `inputMin` and `inputMax`.","schema":{"type":["number","null"]}},{"name":"inputMin","description":"Minimum value the input can obtain.","schema":{"type":"number"}},{"name":"inputMax","description":"Maximum value the input can obtain.","schema":{"type":"number"}},{"name":"outputMin","description":"Minimum value of the desired output range.","schema":{"type":"number"},"default":0,"optional":true},{"name":"outputMax","description":"Maximum value of the desired output range.","schema":{"type":"number"},"default":1,"optional":true}],"returns":{"description":"The transformed number.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0.3,"inputMin":-1,"inputMax":1,"outputMin":0,"outputMax":255},"returns":165.75},{"arguments":{"x":25.5,"inputMin":0,"inputMax":255},"returns":0.1},{"arguments":{"x":null,"inputMin":0,"inputMax":100},"returns":null},{"description":"Shows that the input data is clipped.","arguments":{"x":1.12,"inputMin":0,"inputMax":1,"outputMin":0,"outputMax":255},"returns":255}]},{"id":"log","summary":"Logarithm to a base","description":"Logarithm to the base `base` of the number `x` is defined to be the inverse function of taking b to the power of x.\n\nIf any argument is a no-data value, the result will be the no-data value (or `null`).\n\nThe computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it. Therefore, having `x` set to `0` with any base results in -infinity if the processing environment supports it or otherwise an exception is thrown. `NaN` is returned for values outside of the allowed range.","categories":["math > exponential & logarithmic"],"parameters":[{"name":"x","description":"A number to compute the logarithm for in the range *[0, +∞)*.","schema":{"type":["number","null"],"minimum":0}},{"name":"base","description":"The numerical base.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed logarithm.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":10,"base":10},"returns":1},{"arguments":{"x":2,"base":2},"returns":1},{"arguments":{"x":4,"base":2},"returns":2},{"arguments":{"x":1,"base":16},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Logarithm.html","title":"Logarithm explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/8766229","title":"IEEE Standard 754-2019 for Floating-Point Arithmetic"}]},{"id":"lt","summary":"Less than comparison","description":"Compares whether `x` is strictly less than `y`.\n\n**Remarks:**\n\n* If any operand is `null`, the return value is `null`.\n* If any operand is not a `number`, the process returns `false`.\n* Temporal strings are normal strings. To compare temporal strings as dates/times, use ``date_difference()``.","categories":["comparison"],"parameters":[{"name":"x","description":"First operand.","schema":{"type":["number","boolean","string","null"]}},{"name":"y","description":"Second operand.","schema":{"type":["number","boolean","string","null"]}}],"returns":{"description":"`true` if `x` is strictly less than `y`, `null` if any operand is `null`, otherwise `false`.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":1,"y":null},"returns":null},{"arguments":{"x":0,"y":0},"returns":false},{"arguments":{"x":1,"y":2},"returns":true},{"arguments":{"x":-0.5,"y":-0.6},"returns":false},{"arguments":{"x":"2018-01-01T00:00:00Z","y":"2018-01-02T00:00:00Z"},"returns":false},{"arguments":{"x":0,"y":true},"returns":false},{"arguments":{"x":false,"y":true},"returns":false},{"arguments":{"x":null,"y":null},"returns":null}]},{"id":"lte","summary":"Less than or equal to comparison","description":"Compares whether `x` is less than or equal to `y`.\n\n**Remarks:**\n\n* If any operand is `null`, the return value is `null`.\n* If the operands are not equal (see process ``eq()``) and any of them is not a `number`, the process returns `false`.\n* Temporal strings are normal strings. To compare temporal strings as dates/times, use ``date_difference()``.","categories":["comparison"],"parameters":[{"name":"x","description":"First operand.","schema":{"type":["number","boolean","string","null"]}},{"name":"y","description":"Second operand.","schema":{"type":["number","boolean","string","null"]}}],"returns":{"description":"`true` if `x` is less than or equal to `y`, `null` if any operand is `null`, otherwise `false`.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":1,"y":null},"returns":null},{"arguments":{"x":0,"y":0},"returns":true},{"arguments":{"x":1,"y":2},"returns":true},{"arguments":{"x":-0.5,"y":-0.6},"returns":false},{"arguments":{"x":"2018-01-01T00:00:00Z","y":"2018-01-01T00:00:00+00:00"},"returns":false},{"arguments":{"x":false,"y":true},"returns":false},{"arguments":{"x":null,"y":null},"returns":null}]},{"id":"mask","summary":"Apply a raster mask","description":"Applies a mask to a raster data cube. To apply a polygon as a mask, use ``mask_polygon()``.\n\nA mask is a raster data cube for which corresponding pixels among `data` and `mask` are compared and those pixels in `data` are replaced whose pixels in `mask` are non-zero (for numbers) or `true` (for boolean values). The pixel values are replaced with the value specified for `replacement`, which defaults to `null` (no data).\n\nThe data cubes have to be compatible except that the horizontal spatial dimensions (axes `x` and `y`) will be aligned implicitly by ``resample_cube_spatial()``. `data` is the target data cube for resampling and the default parameters of ``resample_cube_spatial()`` apply. All other dimensions in the mask must also be available in the raster data cube with the same name, type, reference system, resolution and labels. Dimensions can be missing in the mask with the result that the mask is applied to each label of the dimension in `data` that is missing in the data cube of the mask. The process fails if there's an incompatibility found between the raster data cube and the mask.","categories":["cubes","masks"],"experimental":true,"parameters":[{"name":"data","description":"A raster data cube.","schema":{"type":"object","subtype":"raster-cube"}},{"name":"mask","description":"A mask as a raster data cube. Every pixel in `data` must have a corresponding element in `mask`.","schema":{"type":"object","subtype":"raster-cube"}},{"name":"replacement","description":"The value used to replace masked values with.","schema":{"type":["number","boolean","string","null"]},"default":null,"optional":true}],"returns":{"description":"A masked raster data cube with the same dimensions. The dimension properties (name, type, labels, reference system and resolution) remain unchanged.","schema":{"type":"object","subtype":"raster-cube"}}},{"id":"mask_polygon","summary":"Apply a polygon mask","description":"Applies a (multi) polygon mask to a raster data cube. To apply a raster mask use ``mask()``.\n\nAll pixels for which the point at the pixel center **does not** intersect with any polygon (as defined in the Simple Features standard by the OGC) are replaced. This behavior can be inverted by setting the parameter `inside` to `true`. The pixel values are replaced with the value specified for `replacement`, which defaults to `null` (no data). No data values in `data` will be left untouched by the masking operation.","categories":["cubes","masks"],"parameters":[{"name":"data","description":"A raster data cube.","schema":{"type":"object","subtype":"raster-cube"}},{"name":"mask","description":"A GeoJSON object or a vector data cube containing at least one polygon. The provided vector data can be one of the following:\n\n* A `Polygon` or `MultiPolygon` geometry,\n* a `Feature` with a `Polygon` or `MultiPolygon` geometry, or\n* a `FeatureCollection` containing at least one `Feature` with `Polygon` or `MultiPolygon` geometries.\n* Empty geometries are ignored.","schema":{"title":"GeoJSON","type":"object","subtype":"geojson"}},{"name":"replacement","description":"The value used to replace masked values with.","schema":[{"type":"number"},{"type":"boolean"},{"type":"string"},{"type":"null"}],"default":null,"optional":true},{"name":"inside","description":"If set to `true` all pixels for which the point at the pixel center **does** intersect with any polygon are replaced.","schema":{"type":"boolean"},"default":false,"optional":true}],"returns":{"description":"A masked raster data cube with the same dimensions. The dimension properties (name, type, labels, reference system and resolution) remain unchanged.","schema":{"type":"object","subtype":"raster-cube"}},"links":[{"href":"http://www.opengeospatial.org/standards/sfa","rel":"about","title":"Simple Features standard by the OGC"}]},{"id":"max","summary":"Maximum value","description":"Computes the largest value of an array of numbers, which is equal to the first element of a sorted (i.e., ordered) version of the array.\n\nAn array with solely no-data values returns the no-data value (or `null`).","categories":["math","math > statistics","reducer"],"parameters":[{"name":"data","description":"An array of numbers.","schema":{"type":"array","items":{"type":["number","null"]}}}],"returns":{"description":"The maximum value.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"data":[1,0,3,2]},"returns":3},{"arguments":{"data":[5,2.5,null,-0.7]},"returns":5}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Maximum.html","title":"Maximum explained by Wolfram MathWorld"}]},{"id":"mean","summary":"Arithmetic mean (average)","description":"The arithmetic mean of an array of numbers is the quantity commonly called the average. It is defined as the sum of all elements divided by the number of elements.\n\nAn array with solely no-data values returns the no-data value (or `null`).","categories":["math > statistics","reducer"],"parameters":[{"name":"data","description":"An array of numbers.","schema":{"type":"array","items":{"type":["number","null"]}}}],"returns":{"description":"The computed arithmetic mean.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"data":[1,0,3,2]},"returns":1.5},{"arguments":{"data":[9,2.5,null,-2.5]},"returns":3}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/ArithmeticMean.html","title":"Arithmetic mean explained by Wolfram MathWorld"}]},{"id":"median","summary":"Statistical median","description":"The statistical median of an array of numbers is the value separating the higher half from the lower half of the data.\n\nAn array with solely no-data values returns the no-data value (or `null`).\n\n**Remarks:**\n\n* For symmetric arrays, the result is equal to the ``mean()``.\n* The median can also be calculated by computing the ``quantiles()`` with a probability of *0.5*.","categories":["math > statistics","reducer"],"parameters":[{"name":"data","description":"An array of numbers.","schema":{"type":"array","items":{"type":["number","null"]}}}],"returns":{"description":"The computed statistical median.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"data":[1,3,3,6,7,8,9]},"returns":6},{"arguments":{"data":[1,2,3,4,5,6,8,9]},"returns":4.5},{"arguments":{"data":[-1,-0.5,null,1]},"returns":-0.5}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/StatisticalMedian.html","title":"Statistical Median explained by Wolfram MathWorld"}]},{"id":"multiply","summary":"Multiplication of two numbers","description":"Multiplies the two numbers `x` and `y` (*`x * y`*) and returns the computed product.\n\nNo-data values are taken into account so that the no-data value is returned if any element is such a value.\n\nThe computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it.","categories":["math"],"parameters":[{"name":"x","description":"The multiplier.","schema":{"type":["number","null"]}},{"name":"y","description":"The multiplicand.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed product of the two numbers.","schema":{"type":["number","null"]}},"exceptions":{"MultiplicandMissing":{"message":"Multiplication requires at least two numbers."}},"examples":[{"arguments":{"x":5,"y":2.5},"returns":12.5},{"arguments":{"x":-2,"y":-4},"returns":8},{"arguments":{"x":1,"y":null},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Product.html","title":"Product explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/8766229","title":"IEEE Standard 754-2019 for Floating-Point Arithmetic"}]},{"id":"min","summary":"Minimum value","description":"Computes the smallest value of an array of numbers, which is equal to the last element of a sorted (i.e., ordered) version of the array.\n\nAn array with solely no-data values returns the no-data value (or `null`).","categories":["math","math > statistics","reducer"],"parameters":[{"name":"data","description":"An array of numbers.","schema":{"type":"array","items":{"type":["number","null"]}}}],"returns":{"description":"The minimum value.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"data":[1,0,3,2]},"returns":0},{"arguments":{"data":[5,2.5,null,-0.7]},"returns":-0.7},{"arguments":{"data":[]},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Minimum.html","title":"Minimum explained by Wolfram MathWorld"}]},{"id":"nan","summary":"Not a Number (NaN)","description":"`NaN` (not a number) is a symbolic floating-point representation which is neither a signed infinity nor a finite number.","categories":["math > constants"],"parameters":[],"returns":{"description":"Returns `NaN`.","schema":{"description":"JSON Schema can't represent `NaN` and thus a schema can't be specified."}},"links":[{"rel":"about","href":"https://ieeexplore.ieee.org/document/4610935","title":"IEEE Standard 754-2008 for Floating-Point Arithmetic"},{"rel":"about","href":"http://mathworld.wolfram.com/NaN.html","title":"NaN explained by Wolfram MathWorld"}]},{"id":"mod","summary":"Modulo","description":"Remainder after a division of `x` by `y` for both integers and floating-point numbers.\n\nThe result of a modulo operation has the sign of the divisor. The handling regarding the sign of the result [differs between programming languages](https://en.wikipedia.org/wiki/Modulo_operation#In_programming_languages) and needs careful consideration to avoid unexpected results.\n\nIf any argument is a no-data value, the result will be the no-data value (or `null`). If `y` is set to 0 this results in:\n\n- +infinity for `x` > 0,\n- -infinity for `x` < 0,\n- `NaN` for `x` = 0,\n- or otherwise, throws a `DivisionByZero` exception if the other options are not supported by the processing environment.","categories":["math"],"parameters":[{"name":"x","description":"A number to be used as the dividend.","schema":{"type":["number","null"]}},{"name":"y","description":"A number to be used as the divisor.","schema":{"type":["number","null"]}}],"returns":{"description":"The remainder after division.","schema":{"type":["number","null"]}},"exceptions":{"DivisionByZero":{"message":"Division by zero is not supported."}},"examples":[{"arguments":{"x":27,"y":5},"returns":2},{"arguments":{"x":-27,"y":5},"returns":3},{"arguments":{"x":3.14,"y":-2},"returns":-0.86},{"arguments":{"x":-27,"y":-5},"returns":-2},{"arguments":{"x":27,"y":null},"returns":null},{"arguments":{"x":null,"y":5},"returns":null}],"links":[{"rel":"about","href":"https://en.wikipedia.org/wiki/Modulo_operation","title":"Modulo explained by Wikipedia"}]},{"id":"normalized_difference","summary":"Normalized difference","description":"Computes the normalized difference for two bands. The normalized difference is computed as *`(x - y) / (x + y)`*.\n\nThis process could be used for a number of remote sensing indices such as:\n\n* [NDVI](https://eos.com/ndvi/): `x` = NIR band, `y` = red band\n* [NDWI](https://eos.com/ndwi/): `x` = NIR band, `y` = SWIR band\n* [NDSI](https://eos.com/ndsi/): `x` = green band, `y` = SWIR band\n\nSome back-ends may have native processes such as ``ndvi()`` available for convenience.","categories":["math > indices","vegetation indices"],"parameters":[{"name":"x","description":"The value for the first band.","schema":{"type":"number"}},{"name":"y","description":"The value for the second band.","schema":{"type":"number"}}],"returns":{"description":"The computed normalized difference.","schema":{"type":"number","minimum":-1,"maximum":1}},"links":[{"rel":"related","href":"https://eos.com/ndvi/","title":"NDVI explained by EOS"},{"rel":"related","href":"https://eos.com/ndwi/","title":"NDWI explained by EOS"},{"rel":"related","href":"https://eos.com/ndsi/","title":"NDSI explained by EOS"}]},{"id":"or","summary":"Logical OR","description":"Checks if **at least one** of the values is true. Evaluates parameter `x` before `y` and stops once the outcome is unambiguous. If a component is `null`, the result will be `null` if the outcome is ambiguous.\n\n**Truth table:**\n\n```\nx \\ y || null | false | true\n----- || ---- | ----- | ----\nnull  || null | null  | true\nfalse || null | false | true\ntrue  || true | true  | true\n```","categories":["logic"],"parameters":[{"name":"x","description":"A boolean value.","schema":{"type":["boolean","null"]}},{"name":"y","description":"A boolean value.","schema":{"type":["boolean","null"]}}],"returns":{"description":"Boolean result of the logical OR.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":true,"y":true},"returns":true},{"arguments":{"x":false,"y":false},"returns":false},{"arguments":{"x":true,"y":null},"returns":true},{"arguments":{"x":null,"y":true},"returns":true},{"arguments":{"x":false,"y":null},"returns":null}]},{"id":"neq","summary":"Not equal to comparison","description":"Compares whether `x` is **not** strictly equal to `y`.\n\n**Remarks:**\n\n* Data types MUST be checked strictly. For example, a string with the content *1* is not equal to the number *1*. Nevertheless, an integer *1* is equal to a floating-point number *1.0* as `integer` is a sub-type of `number`.\n* If any operand is `null`, the return value is `null`.\n* Strings are expected to be encoded in UTF-8 by default.\n* Temporal strings are normal strings. To compare temporal strings as dates/times, use ``date_difference()``.","categories":["texts","comparison"],"parameters":[{"name":"x","description":"First operand.","schema":{"type":["number","boolean","string","null"]}},{"name":"y","description":"Second operand.","schema":{"type":["number","boolean","string","null"]}},{"name":"delta","description":"Only applicable for comparing two numbers. If this optional parameter is set to a positive non-zero number the non-equality of two numbers is checked against a delta value. This is especially useful to circumvent problems with floating-point inaccuracy in machine-based computation.\n\nThis option is basically an alias for the following computation: `gt(abs(minus([x, y]), delta)`","schema":{"type":["number","null"],"minimumExclusive":0},"default":null,"optional":true},{"name":"case_sensitive","description":"Only applicable for comparing two strings. Case sensitive comparison can be disabled by setting this parameter to `false`.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"`true` if `x` is *not* equal to `y`, `null` if any operand is `null`, otherwise `false`.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":1,"y":null},"returns":null},{"arguments":{"x":1,"y":1},"returns":false},{"arguments":{"x":1,"y":"1"},"returns":true},{"arguments":{"x":0,"y":false},"returns":true},{"arguments":{"x":1.02,"y":1,"delta":0.01},"returns":true},{"arguments":{"x":-1,"y":-1.001,"delta":0.01},"returns":false},{"arguments":{"x":115,"y":110,"delta":10},"returns":false},{"arguments":{"x":"Test","y":"test"},"returns":true},{"arguments":{"x":"Test","y":"test","case_sensitive":false},"returns":false},{"arguments":{"x":"Ä","y":"ä","case_sensitive":false},"returns":false},{"arguments":{"x":"2018-01-01T00:00:00Z","y":"2018-01-01T00:00:00+00:00"},"returns":true},{"arguments":{"x":null,"y":null},"returns":null}]},{"id":"not","summary":"Inverting a boolean","description":"Inverts a single boolean so that `true` gets `false` and `false` gets `true`.\n\nThe no-data value `null` is passed through and therefore gets propagated.","categories":["logic"],"parameters":[{"name":"x","description":"Boolean value to invert.","schema":{"type":["boolean","null"]}}],"returns":{"description":"Inverted boolean value.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":null},"returns":null},{"arguments":{"x":false},"returns":true},{"arguments":{"x":true},"returns":false}]},{"id":"power","summary":"Exponentiation","description":"Computes the exponentiation for the base `base` raised to the power of `p`.\n\nIf any argument is a no-data value, the result will be the no-data value (or `null`).","categories":["math","math > exponential & logarithmic"],"parameters":[{"name":"base","description":"The numerical base.","schema":{"type":["number","null"]}},{"name":"p","description":"The numerical exponent.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed value for `base` raised to the power of `p`.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"base":0,"p":2},"returns":0},{"arguments":{"base":2.5,"p":0},"returns":1},{"arguments":{"base":3,"p":3},"returns":27},{"arguments":{"base":5,"p":-1},"returns":0.2},{"arguments":{"base":1,"p":0.5},"returns":1},{"arguments":{"base":1,"p":null},"returns":null},{"arguments":{"base":null,"p":2},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Power.html","title":"Power explained by Wolfram MathWorld"}]},{"id":"pi","summary":"Pi (π)","description":"The real number Pi (π) is a mathematical constant that is the ratio of the circumference of a circle to its diameter. The numerical value is approximately *3.14159*.","categories":["math > constants","math > trigonometric"],"parameters":[],"returns":{"description":"The numerical value of Pi.","schema":{"type":"number"}},"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Pi.html","title":"Mathematical constant Pi explained by Wolfram MathWorld"}]},{"id":"product","summary":"Compute the product by multiplying numbers","description":"Multiplies all elements in a sequential array of numbers and returns the computed product.\n\nThe computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it.\n\nAn array with solely no-data values returns the no-data value (or `null`).","categories":["math","reducer"],"parameters":[{"name":"data","description":"An array of numbers.","schema":{"type":"array","items":{"type":["number","null"]}}}],"returns":{"description":"The computed product of the sequence of numbers.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"data":[5,0]},"returns":0},{"arguments":{"data":[-2,4,2.5]},"returns":-20},{"arguments":{"data":[-1]},"returns":-1},{"arguments":{"data":[]},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Product.html","title":"Product explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/8766229","title":"IEEE Standard 754-2019 for Floating-Point Arithmetic"}]},{"id":"reduce_dimension","summary":"Reduce dimensions","description":"Applies a reducer to a data cube dimension by collapsing all the values along the specified dimension into an output value computed by the reducer.\n\nThe dimension is dropped. To avoid this, use ``apply_dimension()`` instead.","categories":["cubes","reducer"],"parameters":[{"name":"data","description":"A data cube.","schema":{"type":"object","subtype":"raster-cube"}},{"name":"reducer","description":"A reducer to apply on the specified dimension. A reducer is a single process such as ``mean()`` or a set of processes, which computes a single value for a list of values, see the category 'reducer' for such processes.","schema":{"type":"object","subtype":"process-graph","parameters":[{"name":"data","description":"A labeled array with elements of any type.","schema":{"type":"array","subtype":"labeled-array","items":{"description":"Any data type."}}},{"name":"context","description":"Additional data passed by the user.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"The value to be set in the new data cube.","schema":{"description":"Any data type."}}}},{"name":"dimension","description":"The name of the dimension over which to reduce. Fails with a `DimensionNotAvailable` exception if the specified dimension does not exist.","schema":{"type":"string"}},{"name":"context","description":"Additional data to be passed to the reducer.","schema":{"description":"Any data type."},"optional":true,"default":null}],"returns":{"description":"A data cube with the newly computed values. It is missing the given dimension, the number of dimensions decreases by one. The dimension properties (name, type, labels, reference system and resolution) for all other dimensions remain unchanged.","schema":{"type":"object","subtype":"raster-cube"}},"exceptions":{"DimensionNotAvailable":{"message":"A dimension with the specified name does not exist."}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#reduce","rel":"about","title":"Reducers explained in the openEO documentation"}]},{"id":"rename_dimension","summary":"Rename a dimension","description":"Renames a dimension in the data cube while preserving all other properties.","categories":["cubes"],"parameters":[{"name":"data","description":"The data cube.","schema":{"type":"object","subtype":"raster-cube"}},{"name":"source","description":"The current name of the dimension. Fails with a `DimensionNotAvailable` exception if the specified dimension does not exist.","schema":{"type":"string"}},{"name":"target","description":"A new Name for the dimension. Fails with a `DimensionExists` exception if a dimension with the specified name exists.","schema":{"type":"string"}}],"returns":{"description":"A data cube with the same dimensions, but the name of one of the dimensions changes. The old name can not be referred to any longer. The dimension properties (name, type, labels, reference system and resolution) remain unchanged.","schema":{"type":"object","subtype":"raster-cube"}},"exceptions":{"DimensionNotAvailable":{"message":"A dimension with the specified name does not exist."},"DimensionExists":{"message":"A dimension with the specified name already exists."}}},{"id":"resample_spatial","summary":"Resample and warp the spatial dimensions","description":"Resamples the spatial dimensions (x,y) of the data cube to a specified resolution and/or warps the data cube to the target projection. At least `resolution` or `projection` must be specified.\n\nRelated processes:\n\n* Use ``filter_bbox()`` to set the target spatial extent.\n* To spatially align two data cubes with each other (e.g. for merging), better use the process ``resample_cube_spatial()``.","categories":["cubes","reproject"],"experimental":true,"parameters":[{"name":"data","description":"A raster data cube.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]}},{"name":"resolution","description":"Resamples the data cube to the target resolution, which can be specified either as separate values for x and y or as a single value for both axes. Specified in the units of the target projection. Doesn't change the resolution by default (`0`).","schema":{"description":"A single number used as the resolution for both x and y.","type":"number","minimum":0},"default":0,"optional":true},{"name":"projection","description":"Warps the data cube to the target projection, specified as as [EPSG code](http://www.epsg-registry.org/) or [WKT2 CRS string](http://docs.opengeospatial.org/is/18-010r7/18-010r7.html). By default (`null`), the projection is not changed.","schema":[{"title":"EPSG Code","type":"integer","subtype":"epsg-code","minimum":1000,"examples":[3857]},{"title":"Don't change projection","type":"null"}],"default":null,"optional":true},{"name":"method","description":"Resampling method to use. The following options are available and are meant to align with [`gdalwarp`](https://gdal.org/programs/gdalwarp.html#cmdoption-gdalwarp-r):\n\n* `average`: average (mean) resampling, computes the weighted average of all valid pixels\n* `bilinear`: bilinear resampling\n* `cubic`: cubic resampling\n* `cubicspline`: cubic spline resampling\n* `lanczos`: Lanczos windowed sinc resampling\n* `max`: maximum resampling, selects the maximum value from all valid pixels\n* `med`: median resampling, selects the median value of all valid pixels\n* `min`: minimum resampling, selects the minimum value from all valid pixels\n* `mode`: mode resampling, selects the value which appears most often of all the sampled points\n* `near`: nearest neighbour resampling (default)\n* `q1`: first quartile resampling, selects the first quartile value of all valid pixels\n* `q3`: third quartile resampling, selects the third quartile value of all valid pixels\n* `rms` root mean square (quadratic mean) of all valid pixels\n* `sum`: compute the weighted sum of all valid pixels\n\nValid pixels are determined based on the function ``is_valid()``.","schema":{"type":"string","enum":["bilinear","bicubic","near"]},"default":"near","optional":true}],"returns":{"description":"A raster data cube with values warped onto the new projection. It has the same dimensions and the same dimension properties (name, type, labels, reference system and resolution) for all non-spatial or vertical spatial dimensions. For the horizontal spatial dimensions the name and type remain unchanged, but reference system, labels and resolution may change depending on the given parameters.","schema":{"type":"object","subtype":"datacube","dimensions":[{"type":"spatial","axis":["x","y"]}]}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#resample","rel":"about","title":"Resampling explained in the openEO documentation"},{"rel":"about","href":"https://proj.org/usage/projections.html","title":"PROJ parameters for cartographic projections"},{"rel":"about","href":"http://www.epsg-registry.org","title":"Official EPSG code registry"},{"rel":"about","href":"http://www.epsg.io","title":"Unofficial EPSG code database"},{"href":"https://gdal.org/programs/gdalwarp.html#cmdoption-gdalwarp-r","rel":"about","title":"gdalwarp resampling methods"}]},{"id":"round","summary":"Round to a specified precision","description":"Rounds a real number `x` to specified precision `p`.\n\nIf `x` is halfway between closest numbers of precision `p`, it is rounded to the closest even number of precision `p`.\nThis behavior follows [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) and is often called \"round to nearest (even)\" or \"banker's rounding\". It minimizes rounding errors that result from consistently rounding a midpoint value in a single direction.\n\nNo-data values are passed through.","categories":["math > rounding"],"parameters":[{"name":"x","description":"A number to round.","schema":{"type":["number","null"]}},{"name":"p","description":"A positive number specifies the number of digits after the decimal point to round to. A negative number means rounding to a power of ten, so for example *-2* rounds to the nearest hundred. Defaults to *0*.","schema":{"type":"integer"},"default":0,"optional":true}],"returns":{"description":"The rounded number.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0},"returns":0},{"arguments":{"x":3.56,"p":1},"returns":3.6},{"arguments":{"x":-0.4444444,"p":2},"returns":-0.44},{"arguments":{"x":-2.5},"returns":-2},{"arguments":{"x":-3.5},"returns":-4},{"arguments":{"x":0.25,"p":1},"returns":0.2},{"arguments":{"x":0.35,"p":1},"returns":0.4},{"arguments":{"x":1234.5,"p":-2},"returns":1200}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/AbsoluteValue.html","title":"Absolute value explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/8766229","title":"IEEE Standard 754-2019 for Floating-Point Arithmetic"}]},{"id":"sgn","summary":"Signum","description":"The signum (also known as *sign*) of `x` is defined as:\n\n* *1* if *x > 0*\n* *0* if *x = 0*\n* *-1* if *x < 0*\n\nNo-data values are passed through.","categories":["math"],"parameters":[{"name":"x","description":"A number.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed signum value of `x`.","schema":{"type":["number","null"],"enum":[-1,0,1,null]}},"examples":[{"arguments":{"x":-2},"returns":-1},{"arguments":{"x":3.5},"returns":1},{"arguments":{"x":0},"returns":0},{"arguments":{"x":null},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Sign.html","title":"Sign explained by Wolfram MathWorld"}]},{"id":"save_result","summary":"Save processed data","description":"Makes the processed data available in the given file format to the corresponding medium that is relevant for the context this processes is applied in:\n\n* For **batch jobs** the data is stored on the back-end. STAC-compatible metadata is usually made available with the processed data.\n* For **synchronous processing** the data is sent to the client as a direct response to the request.\n* **Secondary web services** are provided with the processed data so that it can make use of it (e.g., visualize it). Web service may require the data in a certain format. Please refer to the documentation of the individual service types for details.","categories":["cubes","export"],"parameters":[{"name":"data","description":"The data to deliver in the given file format.","schema":{}},{"name":"format","description":"The file format to use. It must be one of the values that the server reports as supported output file formats, which usually correspond to the short GDAL/OGR codes. This parameter is *case insensitive*.\n\n* If the data cube is empty and the file format can't store empty data cubes, a `DataCubeEmpty` exception is thrown.\n* If the file format is otherwise not suitable for storing the underlying data structure, a `FormatUnsuitable` exception is thrown.","schema":{"type":"string","subtype":"output-format"}},{"name":"options","description":"The file format parameters to be used to create the file(s). Must correspond to the parameters that the server reports as supported parameters for the chosen `format`. The parameter names and valid values usually correspond to the GDAL/OGR format options.","schema":{"type":"object","subtype":"output-format-options"},"default":{},"optional":true}],"returns":{"description":"Always returns `true` as in case of an error an exception is thrown which aborts the execution of the process.","schema":{"type":"boolean","const":true}},"exceptions":{"FormatUnsuitable":{"message":"Data can't be transformed into the requested output format."},"DataCubeEmpty":{"message":"The file format doesn't support storing empty data cubes."}},"links":[{"rel":"about","href":"https://gdal.org/drivers/raster/index.html","title":"GDAL Raster Formats"},{"rel":"about","href":"https://gdal.org/drivers/vector/index.html","title":"OGR Vector Formats"}]},{"id":"sd","summary":"Standard deviation","description":"Computes the sample standard deviation, which quantifies the amount of variation of an array of numbers. It is defined to be the square root of the corresponding variance (see ``variance()``).\n\nA low standard deviation indicates that the values tend to be close to the expected value, while a high standard deviation indicates that the values are spread out over a wider range.\n\nAn array with solely no-data values returns the no-data value (or `null`).","categories":["math > statistics","reducer"],"parameters":[{"name":"data","description":"An array of numbers.","schema":{"type":"array","items":{"type":["number","null"]}}}],"returns":{"description":"The computed sample standard deviation.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"data":[-1,1,3,null]},"returns":2}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/StandardDeviation.html","title":"Standard deviation explained by Wolfram MathWorld"}]},{"id":"sort","summary":"Sort data","description":"Sorts an array into ascending (default) or descending order.\n\n**Remarks:**\n\n* The ordering of ties is implementation-dependent.\n* Temporal strings can *not* be compared based on their string representation due to the time zone/time-offset representations.","categories":["arrays","sorting"],"parameters":[{"name":"data","description":"An array with data to sort.","schema":{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"null"},{"type":"string","format":"date-time","subtype":"date-time"},{"type":"string","format":"date","subtype":"date"}]}}},{"name":"asc","description":"The default sort order is ascending, with smallest values first. To sort in reverse (descending) order, set this parameter to `false`.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"The sorted array.","schema":{"type":"array","items":{"anyOf":[{"type":"number"},{"type":"null"},{"type":"string","format":"date-time","subtype":"date-time"},{"type":"string","format":"date","subtype":"date"}]}}}},{"id":"sin","summary":"Sine","description":"Computes the sine of `x`.\n\nWorks on radians only.\nNo-data values are passed through.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"An angle in radians.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed sine in the range *[-1, 1]*.","schema":{"type":["number","null"],"minimum":-1,"maximum":1}},"examples":[{"arguments":{"x":0},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Sine.html","title":"Sine explained by Wolfram MathWorld"}]},{"id":"sinh","summary":"Hyperbolic sine","description":"Computes the hyperbolic sine of `x`.\n\nNo-data values are passed through.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"An hyperbolic angle in radians.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed hyperbolic sine.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/HyperbolicSine.html","title":"Hyperbolic sine explained by Wolfram MathWorld"}]},{"id":"sqrt","summary":"Square root","description":"Computes the square root of a real number `x`, which is equal to calculating `x` to the power of *0.5*. For negative `x`, the process returns `NaN`.\n\nA square root of x is a number a such that *`a� = x`*. Therefore, the square root is the inverse function of a to the power of 2, but only for *a >= 0*.\n\nNo-data values are passed through.","categories":["math","math > exponential & logarithmic"],"parameters":[{"name":"x","description":"A number.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed square root.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0},"returns":0},{"arguments":{"x":1},"returns":1},{"arguments":{"x":9},"returns":3},{"arguments":{"x":null},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/SquareRoot.html","title":"Square root explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/8766229","title":"IEEE Standard 754-2019 for Floating-Point Arithmetic"}]},{"id":"tan","summary":"Tangent","description":"Computes the tangent of `x`. The tangent is defined to be the sine of x divided by the cosine of x.\n\nWorks on radians only.\nNo-data values are passed through.\n\nThe computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it. Therefore, *`tan(pi()/2 + multipliy(pi(), n))`* with `n` being any integer results in ±infinity. -infinity for negative values passed to `tan`, +infinity otherwise. If the processing environment does not supports it, an exception is thrown.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"An angle in radians.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed tangent.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":0},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Tangent.html","title":"Tangent explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/4610935","title":"IEEE Standard 754-2008 for Floating-Point Arithmetic"}]},{"id":"tanh","summary":"Hyperbolic tangent","description":"Computes the hyperbolic tangent of `x`. The tangent is defined to be the hyperbolic sine of x divided by the hyperbolic cosine of x.\n\nNo-data values are passed through.","categories":["math > trigonometric"],"parameters":[{"name":"x","description":"An hyperbolic angle in radians.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed hyperbolic tangent in the range *(-1, 1)*.","schema":{"type":["number","null"],"minimumExclusive":-1,"maximumExclusive":1}},"examples":[{"arguments":{"x":0},"returns":0}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/HyperbolicTangent.html","title":"Hyperbolic tangent explained by Wolfram MathWorld"}]},{"id":"text_begins","summary":"Text begins with another text","description":"Checks whether the text (also known as *string*) specified for `data` contains the text specified for `pattern` at the beginning. No-data values are passed through.","categories":["texts","comparison"],"parameters":[{"name":"data","description":"Text in which to find something at the beginning.","schema":{"type":["string","null"]}},{"name":"pattern","description":"Text to find at the beginning of `data`. Regular expressions are not supported.","schema":{"type":"string"}},{"name":"case_sensitive","description":"Case sensitive comparison can be disabled by setting this parameter to `false`.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"`true` if `data` begins with `pattern`, false` otherwise.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"amet"},"returns":false},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"Lorem"},"returns":true},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"lorem"},"returns":false},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"lorem","case_sensitive":false},"returns":true},{"arguments":{"data":"Ä","pattern":"ä","case_sensitive":false},"returns":true},{"arguments":{"data":null,"pattern":"null"},"returns":null}]},{"id":"text_concat","summary":"Concatenate elements to a single text","description":"Merges text representations (also known as *string*) of a set of elements to a single text, having the separator between each element.","categories":["texts"],"parameters":[{"name":"data","description":"A set of elements. Numbers, boolean values and null values get converted to their (lower case) string representation. For example: `1` (integer), `-1.5` (number), `true` / `false` (boolean values)","schema":{"type":"array","items":{"type":["string","number","boolean","null"]}}},{"name":"separator","description":"A separator to put between each of the individual texts. Defaults to an empty string.","schema":{"type":["string","number","boolean","null"]},"default":"","optional":true}],"returns":{"description":"A string containing a string representation of all the array elements in the same order, with the separator between each element.","schema":{"type":"string"}},"examples":[{"arguments":{"data":["Hello","World"],"separator":" "},"returns":"Hello World"},{"arguments":{"data":[1,2,3,4,5,6,7,8,9,0]},"returns":"1234567890"},{"arguments":{"data":[null,true,false,1,-1.5,"ß"],"separator":"\n"},"returns":"null\ntrue\nfalse\n1\n-1.5\nß"},{"arguments":{"data":[2,0],"separator":1},"returns":"210"},{"arguments":{"data":[]},"returns":""}]},{"id":"text_contains","summary":"Text contains another text","description":"Checks whether the text (also known as *string*) specified for `data` contains the text specified for `pattern`. No-data values are passed through.","categories":["texts","comparison"],"parameters":[{"name":"data","description":"Text in which to find something in.","schema":{"type":["string","null"]}},{"name":"pattern","description":"Text to find in `data`. Regular expressions are not supported.","schema":{"type":"string"}},{"name":"case_sensitive","description":"Case sensitive comparison can be disabled by setting this parameter to `false`.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"`true` if `data` contains the `pattern`, false` otherwise.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"openEO"},"returns":false},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"ipsum dolor"},"returns":true},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"Ipsum Dolor"},"returns":false},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"SIT","case_sensitive":false},"returns":true},{"arguments":{"data":"ÄÖÜ","pattern":"ö","case_sensitive":false},"returns":true},{"arguments":{"data":null,"pattern":"null"},"returns":null}]},{"id":"subtract","summary":"Subtraction of two numbers","description":"Subtracts argument `y` from the argument `x` (*`x - y`*) and returns the computed result.\n\nNo-data values are taken into account so that the no-data value is returned if any element is such a value.\n\nThe computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it.","categories":["math"],"parameters":[{"name":"x","description":"The minuend.","schema":{"type":["number","null"]}},{"name":"y","description":"The subtrahend.","schema":{"type":["number","null"]}}],"returns":{"description":"The computed result.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"x":5,"y":2.5},"returns":2.5},{"arguments":{"x":-2,"y":4},"returns":-6},{"arguments":{"x":1,"y":null},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Subtraction.html","title":"Subtraction explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/8766229","title":"IEEE Standard 754-2019 for Floating-Point Arithmetic"}]},{"id":"text_find","summary":"First position of a text in another text","description":"Checks where the text (also known as *string*) specified for `pattern` is positioned in the text specified for `data` for the first time. No-data values are passed through.","categories":["texts"],"parameters":[{"name":"data","description":"Text in which to find something in.","schema":{"type":["string","null"]}},{"name":"pattern","description":"Text to find in `data`. Regular expressions are not supported.","schema":{"type":"string"}},{"name":"case_sensitive","description":"Case sensitive comparison can be disabled by setting this parameter to `false`.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"A value >= 0 that indicates the position of the text, `null` if the text was not found.","schema":{"type":["integer","null"],"minimum":0}},"examples":[{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"openEO"},"returns":null},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"ipsum dolor"},"returns":6},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"Ipsum Dolor"},"returns":null},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"SIT","case_sensitive":false},"returns":18},{"arguments":{"data":"ÄÖÜ","pattern":"ö","case_sensitive":false},"returns":1},{"arguments":{"data":null,"pattern":"null"},"returns":null}]},{"id":"sum","summary":"Compute the sum by adding up numbers","description":"Sums up all elements in a sequential array of numbers and returns the computed sum.\n\nThe computations follow [IEEE Standard 754](https://ieeexplore.ieee.org/document/8766229) whenever the processing environment supports it.\n\nAn array with solely no-data values returns the no-data value (or `null`).","categories":["math","reducer"],"parameters":[{"name":"data","description":"An array of numbers.","schema":{"type":"array","items":{"type":["number","null"]}}}],"returns":{"description":"The computed sum of the sequence of numbers.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"data":[5,1]},"returns":6},{"arguments":{"data":[-2,4,2.5]},"returns":4.5},{"arguments":{"data":[100]},"returns":100},{"arguments":{"data":[]},"returns":null}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Sum.html","title":"Sum explained by Wolfram MathWorld"},{"rel":"about","href":"https://ieeexplore.ieee.org/document/8766229","title":"IEEE Standard 754-2019 for Floating-Point Arithmetic"}]},{"id":"xor","summary":"Logical XOR (exclusive or)","description":"Checks if **exactly one** of the values is true. If a component is `null`, the result will be `null` if the outcome is ambiguous.\n\n**Truth table:**\n\n```\nx \\ y || null | false | true\n----- || ---- | ----- | -----\nnull  || null | null  | null\nfalse || null | false | true\ntrue  || null | true  | false\n```","categories":["logic"],"parameters":[{"name":"x","description":"A boolean value.","schema":{"type":["boolean","null"]}},{"name":"y","description":"A boolean value.","schema":{"type":["boolean","null"]}}],"returns":{"description":"Boolean result of the logical XOR.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"x":true,"y":true},"returns":false},{"arguments":{"x":false,"y":false},"returns":false},{"arguments":{"x":true,"y":false},"returns":true},{"arguments":{"x":true,"y":null},"returns":null},{"arguments":{"x":false,"y":null},"returns":null}]},{"id":"text_ends","summary":"Text ends with another text","description":"Checks whether the text (also known as *string*) specified for `data` contains the text specified for `pattern` at the end. No-data values are passed through.","categories":["texts","comparison"],"parameters":[{"name":"data","description":"Text in which to find something at the end.","schema":{"type":["string","null"]}},{"name":"pattern","description":"Text to find at the end of `data`. Regular expressions are not supported.","schema":{"type":"string"}},{"name":"case_sensitive","description":"Case sensitive comparison can be disabled by setting this parameter to `false`.","schema":{"type":"boolean"},"default":true,"optional":true}],"returns":{"description":"`true` if `data` ends with `pattern`, false` otherwise.","schema":{"type":["boolean","null"]}},"examples":[{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"amet"},"returns":true},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"AMET"},"returns":false},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"Lorem"},"returns":false},{"arguments":{"data":"Lorem ipsum dolor sit amet","pattern":"AMET","case_sensitive":false},"returns":true},{"arguments":{"data":"Ä","pattern":"ä","case_sensitive":false},"returns":true},{"arguments":{"data":null,"pattern":"null"},"returns":null}]},{"id":"filter_bbox","summary":"Spatial filter using a bounding box","description":"Limits the data cube to the specified bounding box.\n\n* For raster data cubes, the filter retains a pixel in the data cube if the point at the pixel center intersects with the bounding box (as defined in the Simple Features standard by the OGC). Alternatively, ``filter_spatial()`` can be used to filter by geometry.\n* For vector data cubes, the filter retains the geometry in the data cube if the geometry is fully within the bounding box (as defined in the Simple Features standard by the OGC). All geometries that were empty or not contained fully within the bounding box will be removed from the data cube.\n\nAlternatively, filter spatially with geometries using ``filter_spatial()`` (on a raster data cube) or ``filter_vector()`` (on a vector data cube).","categories":["cubes","filter"],"parameters":[{"name":"data","description":"A data cube.","schema":{"type":"object","subtype":"raster-cube"}},{"name":"extent","description":"A bounding box, which may include a vertical axis (see `base` and `height`).\n\nIf the bounding box is not provided in the coordinate reference system (CRS) of the data cube, the bounding box is reprojected to the CRS of the spatial data cube dimensions.","schema":{"type":"object","subtype":"bounding-box","required":["west","south","east","north"],"properties":{"west":{"description":"West (lower left corner, coordinate axis 1).","type":"number"},"south":{"description":"South (lower left corner, coordinate axis 2).","type":"number"},"east":{"description":"East (upper right corner, coordinate axis 1).","type":"number"},"north":{"description":"North (upper right corner, coordinate axis 2).","type":"number"},"base":{"description":"Base (optional, lower left corner, coordinate axis 3).","type":["number","null"],"default":null},"height":{"description":"Height (optional, upper right corner, coordinate axis 3).","type":["number","null"],"default":null},"crs":{"description":"Coordinate reference system of the extent, specified as as [EPSG code](http://www.epsg-registry.org/) or [WKT2 CRS string](http://docs.opengeospatial.org/is/18-010r7/18-010r7.html). Defaults to `4326` (EPSG code 4326) unless the client explicitly requests a different coordinate reference system.","anyOf":[{"title":"EPSG Code","type":"integer","subtype":"epsg-code","minimum":1000,"examples":[3857]},{"title":"WKT2","type":"string","subtype":"wkt2-definition"}],"default":4326}}}}],"returns":{"description":"A data cube restricted to the bounding box. The dimensions and dimension properties (name, type, labels, reference system and resolution) remain unchanged, except that the spatial dimensions have less (or the same) dimension labels.","schema":{"type":"object","subtype":"raster-cube"}},"links":[{"href":"https://openeo.org/documentation/1.0/datacubes.html#filter","rel":"about","title":"Filters explained in the openEO documentation"},{"rel":"about","href":"https://proj.org/usage/projections.html","title":"PROJ parameters for cartographic projections"},{"rel":"about","href":"http://www.epsg-registry.org","title":"Official EPSG code registry"},{"rel":"about","href":"http://www.epsg.io","title":"Unofficial EPSG code database"},{"href":"http://www.opengeospatial.org/standards/sfa","rel":"about","title":"Simple Features standard by the OGC"}]},{"id":"filter_bands","summary":"Filter the bands by names","description":"Filters the bands in the data cube so that bands that don't match any of the criteria are dropped from the data cube. The data cube is expected to have only one dimension of type `bands`. Fails with a `DimensionMissing` exception if no such dimension exists.\n\nThe following criteria can be used to select bands:\n\n* `bands`: band name or common band name (e.g. `B01`, `B8A`, `red` or `nir`)\n\nAll these information are exposed in the band metadata of the collection. To keep algorithms interoperable it is recommended to prefer the common band names or the wavelengths over band names that are specific to the collection and/or back-end.\n\nIf multiple criteria are specified, any of them must match and not all of them, i.e. they are combined with an OR-operation. If no criteria are specified, the `BandFilterParameterMissing` exception must be thrown.\n\n**Important:** The order of the specified array defines the order of the bands in the data cube, which can be important for subsequent processes. If multiple bands are matched by a single criterion (e.g. a range of wavelengths), they stay in the original order.","categories":["cubes","filter"],"parameters":[{"name":"data","description":"A data cube with bands.","schema":{"type":"object","subtype":"raster-cube"}},{"name":"bands","description":"A list of band names. Either the unique band name (metadata field `name` in bands) or one of the common band names (metadata field `common_name` in bands). If the unique band name and the common name conflict, the unique band name has a higher priority.\n\nThe order of the specified array defines the order of the bands in the data cube. If multiple bands match a common name, all matched bands are included in the original order.","schema":{"type":"array","minItems":1,"items":{"type":"string","subtype":"band-name"}}}],"returns":{"description":"A data cube limited to a subset of its original bands. The dimensions and dimension properties (name, type, labels, reference system and resolution) remain unchanged, except that the dimension of type `bands` has less (or the same) dimension labels.","schema":{"type":"object","subtype":"raster-cube"}},"links":[{"rel":"about","href":"https://github.com/radiantearth/stac-spec/tree/master/extensions/eo#common-band-names","title":"List of common band names as specified by the STAC specification"},{"href":"https://openeo.org/documentation/1.0/datacubes.html#filter","rel":"about","title":"Filters explained in the openEO documentation"}]},{"id":"variance","summary":"Variance","description":"Computes the sample variance of an array of numbers by calculating the square of the standard deviation (see ``sd()``). It is defined to be the expectation of the squared deviation of a random variable from its expected value. Basically, it measures how far the numbers in the array are spread out from their average value.\n\nAn array with solely no-data values returns the no-data value (or `null`).","categories":["math > statistics","reducer"],"parameters":[{"name":"data","description":"An array of numbers.","schema":{"type":"array","items":{"type":["number","null"]}}}],"returns":{"description":"The computed sample variance.","schema":{"type":["number","null"]}},"examples":[{"arguments":{"data":[-1,1,3]},"returns":4},{"arguments":{"data":[2,3,3,null,4,4,5]},"returns":1.1}],"links":[{"rel":"about","href":"http://mathworld.wolfram.com/Variance.html","title":"Variance explained by Wolfram MathWorld"}]}],"links":[]}