Skip to content

Commit

Permalink
Add apply_polygon #287 (#298)
Browse files Browse the repository at this point in the history
* Add chunk_polygon #287

* Add mask_value parameter to chunk_polygon

* Rename: chunk_polgon -> apply_polygon

* Updates to terminology and definition

* Add exception

* geometries -> geometry
  • Loading branch information
m-mohr authored Mar 15, 2023
1 parent 13bee5f commit f8f6731
Show file tree
Hide file tree
Showing 3 changed files with 130 additions and 1 deletion.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added

- New processes in proposal state
- `apply_polygon`
- `fit_curve`
- `predict_curve`
- `ard_normalized_radar_backscatter` and `sar_backscatter`: Added `options` parameter
Expand Down
2 changes: 1 addition & 1 deletion mask_polygon.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"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`.\n\nThe 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.",
"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"
Expand Down
128 changes: 128 additions & 0 deletions proposals/apply_polygon.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
{
"id": "apply_polygon",
"summary": "Apply a process to segments of the data cube",
"description": "Applies a process to segments of the data cube that are defined by the given polygons. For each polygon provided, all pixels for which the point at the pixel center intersects with the polygon (as defined in the Simple Features standard by the OGC) are collected into sub data cubes. If a pixel is part of multiple of the provided polygons (e.g., when the polygons overlap), the `GeometriesOverlap` exception is thrown. Each sub data cube is passed individually to the given process.",
"categories": [
"cubes"
],
"experimental": true,
"parameters": [
{
"name": "data",
"description": "A data cube.",
"schema": {
"type": "object",
"subtype": "raster-cube"
}
},
{
"name": "polygons",
"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.",
"schema": [
{
"type": "object",
"subtype": "geojson",
"description": "The GeoJSON type `GeometryCollection` is not supported."
},
{
"type": "object",
"subtype": "datacube",
"dimensions": [
{
"type": "geometry",
"geometry_type": [
"Polygon",
"MultiPolygon"
]
}
]
}
]
},
{
"name": "process",
"description": "A process that accepts and returns a single data cube and is applied on each individual sub data cube. The process may consist of multiple sub-processes.",
"schema": {
"type": "object",
"subtype": "process-graph",
"parameters": [
{
"name": "data",
"description": "A sub data cube of the original data cube. The sub data cubes provided cover the smallest possible grid-aligned extent of the corresponding polygon and all pixels outside of the polygon are replaced with the value given in `mask_value`.",
"schema": {
"type": "object",
"subtype": "raster-cube"
}
},
{
"name": "context",
"description": "Additional data passed by the user.",
"schema": {
"description": "Any data type."
},
"optional": true,
"default": null
}
],
"returns": {
"description": "The updated sub data cube with the newly computed values and the same dimensions. The dimension properties (name, type, reference system and resolution) must remain unchanged. The labels can change, but the number of labels must remain unchanged.",
"schema": {
"description": "A data cube.",
"schema": {
"type": "object",
"subtype": "raster-cube"
}
}
}
}
},
{
"name": "mask_value",
"description": "All pixels for which the point at the pixel center **does not** intersect with the polygon are replaced with the given value, which defaults to `null` (no data).\n\nIt can provide a distinction between no data values within the polygon and masked pixels outside of it.",
"schema": [
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"optional": true
},
{
"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"
}
},
"exceptions": {
"GeometriesOverlap": {
"message": "Geometries are not allowed to overlap to avoid that pixel values are processed multiple times."
}
},
"links": [
{
"href": "http://www.opengeospatial.org/standards/sfa",
"rel": "about",
"title": "Simple Features standard by the OGC"
}
]
}

0 comments on commit f8f6731

Please sign in to comment.