From 4d69d6e4783670cc5dfc46032a06b34c6913a9df Mon Sep 17 00:00:00 2001 From: Matthias Mohr Date: Fri, 10 Mar 2023 17:02:52 +0100 Subject: [PATCH 1/4] Streamline geojson import #346 --- CHANGELOG.md | 6 +++ aggregate_spatial.json | 13 +++-- filter_spatial.json | 12 +++-- load_collection.json | 5 +- mask_polygon.json | 13 +++-- proposals/filter_vector.json | 27 ++++------ proposals/load_geojson.json | 68 +++++++++++++++++++++++++ proposals/load_ml_model.json | 2 +- proposals/load_result.json | 8 +-- proposals/vector_buffer.json | 27 ++++------ proposals/vector_to_random_points.json | 25 ++++----- proposals/vector_to_regular_points.json | 25 ++++----- tests/.words | 1 + 13 files changed, 142 insertions(+), 90 deletions(-) create mode 100644 proposals/load_geojson.json diff --git a/CHANGELOG.md b/CHANGELOG.md index e2165c06..ee4fe919 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `fit_class_random_forest` - `fit_regr_random_forest` - `flatten_dimensions` + - `load_geojson` - `load_ml_model` - `predict_random_forest` - `save_ml_model` @@ -47,12 +48,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Renamed `create_raster_cube` to `create_data_cube`. [#68](https://github.com/Open-EO/openeo-processes/issues/68) - Updated the processes based on the subtypes `raster-cube` or `vector-cube` to work with the subtype `datacube` instead. [#68](https://github.com/Open-EO/openeo-processes/issues/68) +### Deprecated + +- `aggregate_spatial`, `filter_spatial`, `load_collection`, `mask_polygon`: GeoJSON input is deprecated. Use `load_geojson` instead. [#346](https://github.com/Open-EO/openeo-processes/issues/346) + ### Removed - The `examples` folder has been migrated to the [openEO Community Examples](https://github.com/Open-EO/openeo-community-examples/tree/main/processes) repository. - `between`: Support for temporal comparison. - Deprecated `GeometryCollections` are not supported any longer. [#389](https://github.com/Open-EO/openeo-processes/issues/389) - Deprecated PROJ definitions for the CRS are not supported any longer. +- `load_result`: GeoJSON input is not supported any longer. Use `load_geojson` instead. [#346](https://github.com/Open-EO/openeo-processes/issues/346) ### Fixed diff --git a/aggregate_spatial.json b/aggregate_spatial.json index 380e34c0..dadf0ff3 100644 --- a/aggregate_spatial.json +++ b/aggregate_spatial.json @@ -29,11 +29,7 @@ "description": "Geometries for which the aggregation will be computed. Feature properties are preserved for vector data cubes and all GeoJSON Features.\n\nOne value will be computed per label in the dimension of type `geometries`, GeoJSON `Feature` or `Geometry`. For a `FeatureCollection` multiple values will be computed, one value per contained `Feature`. For example, a single value will be computed for a `MultiPolygon`, but two values will be computed for a `FeatureCollection` containing two polygons.\n\n- For **polygons**, the process considers all pixels for which the point at the pixel center intersects with the corresponding polygon (as defined in the Simple Features standard by the OGC).\n- For **points**, the process considers the closest pixel center.\n- For **lines** (line strings), the process considers all the pixels whose centers are closest to at least one point on the line.\n\nThus, pixels may be part of multiple geometries and be part of multiple aggregations. No operation is applied to geometries that are outside of the bounds of the data.", "schema": [ { - "type": "object", - "subtype": "geojson", - "description": "The GeoJSON type `GeometryCollection` is not supported." - }, - { + "title": "Vector Data Cube", "type": "object", "subtype": "datacube", "dimensions": [ @@ -41,6 +37,13 @@ "type": "geometries" } ] + }, + { + "title": "GeoJSON (deprecated)", + "type": "object", + "subtype": "geojson", + "description": "The GeoJSON type `GeometryCollection` is not supported.", + "deprecated": true } ] }, diff --git a/filter_spatial.json b/filter_spatial.json index b6d7a7de..aeb35ee1 100644 --- a/filter_spatial.json +++ b/filter_spatial.json @@ -29,10 +29,7 @@ "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.\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": [ { - "type": "object", - "subtype": "geojson" - }, - { + "title": "Vector Data Cube", "type": "object", "subtype": "datacube", "dimensions": [ @@ -40,6 +37,13 @@ "type": "geometries" } ] + }, + { + "title": "GeoJSON (deprecated)", + "type": "object", + "subtype": "geojson", + "description": "The GeoJSON type `GeometryCollection` is not supported.", + "deprecated": true } ] } diff --git a/load_collection.json b/load_collection.json index 050d5a81..57fc7596 100644 --- a/load_collection.json +++ b/load_collection.json @@ -86,10 +86,11 @@ } }, { - "title": "GeoJSON", + "title": "GeoJSON (deprecated)", "description": "Limits the data cube to the bounding box of the given geometries. For raster data, all pixels inside the bounding box that do not intersect with any of the polygons will be set to no data (`null`).\n\nThe GeoJSON type `GeometryCollection` is not supported.", "type": "object", - "subtype": "geojson" + "subtype": "geojson", + "deprecated": true }, { "title": "Vector data cube", diff --git a/mask_polygon.json b/mask_polygon.json index f79db016..5737329d 100644 --- a/mask_polygon.json +++ b/mask_polygon.json @@ -29,11 +29,7 @@ "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." - }, - { + "title": "Vector Data Cube", "type": "object", "subtype": "datacube", "dimensions": [ @@ -45,6 +41,13 @@ ] } ] + }, + { + "title": "GeoJSON (deprecated)", + "type": "object", + "subtype": "geojson", + "description": "The GeoJSON type `GeometryCollection` is not supported.", + "deprecated": true } ] }, diff --git a/proposals/filter_vector.json b/proposals/filter_vector.json index 46279fa7..ee2a9680 100644 --- a/proposals/filter_vector.json +++ b/proposals/filter_vector.json @@ -24,23 +24,16 @@ }, { "name": "geometries", - "description": "One or more base geometries used for filtering, given as GeoJSON or vector data cube. If multiple base geometries are provided, the union of them is used.", - "schema": [ - { - "type": "object", - "subtype": "geojson", - "description": "The GeoJSON type `GeometryCollection` is not supported." - }, - { - "type": "object", - "subtype": "datacube", - "dimensions": [ - { - "type": "geometries" - } - ] - } - ] + "description": "One or more base geometries used for filtering, given as vector data cube. If multiple base geometries are provided, the union of them is used.", + "schema": { + "type": "object", + "subtype": "datacube", + "dimensions": [ + { + "type": "geometries" + } + ] + } }, { "name": "relation", diff --git a/proposals/load_geojson.json b/proposals/load_geojson.json new file mode 100644 index 00000000..7b077312 --- /dev/null +++ b/proposals/load_geojson.json @@ -0,0 +1,68 @@ +{ + "id": "load_geojson", + "summary": "Load GeoJSON data", + "description": "Loads GeoJSON data as defined by [RFC 7946](https://www.rfc-editor.org/rfc/rfc7946.html) into a vector data cube. Feature properties are preserved.", + "categories": [ + "import", + "vector" + ], + "experimental": true, + "parameters": [ + { + "name": "data", + "description": "The GeoJSON data. Can either be inline GeoJSON, a user-uploaded file, or point to a remote URL. The GeoJSON type `GeometryCollection` is not supported. Each geometry in the GeoJSON data results in a dimension label in the `geometries` dimension.", + "schema": [ + { + "title": "GeoJSON", + "description": "GeoJSON (inline)", + "type": "object", + "subtype": "geojson" + }, + { + "title": "URL", + "type": "string", + "format": "uri", + "subtype": "uri", + "pattern": "^https?://" + }, + { + "title": "User-uploaded file", + "type": "string", + "subtype": "file-path", + "pattern": "^[^\r\n\\:'\"]+$" + } + ] + }, + { + "name": "properties", + "description": "One or more properties from the GeoJSON file to construct a additional dimension from. Only applies for GeoJSON Features and FeatureCollections. Missing values in are generally set to no-data (`null`).\n\nDepending on the number of properties provided the process constructs and names the dimension differently:\n\n- Single property with scalar values: A single dimension label with the name of the property and a single value per geometry.\n- Single property of type array: The dimension labels correspond to the array indices. There are as many values and labels per geometry as there are for the largest array.\n- Multiple properties with scalar values: The dimension labels correspond to the property names. There are as many values and labels per geometry as there are properties provided here.\n\nDepending on the number of properties the dimension name is:\n\n- Single property: Name of the property\n- Multiple properties: `properties`.", + "schema": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + ], + "returns": { + "description": "A vector data cube containing the geometries, either one or two dimensional.", + "schema": { + "type": "object", + "subtype": "datacube", + "dimensions": [ + { + "type": "geometries" + } + ] + } + }, + "links": [ + { + "href": "https://www.rfc-editor.org/rfc/rfc7946.html", + "title": "RFC 7946: The GeoJSON Format", + "type": "text/html", + "rel": "about" + } + ] +} diff --git a/proposals/load_ml_model.json b/proposals/load_ml_model.json index 151513c8..1bea5bbc 100644 --- a/proposals/load_ml_model.json +++ b/proposals/load_ml_model.json @@ -27,7 +27,7 @@ "pattern": "^[\\w\\-\\.~]+$" }, { - "title": "User-uploaded File", + "title": "User-uploaded file", "type": "string", "subtype": "file-path", "pattern": "^[^\r\n\\:'\"]+$" diff --git a/proposals/load_result.json b/proposals/load_result.json index 26f6039d..c4bb703e 100644 --- a/proposals/load_result.json +++ b/proposals/load_result.json @@ -29,7 +29,7 @@ }, { "name": "spatial_extent", - "description": "Limits the data to load from the batch job result 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 of the geometry is fully within the bounding box or any of the polygons (as defined in the Simple Features standard by the OGC).\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\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.", + "description": "Limits the data to load from the batch job result 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 of the geometry is fully within the bounding box or any of the polygons (as defined in the Simple Features standard by the OGC).\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", @@ -96,12 +96,6 @@ } } }, - { - "title": "GeoJSON", - "description": "Limits the data cube to the bounding box of the given geometries. For raster data, all pixels inside the bounding box that do not intersect with any of the polygons will be set to no data (`null`).\n\nThe GeoJSON type `GeometryCollection` is not supported.", - "type": "object", - "subtype": "geojson" - }, { "title": "Vector data cube", "description": "Limits the data cube to the bounding box of the given geometries in the vector data cube. All pixels inside the bounding box that do not intersect with any of the polygons will be set to no data (`null`).", diff --git a/proposals/vector_buffer.json b/proposals/vector_buffer.json index ad30030b..968af659 100644 --- a/proposals/vector_buffer.json +++ b/proposals/vector_buffer.json @@ -9,23 +9,16 @@ "parameters": [ { "name": "geometries", - "description": "Geometries to apply the buffer on. Feature properties are preserved for vector data cubes and all GeoJSON Features.", - "schema": [ - { - "type": "object", - "subtype": "geojson", - "description": "The GeoJSON type `GeometryCollection` is not supported." - }, - { - "type": "object", - "subtype": "datacube", - "dimensions": [ - { - "type": "geometries" - } - ] - } - ] + "description": "Geometries to apply the buffer on. Feature properties are preserved.", + "schema": { + "type": "object", + "subtype": "datacube", + "dimensions": [ + { + "type": "geometries" + } + ] + } }, { "name": "distance", diff --git a/proposals/vector_to_random_points.json b/proposals/vector_to_random_points.json index 9a018849..e2558801 100644 --- a/proposals/vector_to_random_points.json +++ b/proposals/vector_to_random_points.json @@ -11,22 +11,15 @@ { "name": "data", "description": "Input geometries for sample extraction.", - "schema": [ - { - "type": "object", - "subtype": "geojson", - "description": "The GeoJSON type `GeometryCollection` is not supported." - }, - { - "type": "object", - "subtype": "datacube", - "dimensions": [ - { - "type": "geometries" - } - ] - } - ] + "schema": { + "type": "object", + "subtype": "datacube", + "dimensions": [ + { + "type": "geometries" + } + ] + } }, { "name": "geometry_count", diff --git a/proposals/vector_to_regular_points.json b/proposals/vector_to_regular_points.json index d49a333d..ca95aedf 100644 --- a/proposals/vector_to_regular_points.json +++ b/proposals/vector_to_regular_points.json @@ -11,22 +11,15 @@ { "name": "data", "description": "Input geometries for sample extraction.", - "schema": [ - { - "type": "object", - "subtype": "geojson", - "description": "The GeoJSON type `GeometryCollection` is not supported." - }, - { - "type": "object", - "subtype": "datacube", - "dimensions": [ - { - "type": "geometries" - } - ] - } - ] + "schema": { + "type": "object", + "subtype": "datacube", + "dimensions": [ + { + "type": "geometries" + } + ] + } }, { "name": "distance", diff --git a/tests/.words b/tests/.words index 112b2347..9bf2ffa5 100644 --- a/tests/.words +++ b/tests/.words @@ -10,6 +10,7 @@ DEM-based Domini gamma0 GeoJSON +FeatureCollections labeled MathWorld n-ary From affd13b89bceffb095f171908cb3ba06785a8d4b Mon Sep 17 00:00:00 2001 From: Matthias Mohr Date: Mon, 13 Mar 2023 17:46:23 +0100 Subject: [PATCH 2/4] Fix typos --- proposals/load_geojson.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proposals/load_geojson.json b/proposals/load_geojson.json index 7b077312..f81ab6ef 100644 --- a/proposals/load_geojson.json +++ b/proposals/load_geojson.json @@ -35,7 +35,7 @@ }, { "name": "properties", - "description": "One or more properties from the GeoJSON file to construct a additional dimension from. Only applies for GeoJSON Features and FeatureCollections. Missing values in are generally set to no-data (`null`).\n\nDepending on the number of properties provided the process constructs and names the dimension differently:\n\n- Single property with scalar values: A single dimension label with the name of the property and a single value per geometry.\n- Single property of type array: The dimension labels correspond to the array indices. There are as many values and labels per geometry as there are for the largest array.\n- Multiple properties with scalar values: The dimension labels correspond to the property names. There are as many values and labels per geometry as there are properties provided here.\n\nDepending on the number of properties the dimension name is:\n\n- Single property: Name of the property\n- Multiple properties: `properties`.", + "description": "One or more properties from the GeoJSON file to construct an additional dimension from. Only applies for GeoJSON Features and FeatureCollections. Missing values are generally set to no-data (`null`).\n\nDepending on the number of properties provided the process constructs and names the dimension differently:\n\n- Single property with scalar values: A single dimension label with the name of the property and a single value per geometry.\n- Single property of type array: The dimension labels correspond to the array indices. There are as many values and labels per geometry as there are for the largest array.\n- Multiple properties with scalar values: The dimension labels correspond to the property names. There are as many values and labels per geometry as there are properties provided here.\n\nDepending on the number of properties the dimension name is:\n\n- Single property: Name of the property\n- Multiple properties: `properties`.", "schema": { "type": "array", "uniqueItems": true, From 313529ae870a8869d9a4d3c93d13325a133da933 Mon Sep 17 00:00:00 2001 From: Matthias Mohr Date: Fri, 31 Mar 2023 10:21:21 +0200 Subject: [PATCH 3/4] Deprecation --- aggregate_spatial.json | 4 ++-- filter_spatial.json | 4 ++-- load_collection.json | 4 ++-- mask_polygon.json | 4 ++-- meta/subtype-schemas.json | 3 ++- proposals/load_geojson.json | 6 ------ 6 files changed, 10 insertions(+), 15 deletions(-) diff --git a/aggregate_spatial.json b/aggregate_spatial.json index 1f5edabe..8820bf67 100644 --- a/aggregate_spatial.json +++ b/aggregate_spatial.json @@ -39,10 +39,10 @@ ] }, { - "title": "GeoJSON (deprecated)", + "title": "GeoJSON", "type": "object", "subtype": "geojson", - "description": "The GeoJSON type `GeometryCollection` is not supported.", + "description": "Deprecated. The GeoJSON type `GeometryCollection` is not supported.", "deprecated": true } ] diff --git a/filter_spatial.json b/filter_spatial.json index e50ce69e..811f1ee9 100644 --- a/filter_spatial.json +++ b/filter_spatial.json @@ -39,10 +39,10 @@ ] }, { - "title": "GeoJSON (deprecated)", + "title": "GeoJSON", "type": "object", "subtype": "geojson", - "description": "The GeoJSON type `GeometryCollection` is not supported.", + "description": "Deprecated. The GeoJSON type `GeometryCollection` is not supported.", "deprecated": true } ] diff --git a/load_collection.json b/load_collection.json index c13e6d89..ff50ccb7 100644 --- a/load_collection.json +++ b/load_collection.json @@ -86,8 +86,8 @@ } }, { - "title": "GeoJSON (deprecated)", - "description": "Limits the data cube to the bounding box of the given geometries. For raster data, all pixels inside the bounding box that do not intersect with any of the polygons will be set to no data (`null`).\n\nThe GeoJSON type `GeometryCollection` is not supported.", + "title": "GeoJSON", + "description": "Deprecated. Limits the data cube to the bounding box of the given geometries. For raster data, all pixels inside the bounding box that do not intersect with any of the polygons will be set to no data (`null`).\n\nThe GeoJSON type `GeometryCollection` is not supported.", "type": "object", "subtype": "geojson", "deprecated": true diff --git a/mask_polygon.json b/mask_polygon.json index e13b20db..7271bfc2 100644 --- a/mask_polygon.json +++ b/mask_polygon.json @@ -43,10 +43,10 @@ ] }, { - "title": "GeoJSON (deprecated)", + "title": "GeoJSON", "type": "object", "subtype": "geojson", - "description": "The GeoJSON type `GeometryCollection` is not supported.", + "description": "Deprecated. The GeoJSON type `GeometryCollection` is not supported.", "deprecated": true } ] diff --git a/meta/subtype-schemas.json b/meta/subtype-schemas.json index 941e6a48..458c891d 100644 --- a/meta/subtype-schemas.json +++ b/meta/subtype-schemas.json @@ -166,7 +166,8 @@ "type": "object", "subtype": "geojson", "title": "GeoJSON", - "description": "GeoJSON as defined by [RFC 7946](https://www.rfc-editor.org/rfc/rfc7946.html).", + "description": "Deprecated. GeoJSON as defined by [RFC 7946](https://www.rfc-editor.org/rfc/rfc7946.html). The GeoJSON type `GeometryCollection` is not supported.", + "deprecated": true, "allOf": [ { "$ref": "https://geojson.org/schema/GeoJSON.json" diff --git a/proposals/load_geojson.json b/proposals/load_geojson.json index fadd6429..48669006 100644 --- a/proposals/load_geojson.json +++ b/proposals/load_geojson.json @@ -12,12 +12,6 @@ "name": "data", "description": "The GeoJSON data. Can either be inline GeoJSON, a user-uploaded file, or point to a remote URL. The GeoJSON type `GeometryCollection` is not supported. Each geometry in the GeoJSON data results in a dimension label in the `geometries` dimension.", "schema": [ - { - "title": "GeoJSON", - "description": "GeoJSON (inline)", - "type": "object", - "subtype": "geojson" - }, { "title": "URL", "type": "string", From 9aa97c36281020286349bf63a999520a035e6665 Mon Sep 17 00:00:00 2001 From: Matthias Mohr Date: Fri, 31 Mar 2023 10:23:55 +0200 Subject: [PATCH 4/4] Remove load_geojson --- CHANGELOG.md | 3 +- proposals/load_geojson.json | 62 ------------------------------------- 2 files changed, 1 insertion(+), 64 deletions(-) delete mode 100644 proposals/load_geojson.json diff --git a/CHANGELOG.md b/CHANGELOG.md index ee4fe919..472ff002 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `fit_class_random_forest` - `fit_regr_random_forest` - `flatten_dimensions` - - `load_geojson` - `load_ml_model` - `predict_random_forest` - `save_ml_model` @@ -50,7 +49,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Deprecated -- `aggregate_spatial`, `filter_spatial`, `load_collection`, `mask_polygon`: GeoJSON input is deprecated. Use `load_geojson` instead. [#346](https://github.com/Open-EO/openeo-processes/issues/346) +- `aggregate_spatial`, `filter_spatial`, `load_collection`, `mask_polygon`: GeoJSON input is deprecated. [#346](https://github.com/Open-EO/openeo-processes/issues/346) ### Removed diff --git a/proposals/load_geojson.json b/proposals/load_geojson.json deleted file mode 100644 index 48669006..00000000 --- a/proposals/load_geojson.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "id": "load_geojson", - "summary": "Load GeoJSON data", - "description": "Loads GeoJSON data as defined by [RFC 7946](https://www.rfc-editor.org/rfc/rfc7946.html) into a vector data cube. Feature properties are preserved.", - "categories": [ - "import", - "vector" - ], - "experimental": true, - "parameters": [ - { - "name": "data", - "description": "The GeoJSON data. Can either be inline GeoJSON, a user-uploaded file, or point to a remote URL. The GeoJSON type `GeometryCollection` is not supported. Each geometry in the GeoJSON data results in a dimension label in the `geometries` dimension.", - "schema": [ - { - "title": "URL", - "type": "string", - "format": "uri", - "subtype": "uri", - "pattern": "^https?://" - }, - { - "title": "User-uploaded file", - "type": "string", - "subtype": "file-path", - "pattern": "^[^\r\n\\:'\"]+$" - } - ] - }, - { - "name": "properties", - "description": "One or more properties from the GeoJSON file to construct an additional dimension from. Only applies for GeoJSON Features and FeatureCollections. Missing values are generally set to no-data (`null`).\n\nDepending on the number of properties provided the process constructs and names the dimension differently:\n\n- Single property with scalar values: A single dimension label with the name of the property and a single value per geometry.\n- Single property of type array: The dimension labels correspond to the array indices. There are as many values and labels per geometry as there are for the largest array.\n- Multiple properties with scalar values: The dimension labels correspond to the property names. There are as many values and labels per geometry as there are properties provided here.\n\nDepending on the number of properties the dimension name is:\n\n- Single property: Name of the property\n- Multiple properties: `properties`.", - "schema": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - ], - "returns": { - "description": "A vector data cube containing the geometries, either one or two dimensional.", - "schema": { - "type": "object", - "subtype": "datacube", - "dimensions": [ - { - "type": "geometry" - } - ] - } - }, - "links": [ - { - "href": "https://www.rfc-editor.org/rfc/rfc7946.html", - "title": "RFC 7946: The GeoJSON Format", - "type": "text/html", - "rel": "about" - } - ] -}