diff --git a/.release-please-manifest.json b/.release-please-manifest.json index feb01f2cf..15e9d4df0 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -2,7 +2,7 @@ ".": "1.14.3", "core": "1.14.3", "extensions/classification": "2.0.0", - "extensions/datacube": "2.2.0", + "extensions/datacube": "2.3.0", "extensions/eo": "1.1.0", "extensions/file": "2.1.0", "extensions/grid": "1.1.0", diff --git a/core/pystac/__init__.py b/core/pystac/__init__.py index 0f1b808b9..2642e5409 100644 --- a/core/pystac/__init__.py +++ b/core/pystac/__init__.py @@ -34,6 +34,8 @@ "TemporalExtent", "Summaries", "CommonMetadata", + "NoDataStrings", + "DataType", "RangeSummary", "Item", "Asset", @@ -81,7 +83,7 @@ SpatialExtent, TemporalExtent, ) -from pystac.common_metadata import CommonMetadata +from pystac.common_metadata import CommonMetadata, NoDataStrings, DataType from pystac.summaries import RangeSummary, Summaries from pystac.asset import Asset from pystac.item import Item diff --git a/core/pystac/common_metadata.py b/core/pystac/common_metadata.py index 4dac97dae..8a842743c 100644 --- a/core/pystac/common_metadata.py +++ b/core/pystac/common_metadata.py @@ -16,6 +16,31 @@ P = TypeVar("P") +class DataType(utils.StringEnum): + INT8 = "int8" + INT16 = "int16" + INT32 = "int32" + INT64 = "int64" + UINT8 = "uint8" + UINT16 = "uint16" + UINT32 = "uint32" + UINT64 = "uint64" + FLOAT16 = "float16" + FLOAT32 = "float32" + FLOAT64 = "float64" + CINT16 = "cint16" + CINT32 = "cint32" + CFLOAT32 = "cfloat32" + CFLOAT64 = "cfloat64" + OTHER = "other" + + +class NoDataStrings(utils.StringEnum): + INF = "inf" + NINF = "-inf" + NAN = "nan" + + class CommonMetadata: """Object containing fields that are not included in core item schema but are still commonly used. All attributes are defined within the properties of diff --git a/extensions/datacube/README.md b/extensions/datacube/README.md index 008278573..801e7594a 100644 --- a/extensions/datacube/README.md +++ b/extensions/datacube/README.md @@ -5,9 +5,10 @@ This extension describes datasets that are organized as multi-dimensional datacu ## Supported versions +- [v2.3.0](https://stac-extensions.github.io/datacube/v2.3.0/schema.json) - [v2.2.0](https://stac-extensions.github.io/datacube/v2.2.0/schema.json) ## Versioning This package's version corresponds to the version of the extension specification it targets. -When we release updates to the package code without changing the target extension version, we use [post releases](https://packaging.python.org/en/latest/discussions/versioning/#post-releases), e.g. `2.2.0.post1`. +When we release updates to the package code without changing the target extension version, we use [post releases](https://packaging.python.org/en/latest/discussions/versioning/#post-releases), e.g. `2.3.0.post1`. diff --git a/extensions/datacube/pyproject.toml b/extensions/datacube/pyproject.toml index e08fba072..20a3c77b0 100644 --- a/extensions/datacube/pyproject.toml +++ b/extensions/datacube/pyproject.toml @@ -2,7 +2,7 @@ name = "pystac-ext-datacube" description = "Datacube extension for PySTAC" readme = "README.md" -version = "2.2.0" +version = "2.3.0" authors = [] maintainers = [] keywords = ["pystac", "imagery", "raster", "catalog", "STAC", "datacube"] diff --git a/extensions/datacube/pystac/extensions/datacube.py b/extensions/datacube/pystac/extensions/datacube.py index 2424451e2..9f7649843 100644 --- a/extensions/datacube/pystac/extensions/datacube.py +++ b/extensions/datacube/pystac/extensions/datacube.py @@ -17,7 +17,14 @@ "T", pystac.Collection, pystac.Item, pystac.Asset, pystac.ItemAssetDefinition ) -SCHEMA_URI = "https://stac-extensions.github.io/datacube/v2.2.0/schema.json" +SCHEMA_URI = "https://stac-extensions.github.io/datacube/v2.3.0/schema.json" +SCHEMA_URIS = [ + "https://stac-extensions.github.io/datacube/v1.0.0/schema.json", + "https://stac-extensions.github.io/datacube/v2.0.0/schema.json", + "https://stac-extensions.github.io/datacube/v2.1.0/schema.json", + "https://stac-extensions.github.io/datacube/v2.2.0/schema.json", + SCHEMA_URI, +] PREFIX: str = "cube:" DIMENSIONS_PROP = PREFIX + "dimensions" @@ -33,6 +40,7 @@ DIM_REF_SYS_PROP = "reference_system" DIM_UNIT_PROP = "unit" + # Variable properties VAR_TYPE_PROP = "type" VAR_DESC_PROP = "description" @@ -40,6 +48,8 @@ VAR_VALUES_PROP = "values" VAR_DIMENSIONS_PROP = "dimensions" VAR_UNIT_PROP = "unit" +VAR_NODATA_PROP = "nodata" +VAR_DATA_TYPE_PROP = "data_type" class DimensionType(StringEnum): @@ -543,6 +553,35 @@ def unit(self, v: str | None) -> None: else: self.properties[VAR_UNIT_PROP] = v + @property + def nodata(self) -> pystac.NoDataStrings | float | None: + """Value used to identify no-data, + see `common metadata + `__ + for more details.""" + return self.properties.get(VAR_NODATA_PROP) + + @nodata.setter + def nodata(self, v: pystac.NoDataStrings | float | None) -> None: + if v is None: + self.properties.pop(VAR_NODATA_PROP, None) + else: + self.properties[VAR_NODATA_PROP] = v + + @property + def data_type(self) -> pystac.DataType | None: + """The data type of the values in the datacube, see `common metadata + `__ + for more details.""" + return self.properties.get(VAR_DATA_TYPE_PROP) + + @data_type.setter + def data_type(self, v: pystac.DataType | None) -> None: + if v is None: + self.properties.pop(VAR_DATA_TYPE_PROP, None) + else: + self.properties[VAR_DATA_TYPE_PROP] = v + @staticmethod def from_dict(d: dict[str, Any]) -> Variable: return Variable(d) @@ -734,9 +773,7 @@ class DatacubeExtensionHooks(ExtensionHooks): schema_uri: str = SCHEMA_URI prev_extension_ids = { "datacube", - "https://stac-extensions.github.io/datacube/v1.0.0/schema.json", - "https://stac-extensions.github.io/datacube/v2.0.0/schema.json", - "https://stac-extensions.github.io/datacube/v2.1.0/schema.json", + *[uri for uri in SCHEMA_URIS if uri != SCHEMA_URI], } stac_object_types = { pystac.STACObjectType.COLLECTION, diff --git a/extensions/datacube/tests/cassettes/test_datacube/test_set_dimensions.yaml b/extensions/datacube/tests/cassettes/test_datacube/test_set_dimensions.yaml index 692e8b66a..9b8a09095 100644 --- a/extensions/datacube/tests/cassettes/test_datacube/test_set_dimensions.yaml +++ b/extensions/datacube/tests/cassettes/test_datacube/test_set_dimensions.yaml @@ -197,4 +197,216 @@ interactions: status: code: 200 message: OK +- request: + body: null + headers: {} + method: GET + uri: https://stac-extensions.github.io/datacube/v2.3.0/schema.json + response: + body: + string: "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": + \"https://stac-extensions.github.io/datacube/v2.3.0/schema.json\",\n \"title\": + \"Datacube Extension\",\n \"description\": \"STAC Datacube Extension for + STAC Items and STAC Collections.\",\n \"oneOf\": [\n {\n \"$comment\": + \"This is the schema for STAC Items.\",\n \"allOf\": [\n {\n \"type\": + \"object\",\n \"required\": [\n \"type\"\n ],\n + \ \"properties\": {\n \"type\": {\n \"const\": + \"Feature\"\n }\n }\n },\n {\n \"$ref\": + \"#/definitions/stac_extensions\"\n }\n ],\n \"anyOf\": [\n + \ {\n \"type\": \"object\",\n \"required\": [\n \"properties\"\n + \ ],\n \"properties\": {\n \"properties\": {\n + \ \"allOf\": [\n {\n \"$ref\": + \"#/definitions/require_field\"\n },\n {\n \"$ref\": + \"#/definitions/fields\"\n }\n ]\n }\n + \ }\n },\n {\n \"$comment\": \"This validates + the fields in Item Assets.\",\n \"required\": [\n \"assets\"\n + \ ],\n \"properties\": {\n \"assets\": {\n \"type\": + \"object\",\n \"not\": {\n \"additionalProperties\": + {\n \"not\": {\n \"allOf\": [\n {\n + \ \"$ref\": \"#/definitions/require_field\"\n },\n + \ {\n \"$ref\": \"#/definitions/fields\"\n + \ }\n ]\n }\n }\n + \ }\n }\n }\n }\n ]\n },\n + \ {\n \"$comment\": \"This is the schema for STAC Collections.\",\n + \ \"type\": \"object\",\n \"allOf\": [\n {\n \"required\": + [\n \"type\"\n ],\n \"properties\": {\n \"type\": + {\n \"const\": \"Collection\"\n }\n }\n },\n + \ {\n \"$ref\": \"#/definitions/stac_extensions\"\n }\n + \ ],\n \"anyOf\": [\n {\n \"$comment\": \"This is + the schema for the top-level fields in a Collection.\",\n \"allOf\": + [\n {\n \"$ref\": \"#/definitions/require_field\"\n + \ },\n {\n \"$ref\": \"#/definitions/fields\"\n + \ }\n ]\n },\n {\n \"$comment\": + \"This validates the fields in Collection Assets.\",\n \"required\": + [\n \"assets\"\n ],\n \"properties\": {\n \"assets\": + {\n \"type\": \"object\",\n \"not\": {\n \"additionalProperties\": + {\n \"not\": {\n \"allOf\": [\n {\n + \ \"$ref\": \"#/definitions/require_field\"\n },\n + \ {\n \"$ref\": \"#/definitions/fields\"\n + \ }\n ]\n }\n }\n + \ }\n }\n }\n },\n {\n \"$comment\": + \"This is the schema for the fields in Item Asset Definitions.\",\n \"required\": + [\n \"item_assets\"\n ],\n \"properties\": {\n + \ \"item_assets\": {\n \"type\": \"object\",\n \"not\": + {\n \"additionalProperties\": {\n \"not\": + {\n \"allOf\": [\n {\n \"$ref\": + \"#/definitions/require_any_field\"\n },\n {\n + \ \"$ref\": \"#/definitions/fields\"\n }\n + \ ]\n }\n }\n }\n + \ }\n }\n },\n {\n \"$comment\": + \"This is the schema for the fields in Summaries. By default, only checks + the existance of the properties, but not the schema of the summaries.\",\n + \ \"required\": [\n \"summaries\"\n ],\n \"properties\": + {\n \"summaries\": {\n \"$ref\": \"#/definitions/require_any_field\"\n + \ }\n }\n }\n ]\n }\n ],\n \"definitions\": + {\n \"stac_extensions\": {\n \"type\": \"object\",\n \"required\": + [\n \"stac_extensions\"\n ],\n \"properties\": {\n \"stac_extensions\": + {\n \"type\": \"array\",\n \"contains\": {\n \"const\": + \"https://stac-extensions.github.io/datacube/v2.3.0/schema.json\"\n }\n + \ }\n }\n },\n \"require_any_field\": {\n \"$comment\": + \"Please list all fields here so that we can force the existance of one of + them in other parts of the schemas.\",\n \"anyOf\": [\n {\"required\": + [\"cube:dimensions\"]},\n {\"required\": [\"cube:variables\"]}\n ]\n + \ },\n \"require_field\": {\n \"required\": [\n \"cube:dimensions\"\n + \ ]\n },\n \"fields\": {\n \"$comment\": \"Add your new fields + here. Don't require them here, do that above in the corresponding schema.\",\n + \ \"type\": \"object\",\n \"properties\": {\n \"cube:dimensions\": + {\n \"$ref\": \"#/definitions/cube:dimensions\"\n },\n \"cube:variables\": + {\n \"$ref\": \"#/definitions/cube:variables\"\n }\n },\n + \ \"patternProperties\": {\n \"^(?!cube:)\": {}\n },\n \"additionalProperties\": + false\n },\n \"cube:dimensions\": {\n \"type\": \"object\",\n \"additionalProperties\": + {\n \"anyOf\": [\n {\n \"$ref\": \"#/definitions/vector_dimension\"\n + \ },\n {\n \"$ref\": \"#/definitions/horizontal_spatial_dimension\"\n + \ },\n {\n \"$ref\": \"#/definitions/vertical_spatial_dimension\"\n + \ },\n {\n \"$ref\": \"#/definitions/temporal_dimension\"\n + \ },\n {\n \"$ref\": \"#/definitions/additional_dimension\"\n + \ }\n ]\n }\n },\n \"cube:variables\": {\n \"type\": + \"object\",\n \"additionalProperties\": {\n \"$ref\": \"#/definitions/variable\"\n + \ }\n },\n \"additional_dimension\": {\n \"title\": \"Additional + Dimension Object\",\n \"type\": \"object\",\n \"anyOf\": [\n {\n + \ \"required\": [\n \"type\",\n \"extent\"\n + \ ]\n },\n {\n \"required\": [\n \"type\",\n + \ \"values\"\n ]\n }\n ],\n \"not\": {\n + \ \"required\": [\n \"axis\"\n ]\n },\n \"properties\": + {\n \"type\": {\n \"type\": \"string\",\n \"not\": + {\n \"enum\": [\n \"spatial\",\n \"geometry\"\n + \ ]\n }\n },\n \"description\": {\n \"$ref\": + \"#/definitions/description\"\n },\n \"extent\": {\n \"$ref\": + \"#/definitions/extent_open\"\n },\n \"values\": {\n \"$ref\": + \"#/definitions/values\"\n },\n \"step\": {\n \"$ref\": + \"#/definitions/step\"\n },\n \"unit\": {\n \"$ref\": + \"#/definitions/unit\"\n },\n \"reference_system\": {\n \"type\": + \"string\"\n },\n \"dimensions\": {\n \"type\": \"array\",\n + \ \"items\": {\n \"type\": [\n \"string\"\n + \ ]\n }\n }\n }\n },\n \"horizontal_spatial_dimension\": + {\n \"title\": \"Horizontal Spatial Raster Dimension Object\",\n \"type\": + \"object\",\n \"required\": [\n \"type\",\n \"axis\",\n + \ \"extent\"\n ],\n \"properties\": {\n \"type\": {\n + \ \"$ref\": \"#/definitions/type_spatial\"\n },\n \"axis\": + {\n \"$ref\": \"#/definitions/axis_xy\"\n },\n \"description\": + {\n \"$ref\": \"#/definitions/description\"\n },\n \"extent\": + {\n \"$ref\": \"#/definitions/extent_closed\"\n },\n \"values\": + {\n \"$ref\": \"#/definitions/values_numeric\"\n },\n \"step\": + {\n \"$ref\": \"#/definitions/step\"\n },\n \"reference_system\": + {\n \"$ref\": \"#/definitions/reference_system_spatial\"\n }\n + \ }\n },\n \"vertical_spatial_dimension\": {\n \"title\": \"Vertical + Spatial Dimension Object\",\n \"type\": \"object\",\n \"anyOf\": + [\n {\n \"required\": [\n \"type\",\n \"axis\",\n + \ \"extent\"\n ]\n },\n {\n \"required\": + [\n \"type\",\n \"axis\",\n \"values\"\n + \ ]\n }\n ],\n \"properties\": {\n \"type\": + {\n \"$ref\": \"#/definitions/type_spatial\"\n },\n \"axis\": + {\n \"$ref\": \"#/definitions/axis_z\"\n },\n \"description\": + {\n \"$ref\": \"#/definitions/description\"\n },\n \"extent\": + {\n \"$ref\": \"#/definitions/extent_open\"\n },\n \"values\": + {\n \"$ref\": \"#/definitions/values\"\n },\n \"step\": + {\n \"$ref\": \"#/definitions/step\"\n },\n \"unit\": + {\n \"$ref\": \"#/definitions/unit\"\n },\n \"reference_system\": + {\n \"$ref\": \"#/definitions/reference_system_spatial\"\n }\n + \ }\n },\n \"vector_dimension\": {\n \"title\": \"Spatial Vector + Dimension Object\",\n \"type\": \"object\",\n \"required\": [\n + \ \"type\",\n \"bbox\"\n ],\n \"properties\": {\n \"type\": + {\n \"type\": \"string\",\n \"const\": \"geometry\"\n },\n + \ \"axes\": {\n \"type\": \"array\",\n \"uniqueItems\": + true,\n \"items\": {\n \"type\": \"string\",\n \"enum\": + [\n \"x\",\n \"y\",\n \"z\"\n ]\n + \ }\n },\n \"description\": {\n \"$ref\": \"#/definitions/description\"\n + \ },\n \"bbox\": {\n \"title\": \"Spatial extent\",\n + \ \"type\": \"array\",\n \"oneOf\": [\n {\n \"minItems\":4,\n + \ \"maxItems\":4\n },\n {\n \"minItems\":6,\n + \ \"maxItems\":6\n }\n ],\n \"items\": + {\n \"type\": \"number\"\n }\n },\n \"values\": + {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": + {\n \"description\": \"WKT or Identifier\",\n \"type\": + \"string\"\n }\n },\n \"geometry_types\": {\n \"type\": + \"array\",\n \"uniqueItems\": true,\n \"items\": {\n \"type\": + \"string\",\n \"enum\": [\n \"Point\",\n \"MultiPoint\",\n + \ \"LineString\",\n \"MultiLineString\",\n \"Polygon\",\n + \ \"MultiPolygon\",\n \"GeometryCollection\"\n ]\n + \ }\n },\n \"reference_system\": {\n \"$ref\": + \"#/definitions/reference_system_spatial\"\n }\n }\n },\n \"temporal_dimension\": + {\n \"title\": \"Temporal Dimension Object\",\n \"type\": \"object\",\n + \ \"required\": [\n \"type\",\n \"extent\"\n ],\n \"not\": + {\n \"required\": [\n \"axis\"\n ]\n },\n \"properties\": + {\n \"type\": {\n \"type\": \"string\",\n \"const\": + \"temporal\"\n },\n \"description\": {\n \"$ref\": + \"#/definitions/description\"\n },\n \"values\": {\n \"type\": + \"array\",\n \"minItems\": 1,\n \"items\": {\n \"type\": + \"string\"\n }\n },\n \"extent\": {\n \"type\": + \"array\",\n \"minItems\": 2,\n \"maxItems\": 2,\n \"items\": + {\n \"type\": [\n \"string\",\n \"null\"\n + \ ]\n }\n },\n \"step\": {\n \"type\": + [\n \"string\",\n \"null\"\n ]\n }\n + \ }\n },\n \"variable\": {\n \"title\": \"Variable Object\",\n + \ \"type\": \"object\",\n \"required\": [\n \"dimensions\"\n + \ ],\n \"properties\": {\n \"variable_type\": {\n \"type\": + \"string\",\n \"enum\": [\n \"data\",\n \"auxiliary\"\n + \ ]\n },\n \"description\": {\n \"$ref\": \"#/definitions/description\"\n + \ },\n \"dimensions\": {\n \"type\": \"array\",\n \"items\": + {\n \"type\": \"string\"\n }\n },\n \"values\": + {\n \"type\": \"array\",\n \"minItems\": 1\n },\n + \ \"extent\": {\n \"type\": \"array\",\n \"minItems\": + 2,\n \"maxItems\": 2,\n \"items\": {\n \"type\": + [\n \"string\",\n \"number\",\n \"null\"\n + \ ]\n }\n },\n \"unit\": {\n \"$ref\": + \"#/definitions/unit\"\n },\n \"nodata\": {\n \"$ref\": + \"#/definitions/nodata\"\n },\n \"data_type\": {\n \"$ref\": + \"#/definitions/data_type\"\n }\n }\n },\n \"type_spatial\": + {\n \"type\": \"string\",\n \"const\": \"spatial\"\n },\n \"axis_xy\": + {\n \"type\": \"string\",\n \"enum\": [\n \"x\",\n \"y\"\n + \ ]\n },\n \"axis_z\": {\n \"type\": \"string\",\n \"const\": + \"z\"\n },\n \"extent_closed\": {\n \"type\": \"array\",\n \"minItems\": + 2,\n \"maxItems\": 2,\n \"items\": {\n \"type\": \"number\"\n + \ }\n },\n \"extent_open\": {\n \"type\": \"array\",\n \"minItems\": + 2,\n \"maxItems\": 2,\n \"items\": {\n \"type\": [\n \"number\",\n + \ \"null\"\n ]\n }\n },\n \"values_numeric\": {\n + \ \"type\": \"array\",\n \"minItems\": 1,\n \"items\": {\n \"type\": + \"number\"\n }\n },\n \"values\": {\n \"type\": \"array\",\n + \ \"minItems\": 1,\n \"items\": {\n \"oneOf\": [\n {\n + \ \"type\": \"number\"\n },\n {\n \"type\": + \"string\"\n }\n ]\n }\n },\n \"step\": {\n \"type\": + [\n \"number\",\n \"null\"\n ]\n },\n \"unit\": {\n + \ \"$comment\": \"The schema is from common metadata, see https://github.com/radiantearth/stac-spec/blob/v1.1.0/item-spec/json-schema/data-values.json\",\n + \ \"type\": \"string\"\n },\n \"data_type\": {\n \"$comment\": + \"The schema is from common metadata, see https://github.com/radiantearth/stac-spec/blob/v1.1.0/item-spec/json-schema/data-values.json\",\n + \ \"type\": \"string\",\n \"enum\": [\n \"int8\",\n \"int16\",\n + \ \"int32\",\n \"int64\",\n \"uint8\",\n \"uint16\",\n + \ \"uint32\",\n \"uint64\",\n \"float16\",\n \"float32\",\n + \ \"float64\",\n \"cint16\",\n \"cint32\",\n \"cfloat32\",\n + \ \"cfloat64\",\n \"other\"\n ]\n },\n \"nodata\": + {\n \"$comment\": \"The schema is from common metadata, see https://github.com/radiantearth/stac-spec/blob/v1.1.0/item-spec/json-schema/data-values.json\",\n + \ \"oneOf\": [\n {\n \"type\": \"number\"\n },\n + \ {\n \"type\": \"string\",\n \"enum\": [\n \"nan\",\n + \ \"inf\",\n \"-inf\"\n ]\n }\n ]\n + \ },\n \"reference_system_spatial\": {\n \"oneOf\": [\n {\n + \ \"description\": \"WKT2\",\n \"type\": \"string\"\n },\n + \ {\n \"description\": \"EPSG code\",\n \"type\": + \"integer\",\n \"minimum\": 0\n },\n {\n \"$ref\": + \"https://proj.org/schemas/v0.7/projjson.schema.json\"\n }\n ],\n + \ \"default\": 4326\n },\n \"description\": {\n \"type\": \"string\"\n + \ }\n }\n}\n" + headers: {} + status: + code: 200 + message: OK version: 1 diff --git a/extensions/datacube/tests/cassettes/test_datacube/test_set_variables.yaml b/extensions/datacube/tests/cassettes/test_datacube/test_set_variables.yaml index 2d844e2a2..d268ac918 100644 --- a/extensions/datacube/tests/cassettes/test_datacube/test_set_variables.yaml +++ b/extensions/datacube/tests/cassettes/test_datacube/test_set_variables.yaml @@ -666,4 +666,761 @@ interactions: status: code: 200 message: OK +- request: + body: null + headers: {} + method: GET + uri: https://stac-extensions.github.io/datacube/v2.3.0/schema.json + response: + body: + string: "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": + \"https://stac-extensions.github.io/datacube/v2.3.0/schema.json\",\n \"title\": + \"Datacube Extension\",\n \"description\": \"STAC Datacube Extension for + STAC Items and STAC Collections.\",\n \"oneOf\": [\n {\n \"$comment\": + \"This is the schema for STAC Items.\",\n \"allOf\": [\n {\n \"type\": + \"object\",\n \"required\": [\n \"type\"\n ],\n + \ \"properties\": {\n \"type\": {\n \"const\": + \"Feature\"\n }\n }\n },\n {\n \"$ref\": + \"#/definitions/stac_extensions\"\n }\n ],\n \"anyOf\": [\n + \ {\n \"type\": \"object\",\n \"required\": [\n \"properties\"\n + \ ],\n \"properties\": {\n \"properties\": {\n + \ \"allOf\": [\n {\n \"$ref\": + \"#/definitions/require_field\"\n },\n {\n \"$ref\": + \"#/definitions/fields\"\n }\n ]\n }\n + \ }\n },\n {\n \"$comment\": \"This validates + the fields in Item Assets.\",\n \"required\": [\n \"assets\"\n + \ ],\n \"properties\": {\n \"assets\": {\n \"type\": + \"object\",\n \"not\": {\n \"additionalProperties\": + {\n \"not\": {\n \"allOf\": [\n {\n + \ \"$ref\": \"#/definitions/require_field\"\n },\n + \ {\n \"$ref\": \"#/definitions/fields\"\n + \ }\n ]\n }\n }\n + \ }\n }\n }\n }\n ]\n },\n + \ {\n \"$comment\": \"This is the schema for STAC Collections.\",\n + \ \"type\": \"object\",\n \"allOf\": [\n {\n \"required\": + [\n \"type\"\n ],\n \"properties\": {\n \"type\": + {\n \"const\": \"Collection\"\n }\n }\n },\n + \ {\n \"$ref\": \"#/definitions/stac_extensions\"\n }\n + \ ],\n \"anyOf\": [\n {\n \"$comment\": \"This is + the schema for the top-level fields in a Collection.\",\n \"allOf\": + [\n {\n \"$ref\": \"#/definitions/require_field\"\n + \ },\n {\n \"$ref\": \"#/definitions/fields\"\n + \ }\n ]\n },\n {\n \"$comment\": + \"This validates the fields in Collection Assets.\",\n \"required\": + [\n \"assets\"\n ],\n \"properties\": {\n \"assets\": + {\n \"type\": \"object\",\n \"not\": {\n \"additionalProperties\": + {\n \"not\": {\n \"allOf\": [\n {\n + \ \"$ref\": \"#/definitions/require_field\"\n },\n + \ {\n \"$ref\": \"#/definitions/fields\"\n + \ }\n ]\n }\n }\n + \ }\n }\n }\n },\n {\n \"$comment\": + \"This is the schema for the fields in Item Asset Definitions.\",\n \"required\": + [\n \"item_assets\"\n ],\n \"properties\": {\n + \ \"item_assets\": {\n \"type\": \"object\",\n \"not\": + {\n \"additionalProperties\": {\n \"not\": + {\n \"allOf\": [\n {\n \"$ref\": + \"#/definitions/require_any_field\"\n },\n {\n + \ \"$ref\": \"#/definitions/fields\"\n }\n + \ ]\n }\n }\n }\n + \ }\n }\n },\n {\n \"$comment\": + \"This is the schema for the fields in Summaries. By default, only checks + the existance of the properties, but not the schema of the summaries.\",\n + \ \"required\": [\n \"summaries\"\n ],\n \"properties\": + {\n \"summaries\": {\n \"$ref\": \"#/definitions/require_any_field\"\n + \ }\n }\n }\n ]\n }\n ],\n \"definitions\": + {\n \"stac_extensions\": {\n \"type\": \"object\",\n \"required\": + [\n \"stac_extensions\"\n ],\n \"properties\": {\n \"stac_extensions\": + {\n \"type\": \"array\",\n \"contains\": {\n \"const\": + \"https://stac-extensions.github.io/datacube/v2.3.0/schema.json\"\n }\n + \ }\n }\n },\n \"require_any_field\": {\n \"$comment\": + \"Please list all fields here so that we can force the existance of one of + them in other parts of the schemas.\",\n \"anyOf\": [\n {\"required\": + [\"cube:dimensions\"]},\n {\"required\": [\"cube:variables\"]}\n ]\n + \ },\n \"require_field\": {\n \"required\": [\n \"cube:dimensions\"\n + \ ]\n },\n \"fields\": {\n \"$comment\": \"Add your new fields + here. Don't require them here, do that above in the corresponding schema.\",\n + \ \"type\": \"object\",\n \"properties\": {\n \"cube:dimensions\": + {\n \"$ref\": \"#/definitions/cube:dimensions\"\n },\n \"cube:variables\": + {\n \"$ref\": \"#/definitions/cube:variables\"\n }\n },\n + \ \"patternProperties\": {\n \"^(?!cube:)\": {}\n },\n \"additionalProperties\": + false\n },\n \"cube:dimensions\": {\n \"type\": \"object\",\n \"additionalProperties\": + {\n \"anyOf\": [\n {\n \"$ref\": \"#/definitions/vector_dimension\"\n + \ },\n {\n \"$ref\": \"#/definitions/horizontal_spatial_dimension\"\n + \ },\n {\n \"$ref\": \"#/definitions/vertical_spatial_dimension\"\n + \ },\n {\n \"$ref\": \"#/definitions/temporal_dimension\"\n + \ },\n {\n \"$ref\": \"#/definitions/additional_dimension\"\n + \ }\n ]\n }\n },\n \"cube:variables\": {\n \"type\": + \"object\",\n \"additionalProperties\": {\n \"$ref\": \"#/definitions/variable\"\n + \ }\n },\n \"additional_dimension\": {\n \"title\": \"Additional + Dimension Object\",\n \"type\": \"object\",\n \"anyOf\": [\n {\n + \ \"required\": [\n \"type\",\n \"extent\"\n + \ ]\n },\n {\n \"required\": [\n \"type\",\n + \ \"values\"\n ]\n }\n ],\n \"not\": {\n + \ \"required\": [\n \"axis\"\n ]\n },\n \"properties\": + {\n \"type\": {\n \"type\": \"string\",\n \"not\": + {\n \"enum\": [\n \"spatial\",\n \"geometry\"\n + \ ]\n }\n },\n \"description\": {\n \"$ref\": + \"#/definitions/description\"\n },\n \"extent\": {\n \"$ref\": + \"#/definitions/extent_open\"\n },\n \"values\": {\n \"$ref\": + \"#/definitions/values\"\n },\n \"step\": {\n \"$ref\": + \"#/definitions/step\"\n },\n \"unit\": {\n \"$ref\": + \"#/definitions/unit\"\n },\n \"reference_system\": {\n \"type\": + \"string\"\n },\n \"dimensions\": {\n \"type\": \"array\",\n + \ \"items\": {\n \"type\": [\n \"string\"\n + \ ]\n }\n }\n }\n },\n \"horizontal_spatial_dimension\": + {\n \"title\": \"Horizontal Spatial Raster Dimension Object\",\n \"type\": + \"object\",\n \"required\": [\n \"type\",\n \"axis\",\n + \ \"extent\"\n ],\n \"properties\": {\n \"type\": {\n + \ \"$ref\": \"#/definitions/type_spatial\"\n },\n \"axis\": + {\n \"$ref\": \"#/definitions/axis_xy\"\n },\n \"description\": + {\n \"$ref\": \"#/definitions/description\"\n },\n \"extent\": + {\n \"$ref\": \"#/definitions/extent_closed\"\n },\n \"values\": + {\n \"$ref\": \"#/definitions/values_numeric\"\n },\n \"step\": + {\n \"$ref\": \"#/definitions/step\"\n },\n \"reference_system\": + {\n \"$ref\": \"#/definitions/reference_system_spatial\"\n }\n + \ }\n },\n \"vertical_spatial_dimension\": {\n \"title\": \"Vertical + Spatial Dimension Object\",\n \"type\": \"object\",\n \"anyOf\": + [\n {\n \"required\": [\n \"type\",\n \"axis\",\n + \ \"extent\"\n ]\n },\n {\n \"required\": + [\n \"type\",\n \"axis\",\n \"values\"\n + \ ]\n }\n ],\n \"properties\": {\n \"type\": + {\n \"$ref\": \"#/definitions/type_spatial\"\n },\n \"axis\": + {\n \"$ref\": \"#/definitions/axis_z\"\n },\n \"description\": + {\n \"$ref\": \"#/definitions/description\"\n },\n \"extent\": + {\n \"$ref\": \"#/definitions/extent_open\"\n },\n \"values\": + {\n \"$ref\": \"#/definitions/values\"\n },\n \"step\": + {\n \"$ref\": \"#/definitions/step\"\n },\n \"unit\": + {\n \"$ref\": \"#/definitions/unit\"\n },\n \"reference_system\": + {\n \"$ref\": \"#/definitions/reference_system_spatial\"\n }\n + \ }\n },\n \"vector_dimension\": {\n \"title\": \"Spatial Vector + Dimension Object\",\n \"type\": \"object\",\n \"required\": [\n + \ \"type\",\n \"bbox\"\n ],\n \"properties\": {\n \"type\": + {\n \"type\": \"string\",\n \"const\": \"geometry\"\n },\n + \ \"axes\": {\n \"type\": \"array\",\n \"uniqueItems\": + true,\n \"items\": {\n \"type\": \"string\",\n \"enum\": + [\n \"x\",\n \"y\",\n \"z\"\n ]\n + \ }\n },\n \"description\": {\n \"$ref\": \"#/definitions/description\"\n + \ },\n \"bbox\": {\n \"title\": \"Spatial extent\",\n + \ \"type\": \"array\",\n \"oneOf\": [\n {\n \"minItems\":4,\n + \ \"maxItems\":4\n },\n {\n \"minItems\":6,\n + \ \"maxItems\":6\n }\n ],\n \"items\": + {\n \"type\": \"number\"\n }\n },\n \"values\": + {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": + {\n \"description\": \"WKT or Identifier\",\n \"type\": + \"string\"\n }\n },\n \"geometry_types\": {\n \"type\": + \"array\",\n \"uniqueItems\": true,\n \"items\": {\n \"type\": + \"string\",\n \"enum\": [\n \"Point\",\n \"MultiPoint\",\n + \ \"LineString\",\n \"MultiLineString\",\n \"Polygon\",\n + \ \"MultiPolygon\",\n \"GeometryCollection\"\n ]\n + \ }\n },\n \"reference_system\": {\n \"$ref\": + \"#/definitions/reference_system_spatial\"\n }\n }\n },\n \"temporal_dimension\": + {\n \"title\": \"Temporal Dimension Object\",\n \"type\": \"object\",\n + \ \"required\": [\n \"type\",\n \"extent\"\n ],\n \"not\": + {\n \"required\": [\n \"axis\"\n ]\n },\n \"properties\": + {\n \"type\": {\n \"type\": \"string\",\n \"const\": + \"temporal\"\n },\n \"description\": {\n \"$ref\": + \"#/definitions/description\"\n },\n \"values\": {\n \"type\": + \"array\",\n \"minItems\": 1,\n \"items\": {\n \"type\": + \"string\"\n }\n },\n \"extent\": {\n \"type\": + \"array\",\n \"minItems\": 2,\n \"maxItems\": 2,\n \"items\": + {\n \"type\": [\n \"string\",\n \"null\"\n + \ ]\n }\n },\n \"step\": {\n \"type\": + [\n \"string\",\n \"null\"\n ]\n }\n + \ }\n },\n \"variable\": {\n \"title\": \"Variable Object\",\n + \ \"type\": \"object\",\n \"required\": [\n \"dimensions\"\n + \ ],\n \"properties\": {\n \"variable_type\": {\n \"type\": + \"string\",\n \"enum\": [\n \"data\",\n \"auxiliary\"\n + \ ]\n },\n \"description\": {\n \"$ref\": \"#/definitions/description\"\n + \ },\n \"dimensions\": {\n \"type\": \"array\",\n \"items\": + {\n \"type\": \"string\"\n }\n },\n \"values\": + {\n \"type\": \"array\",\n \"minItems\": 1\n },\n + \ \"extent\": {\n \"type\": \"array\",\n \"minItems\": + 2,\n \"maxItems\": 2,\n \"items\": {\n \"type\": + [\n \"string\",\n \"number\",\n \"null\"\n + \ ]\n }\n },\n \"unit\": {\n \"$ref\": + \"#/definitions/unit\"\n },\n \"nodata\": {\n \"$ref\": + \"#/definitions/nodata\"\n },\n \"data_type\": {\n \"$ref\": + \"#/definitions/data_type\"\n }\n }\n },\n \"type_spatial\": + {\n \"type\": \"string\",\n \"const\": \"spatial\"\n },\n \"axis_xy\": + {\n \"type\": \"string\",\n \"enum\": [\n \"x\",\n \"y\"\n + \ ]\n },\n \"axis_z\": {\n \"type\": \"string\",\n \"const\": + \"z\"\n },\n \"extent_closed\": {\n \"type\": \"array\",\n \"minItems\": + 2,\n \"maxItems\": 2,\n \"items\": {\n \"type\": \"number\"\n + \ }\n },\n \"extent_open\": {\n \"type\": \"array\",\n \"minItems\": + 2,\n \"maxItems\": 2,\n \"items\": {\n \"type\": [\n \"number\",\n + \ \"null\"\n ]\n }\n },\n \"values_numeric\": {\n + \ \"type\": \"array\",\n \"minItems\": 1,\n \"items\": {\n \"type\": + \"number\"\n }\n },\n \"values\": {\n \"type\": \"array\",\n + \ \"minItems\": 1,\n \"items\": {\n \"oneOf\": [\n {\n + \ \"type\": \"number\"\n },\n {\n \"type\": + \"string\"\n }\n ]\n }\n },\n \"step\": {\n \"type\": + [\n \"number\",\n \"null\"\n ]\n },\n \"unit\": {\n + \ \"$comment\": \"The schema is from common metadata, see https://github.com/radiantearth/stac-spec/blob/v1.1.0/item-spec/json-schema/data-values.json\",\n + \ \"type\": \"string\"\n },\n \"data_type\": {\n \"$comment\": + \"The schema is from common metadata, see https://github.com/radiantearth/stac-spec/blob/v1.1.0/item-spec/json-schema/data-values.json\",\n + \ \"type\": \"string\",\n \"enum\": [\n \"int8\",\n \"int16\",\n + \ \"int32\",\n \"int64\",\n \"uint8\",\n \"uint16\",\n + \ \"uint32\",\n \"uint64\",\n \"float16\",\n \"float32\",\n + \ \"float64\",\n \"cint16\",\n \"cint32\",\n \"cfloat32\",\n + \ \"cfloat64\",\n \"other\"\n ]\n },\n \"nodata\": + {\n \"$comment\": \"The schema is from common metadata, see https://github.com/radiantearth/stac-spec/blob/v1.1.0/item-spec/json-schema/data-values.json\",\n + \ \"oneOf\": [\n {\n \"type\": \"number\"\n },\n + \ {\n \"type\": \"string\",\n \"enum\": [\n \"nan\",\n + \ \"inf\",\n \"-inf\"\n ]\n }\n ]\n + \ },\n \"reference_system_spatial\": {\n \"oneOf\": [\n {\n + \ \"description\": \"WKT2\",\n \"type\": \"string\"\n },\n + \ {\n \"description\": \"EPSG code\",\n \"type\": + \"integer\",\n \"minimum\": 0\n },\n {\n \"$ref\": + \"https://proj.org/schemas/v0.7/projjson.schema.json\"\n }\n ],\n + \ \"default\": 4326\n },\n \"description\": {\n \"type\": \"string\"\n + \ }\n }\n}\n" + headers: {} + status: + code: 200 + message: OK +- request: + body: null + headers: {} + method: GET + uri: https://proj.org/schemas/v0.7/projjson.schema.json + response: + body: + string: '' + headers: + Location: + - https://proj.org/en/latest/schemas/v0.7/projjson.schema.json + status: + code: 302 + message: Found +- request: + body: null + headers: {} + method: GET + uri: https://proj.org/en/latest/schemas/v0.7/projjson.schema.json + response: + body: + string: "{\n \"$id\": \"https://proj.org/schemas/v0.7/projjson.schema.json\",\n + \ \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"description\": + \"Schema for PROJJSON (v0.7)\",\n \"$comment\": \"This document is copyright + Even Rouault and PROJ contributors, 2019-2023, and subject to the MIT license. + This file exists both in data/ and in schemas/vXXX/. Keep both in sync. And + if changing the value of $id, change PROJJSON_DEFAULT_VERSION accordingly + in io.cpp\",\n\n \"oneOf\": [\n { \"$ref\": \"#/definitions/crs\" },\n + \ { \"$ref\": \"#/definitions/datum\" },\n { \"$ref\": \"#/definitions/datum_ensemble\" + },\n { \"$ref\": \"#/definitions/ellipsoid\" },\n { \"$ref\": \"#/definitions/prime_meridian\" + },\n { \"$ref\": \"#/definitions/single_operation\" },\n { \"$ref\": + \"#/definitions/concatenated_operation\" },\n { \"$ref\": \"#/definitions/coordinate_metadata\" + }\n ],\n\n \"definitions\": {\n\n \"abridged_transformation\": {\n \"type\": + \"object\",\n \"properties\": {\n \"$schema\" : { \"type\": \"string\" + },\n \"type\": { \"type\": \"string\", \"enum\": [\"AbridgedTransformation\"] + },\n \"name\": { \"type\": \"string\" },\n \"source_crs\": {\n + \ \"$ref\": \"#/definitions/crs\",\n \"$comment\": \"Only + present when the source_crs of the bound_crs does not match the source_crs + of the AbridgedTransformation. No equivalent in WKT\"\n },\n \"method\": + { \"$ref\": \"#/definitions/method\" },\n \"parameters\": {\n \"type\": + \"array\",\n \"items\": { \"$ref\": \"#/definitions/parameter_value\" + }\n },\n \"id\": { \"$ref\": \"#/definitions/id\" },\n \"ids\": + { \"$ref\": \"#/definitions/ids\" }\n },\n \"required\" : [ \"name\", + \"method\", \"parameters\" ],\n \"allOf\": [\n { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" + }\n ],\n \"additionalProperties\": false\n },\n\n \"axis\": + {\n \"type\": \"object\",\n \"properties\": {\n \"$schema\" + : { \"type\": \"string\" },\n \"type\": { \"type\": \"string\", \"enum\": + [\"Axis\"] },\n \"name\": { \"type\": \"string\" },\n \"abbreviation\": + { \"type\": \"string\" },\n \"direction\": { \"type\": \"string\",\n + \ \"enum\": [ \"north\",\n \"northNorthEast\",\n + \ \"northEast\",\n \"eastNorthEast\",\n + \ \"east\",\n \"eastSouthEast\",\n + \ \"southEast\",\n \"southSouthEast\",\n + \ \"south\",\n \"southSouthWest\",\n + \ \"southWest\",\n \"westSouthWest\",\n + \ \"west\",\n \"westNorthWest\",\n + \ \"northWest\",\n \"northNorthWest\",\n + \ \"up\",\n \"down\",\n + \ \"geocentricX\",\n \"geocentricY\",\n + \ \"geocentricZ\",\n \"columnPositive\",\n + \ \"columnNegative\",\n \"rowPositive\",\n + \ \"rowNegative\",\n \"displayRight\",\n + \ \"displayLeft\",\n \"displayUp\",\n + \ \"displayDown\",\n \"forward\",\n + \ \"aft\",\n \"port\",\n + \ \"starboard\",\n \"clockwise\",\n + \ \"counterClockwise\",\n \"towards\",\n + \ \"awayFrom\",\n \"future\",\n + \ \"past\",\n \"unspecified\" + ] },\n \"meridian\": { \"$ref\": \"#/definitions/meridian\" },\n \"unit\": + { \"$ref\": \"#/definitions/unit\" },\n \"minimum_value\": { \"type\": + \"number\" },\n \"maximum_value\": { \"type\": \"number\" },\n \"range_meaning\": + { \"type\": \"string\", \"enum\": [ \"exact\", \"wraparound\"] },\n \"id\": + { \"$ref\": \"#/definitions/id\" },\n \"ids\": { \"$ref\": \"#/definitions/ids\" + }\n },\n \"required\" : [ \"name\", \"abbreviation\", \"direction\" + ],\n \"allOf\": [\n { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" + }\n ],\n \"additionalProperties\": false\n },\n\n \"bbox\": + {\n \"type\": \"object\",\n \"properties\": {\n \"east_longitude\": + { \"type\": \"number\" },\n \"west_longitude\": { \"type\": \"number\" + },\n \"south_latitude\": { \"type\": \"number\" },\n \"north_latitude\": + { \"type\": \"number\" }\n },\n \"required\" : [ \"east_longitude\", + \"west_longitude\",\n \"south_latitude\", \"north_latitude\" + ],\n \"additionalProperties\": false\n },\n\n \"bound_crs\": {\n + \ \"type\": \"object\",\n \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" + }],\n \"properties\": {\n \"$schema\" : { \"type\": \"string\" + },\n \"type\": { \"type\": \"string\", \"enum\": [\"BoundCRS\"] },\n + \ \"name\": { \"type\": \"string\" },\n \"source_crs\": { \"$ref\": + \"#/definitions/crs\" },\n \"target_crs\": { \"$ref\": \"#/definitions/crs\" + },\n \"transformation\": { \"$ref\": \"#/definitions/abridged_transformation\" + },\n \"scope\": {},\n \"area\": {},\n \"bbox\": {},\n + \ \"vertical_extent\": {},\n \"temporal_extent\": {},\n \"usages\": + {},\n \"remarks\": {},\n \"id\": {}, \"ids\": {}\n },\n + \ \"required\" : [ \"source_crs\", \"target_crs\", \"transformation\" ],\n + \ \"additionalProperties\": false\n },\n\n \"compound_crs\": {\n + \ \"type\": \"object\",\n \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" + }],\n \"properties\": {\n \"type\": { \"type\": \"string\", \"enum\": + [\"CompoundCRS\"] },\n \"name\": { \"type\": \"string\" },\n \"components\": + \ {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/definitions/crs\" + }\n },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": + {},\n \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"components\" ],\n + \ \"additionalProperties\": false\n },\n\n \"concatenated_operation\": + {\n \"type\": \"object\",\n \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" + }],\n \"properties\": {\n \"type\": { \"type\": \"string\", \"enum\": + [\"ConcatenatedOperation\"] },\n \"name\": { \"type\": \"string\" },\n + \ \"source_crs\": { \"$ref\": \"#/definitions/crs\" },\n \"target_crs\": + { \"$ref\": \"#/definitions/crs\" },\n \"steps\": {\n \"type\": + \"array\",\n \"items\": { \"$ref\": \"#/definitions/single_operation\" + }\n },\n \"accuracy\": { \"type\": \"string\" },\n \"$schema\" + : {},\n \"scope\": {},\n \"area\": {},\n \"bbox\": {},\n + \ \"vertical_extent\": {},\n \"temporal_extent\": {},\n \"usages\": + {},\n \"remarks\": {},\n \"id\": {}, \"ids\": {}\n },\n + \ \"required\" : [ \"name\", \"source_crs\", \"target_crs\", \"steps\" + ],\n \"additionalProperties\": false\n },\n\n \"conversion\": {\n + \ \"type\": \"object\",\n \"properties\": {\n \"$schema\" + : { \"type\": \"string\" },\n \"type\": { \"type\": \"string\", \"enum\": + [\"Conversion\"] },\n \"name\": { \"type\": \"string\" },\n \"method\": + { \"$ref\": \"#/definitions/method\" },\n \"parameters\": {\n \"type\": + \"array\",\n \"items\": { \"$ref\": \"#/definitions/parameter_value\" + }\n },\n \"id\": { \"$ref\": \"#/definitions/id\" },\n \"ids\": + { \"$ref\": \"#/definitions/ids\" }\n },\n \"required\" : [ \"name\", + \"method\" ],\n \"allOf\": [\n { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" + }\n ],\n \"additionalProperties\": false\n },\n\n \"coordinate_metadata\": + {\n \"type\": \"object\",\n \"properties\": {\n \"$schema\" + : { \"type\": \"string\" },\n \"type\": { \"type\": \"string\", \"enum\": + [\"CoordinateMetadata\"] },\n \"crs\": { \"$ref\": \"#/definitions/crs\" + },\n \"coordinateEpoch\": { \"type\": \"number\" }\n },\n \"required\" + : [ \"crs\" ],\n \"additionalProperties\": false\n },\n\n \"coordinate_system\": + {\n \"type\": \"object\",\n \"properties\": {\n \"$schema\" + : { \"type\": \"string\" },\n \"type\": { \"type\": \"string\", \"enum\": + [\"CoordinateSystem\"] },\n \"name\": { \"type\": \"string\" },\n \"subtype\": + { \"type\": \"string\",\n \"enum\": [\"Cartesian\",\n + \ \"spherical\",\n \"ellipsoidal\",\n + \ \"vertical\",\n \"ordinal\",\n + \ \"parametric\",\n \"affine\",\n + \ \"TemporalDateTime\",\n \"TemporalCount\",\n + \ \"TemporalMeasure\"] },\n \"axis\": + {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/definitions/axis\" + }\n },\n \"id\": { \"$ref\": \"#/definitions/id\" },\n \"ids\": + { \"$ref\": \"#/definitions/ids\" }\n },\n \"required\" : [ \"subtype\", + \"axis\" ],\n \"allOf\": [\n { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" + }\n ],\n \"additionalProperties\": false\n },\n\n \"crs\": + {\n \"oneOf\": [\n { \"$ref\": \"#/definitions/bound_crs\" },\n + \ { \"$ref\": \"#/definitions/compound_crs\" },\n { \"$ref\": + \"#/definitions/derived_engineering_crs\" },\n { \"$ref\": \"#/definitions/derived_geodetic_crs\" + },\n { \"$ref\": \"#/definitions/derived_parametric_crs\" },\n { + \"$ref\": \"#/definitions/derived_projected_crs\" },\n { \"$ref\": + \"#/definitions/derived_temporal_crs\" },\n { \"$ref\": \"#/definitions/derived_vertical_crs\" + },\n { \"$ref\": \"#/definitions/engineering_crs\" },\n { \"$ref\": + \"#/definitions/geodetic_crs\" },\n { \"$ref\": \"#/definitions/parametric_crs\" + },\n { \"$ref\": \"#/definitions/projected_crs\" },\n { \"$ref\": + \"#/definitions/temporal_crs\" },\n { \"$ref\": \"#/definitions/vertical_crs\" + }\n ]\n },\n\n \"datum\": {\n \"oneOf\": [\n { \"$ref\": + \"#/definitions/geodetic_reference_frame\" },\n { \"$ref\": \"#/definitions/vertical_reference_frame\" + },\n { \"$ref\": \"#/definitions/dynamic_geodetic_reference_frame\" + },\n { \"$ref\": \"#/definitions/dynamic_vertical_reference_frame\" + },\n { \"$ref\": \"#/definitions/temporal_datum\" },\n { \"$ref\": + \"#/definitions/parametric_datum\" },\n { \"$ref\": \"#/definitions/engineering_datum\" + }\n ]\n },\n\n \"datum_ensemble\": {\n \"type\": \"object\",\n + \ \"properties\": {\n \"$schema\" : { \"type\": \"string\" },\n + \ \"type\": { \"type\": \"string\", \"enum\": [\"DatumEnsemble\"] },\n + \ \"name\": { \"type\": \"string\" },\n \"members\": {\n \"type\": + \"array\",\n \"items\": {\n \"type\": \"object\",\n + \ \"properties\": {\n \"name\": { \"type\": + \"string\" },\n \"id\": { \"$ref\": \"#/definitions/id\" + },\n \"ids\": { \"$ref\": \"#/definitions/ids\" }\n },\n + \ \"required\" : [ \"name\" ],\n \"allOf\": [\n + \ { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" + }\n ],\n \"additionalProperties\": false\n }\n + \ },\n \"ellipsoid\": { \"$ref\": \"#/definitions/ellipsoid\" + },\n \"accuracy\": { \"type\": \"string\" },\n \"id\": { \"$ref\": + \"#/definitions/id\" },\n \"ids\": { \"$ref\": \"#/definitions/ids\" + }\n },\n \"required\" : [ \"name\", \"members\", \"accuracy\" ],\n + \ \"allOf\": [\n { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" + }\n ],\n \"additionalProperties\": false\n },\n\n \"deformation_model\": + {\n \"description\": \"Association to a PointMotionOperation\",\n \"type\": + \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" + },\n \"id\": { \"$ref\": \"#/definitions/id\" }\n },\n \"required\" + : [ \"name\" ],\n \"additionalProperties\": false\n },\n\n \"derived_engineering_crs\": + {\n \"type\": \"object\",\n \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" + }],\n \"properties\": {\n \"type\": { \"type\": \"string\",\n + \ \"enum\": [\"DerivedEngineeringCRS\"] },\n \"name\": + { \"type\": \"string\" },\n \"base_crs\": { \"$ref\": \"#/definitions/engineering_crs\" + },\n \"conversion\": { \"$ref\": \"#/definitions/conversion\" },\n + \ \"coordinate_system\": { \"$ref\": \"#/definitions/coordinate_system\" + },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": {},\n + \ \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"base_crs\", \"conversion\", + \"coordinate_system\" ],\n \"additionalProperties\": false\n },\n\n + \ \"derived_geodetic_crs\": {\n \"type\": \"object\",\n \"allOf\": + [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": {\n + \ \"type\": { \"type\": \"string\",\n \"enum\": [\"DerivedGeodeticCRS\",\n + \ \"DerivedGeographicCRS\"] },\n \"name\": + { \"type\": \"string\" },\n \"base_crs\": { \"$ref\": \"#/definitions/geodetic_crs\" + },\n \"conversion\": { \"$ref\": \"#/definitions/conversion\" },\n + \ \"coordinate_system\": { \"$ref\": \"#/definitions/coordinate_system\" + },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": {},\n + \ \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"base_crs\", \"conversion\", + \"coordinate_system\" ],\n \"additionalProperties\": false\n },\n\n + \ \"derived_parametric_crs\": {\n \"type\": \"object\",\n \"allOf\": + [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": {\n + \ \"type\": { \"type\": \"string\",\n \"enum\": [\"DerivedParametricCRS\"] + },\n \"name\": { \"type\": \"string\" },\n \"base_crs\": { \"$ref\": + \"#/definitions/parametric_crs\" },\n \"conversion\": { \"$ref\": \"#/definitions/conversion\" + },\n \"coordinate_system\": { \"$ref\": \"#/definitions/coordinate_system\" + },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": {},\n + \ \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"base_crs\", \"conversion\", + \"coordinate_system\" ],\n \"additionalProperties\": false\n },\n\n + \ \"derived_projected_crs\": {\n \"type\": \"object\",\n \"allOf\": + [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": {\n + \ \"type\": { \"type\": \"string\",\n \"enum\": [\"DerivedProjectedCRS\"] + },\n \"name\": { \"type\": \"string\" },\n \"base_crs\": { \"$ref\": + \"#/definitions/projected_crs\" },\n \"conversion\": { \"$ref\": \"#/definitions/conversion\" + },\n \"coordinate_system\": { \"$ref\": \"#/definitions/coordinate_system\" + },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": {},\n + \ \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"base_crs\", \"conversion\", + \"coordinate_system\" ],\n \"additionalProperties\": false\n },\n\n + \ \"derived_temporal_crs\": {\n \"type\": \"object\",\n \"allOf\": + [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": {\n + \ \"type\": { \"type\": \"string\",\n \"enum\": [\"DerivedTemporalCRS\"] + },\n \"name\": { \"type\": \"string\" },\n \"base_crs\": { \"$ref\": + \"#/definitions/temporal_crs\" },\n \"conversion\": { \"$ref\": \"#/definitions/conversion\" + },\n \"coordinate_system\": { \"$ref\": \"#/definitions/coordinate_system\" + },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": {},\n + \ \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"base_crs\", \"conversion\", + \"coordinate_system\" ],\n \"additionalProperties\": false\n },\n\n + \ \"derived_vertical_crs\": {\n \"type\": \"object\",\n \"allOf\": + [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": {\n + \ \"type\": { \"type\": \"string\",\n \"enum\": [\"DerivedVerticalCRS\"] + },\n \"name\": { \"type\": \"string\" },\n \"base_crs\": { \"$ref\": + \"#/definitions/vertical_crs\" },\n \"conversion\": { \"$ref\": \"#/definitions/conversion\" + },\n \"coordinate_system\": { \"$ref\": \"#/definitions/coordinate_system\" + },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": {},\n + \ \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"base_crs\", \"conversion\", + \"coordinate_system\" ],\n \"additionalProperties\": false\n },\n\n + \ \"dynamic_geodetic_reference_frame\": {\n \"type\": \"object\",\n + \ \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": + {\n \"type\": { \"type\": \"string\", \"enum\": [\"DynamicGeodeticReferenceFrame\"] + },\n \"name\": {},\n \"anchor\": {},\n \"anchor_epoch\": + {},\n \"ellipsoid\": {},\n \"prime_meridian\": {},\n \"frame_reference_epoch\": + { \"type\": \"number\" },\n \"$schema\" : {},\n \"scope\": {},\n + \ \"area\": {},\n \"bbox\": {},\n \"vertical_extent\": + {},\n \"temporal_extent\": {},\n \"usages\": {},\n \"remarks\": + {},\n \"id\": {}, \"ids\": {}\n },\n \"required\" : [ \"name\", + \"ellipsoid\", \"frame_reference_epoch\" ],\n \"additionalProperties\": + false\n },\n\n \"dynamic_vertical_reference_frame\": {\n \"type\": + \"object\",\n \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" + }],\n \"properties\": {\n \"type\": { \"type\": \"string\", \"enum\": + [\"DynamicVerticalReferenceFrame\"] },\n \"name\": {},\n \"anchor\": + {},\n \"anchor_epoch\": {},\n \"frame_reference_epoch\": { \"type\": + \"number\" },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": + {},\n \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"frame_reference_epoch\" + ],\n \"additionalProperties\": false\n },\n\n \"ellipsoid\": {\n + \ \"type\": \"object\",\n \"oneOf\":[\n {\n \"properties\": + {\n \"$schema\" : { \"type\": \"string\" },\n \"type\": + { \"type\": \"string\", \"enum\": [\"Ellipsoid\"] },\n \"name\": + { \"type\": \"string\" },\n \"semi_major_axis\": { \"$ref\": \"#/definitions/value_in_metre_or_value_and_unit\" + },\n \"semi_minor_axis\": { \"$ref\": \"#/definitions/value_in_metre_or_value_and_unit\" + },\n \"id\": { \"$ref\": \"#/definitions/id\" },\n \"ids\": + { \"$ref\": \"#/definitions/ids\" }\n },\n \"required\" + : [ \"name\", \"semi_major_axis\", \"semi_minor_axis\" ],\n \"additionalProperties\": + false\n },\n {\n \"properties\": {\n \"$schema\" + : { \"type\": \"string\" },\n \"type\": { \"type\": \"string\", + \"enum\": [\"Ellipsoid\"] },\n \"name\": { \"type\": \"string\" + },\n \"semi_major_axis\": { \"$ref\": \"#/definitions/value_in_metre_or_value_and_unit\" + },\n \"inverse_flattening\": { \"type\": \"number\" },\n \"id\": + { \"$ref\": \"#/definitions/id\" },\n \"ids\": { \"$ref\": \"#/definitions/ids\" + }\n },\n \"required\" : [ \"name\", \"semi_major_axis\", + \"inverse_flattening\" ],\n \"additionalProperties\": false\n },\n + \ {\n \"properties\": {\n \"$schema\" : { \"type\": + \"string\" },\n \"type\": { \"type\": \"string\", \"enum\": [\"Ellipsoid\"] + },\n \"name\": { \"type\": \"string\" },\n \"radius\": + { \"$ref\": \"#/definitions/value_in_metre_or_value_and_unit\" },\n \"id\": + { \"$ref\": \"#/definitions/id\" },\n \"ids\": { \"$ref\": \"#/definitions/ids\" + }\n },\n \"required\" : [ \"name\", \"radius\" ],\n \"additionalProperties\": + false\n }\n ],\n \"allOf\": [\n { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" + }\n ]\n },\n\n \"engineering_crs\": {\n \"type\": \"object\",\n + \ \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": + {\n \"type\": { \"type\": \"string\", \"enum\": [\"EngineeringCRS\"] + },\n \"name\": { \"type\": \"string\" },\n \"datum\": { \"$ref\": + \"#/definitions/engineering_datum\" },\n \"coordinate_system\": { \"$ref\": + \"#/definitions/coordinate_system\" },\n \"$schema\" : {},\n \"scope\": + {},\n \"area\": {},\n \"bbox\": {},\n \"vertical_extent\": + {},\n \"temporal_extent\": {},\n \"usages\": {},\n \"remarks\": + {},\n \"id\": {}, \"ids\": {}\n },\n \"required\" : [ \"name\", + \"datum\" ],\n \"additionalProperties\": false\n },\n\n \"engineering_datum\": + {\n \"type\": \"object\",\n \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" + }],\n \"properties\": {\n \"type\": { \"type\": \"string\", \"enum\": + [\"EngineeringDatum\"] },\n \"name\": { \"type\": \"string\" },\n \"anchor\": + { \"type\": \"string\" },\n \"$schema\" : {},\n \"scope\": {},\n + \ \"area\": {},\n \"bbox\": {},\n \"vertical_extent\": + {},\n \"temporal_extent\": {},\n \"usages\": {},\n \"remarks\": + {},\n \"id\": {}, \"ids\": {}\n },\n \"required\" : [ \"name\" + ],\n \"additionalProperties\": false\n },\n\n \"geodetic_crs\": + {\n \"type\": \"object\",\n \"properties\": {\n \"type\": + { \"type\": \"string\", \"enum\": [\"GeodeticCRS\", \"GeographicCRS\"] },\n + \ \"name\": { \"type\": \"string\" },\n \"datum\": {\n \"oneOf\": + [\n { \"$ref\": \"#/definitions/geodetic_reference_frame\" + },\n { \"$ref\": \"#/definitions/dynamic_geodetic_reference_frame\" + }\n ]\n },\n \"datum_ensemble\": { \"$ref\": \"#/definitions/datum_ensemble\" + },\n \"coordinate_system\": { \"$ref\": \"#/definitions/coordinate_system\" + },\n \"deformation_models\": {\n \"type\": \"array\",\n \"items\": + { \"$ref\": \"#/definitions/deformation_model\" }\n },\n \"$schema\" + : {},\n \"scope\": {},\n \"area\": {},\n \"bbox\": {},\n + \ \"vertical_extent\": {},\n \"temporal_extent\": {},\n \"usages\": + {},\n \"remarks\": {},\n \"id\": {}, \"ids\": {}\n },\n + \ \"required\" : [ \"name\" ],\n \"description\": \"One and only + one of datum and datum_ensemble must be provided\",\n \"allOf\": [\n + \ { \"$ref\": \"#/definitions/object_usage\" },\n { \"$ref\": + \"#/definitions/one_and_only_one_of_datum_or_datum_ensemble\" }\n ],\n + \ \"additionalProperties\": false\n },\n\n \"geodetic_reference_frame\": + {\n \"type\": \"object\",\n \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" + }],\n \"properties\": {\n \"type\": { \"type\": \"string\", \"enum\": + [\"GeodeticReferenceFrame\"] },\n \"name\": { \"type\": \"string\" + },\n \"anchor\": { \"type\": \"string\" },\n \"anchor_epoch\": + { \"type\": \"number\" },\n \"ellipsoid\": { \"$ref\": \"#/definitions/ellipsoid\" + },\n \"prime_meridian\": { \"$ref\": \"#/definitions/prime_meridian\" + },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": {},\n + \ \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"ellipsoid\" ],\n + \ \"additionalProperties\": false\n },\n\n \"geoid_model\": {\n + \ \"type\": \"object\",\n \"properties\": {\n \"name\": { + \"type\": \"string\" },\n \"interpolation_crs\": { \"$ref\": \"#/definitions/crs\" + },\n \"id\": { \"$ref\": \"#/definitions/id\" }\n },\n \"required\" + : [ \"name\" ],\n \"additionalProperties\": false\n },\n\n \"id\": + {\n \"type\": \"object\",\n \"properties\": {\n \"authority\": + { \"type\": \"string\" },\n \"code\": {\n \"oneOf\": [ { \"type\": + \"string\" }, { \"type\": \"integer\" } ]\n },\n \"version\": + {\n \"oneOf\": [ { \"type\": \"string\" }, { \"type\": \"number\" + } ]\n },\n \"authority_citation\": { \"type\": \"string\" },\n + \ \"uri\": { \"type\": \"string\" }\n },\n \"required\" : + [ \"authority\", \"code\" ],\n \"additionalProperties\": false\n },\n\n + \ \"ids\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/definitions/id\" + }\n },\n\n \"method\": {\n \"type\": \"object\",\n \"properties\": + {\n \"$schema\" : { \"type\": \"string\" },\n \"type\": { \"type\": + \"string\", \"enum\": [\"OperationMethod\"]},\n \"name\": { \"type\": + \"string\" },\n \"id\": { \"$ref\": \"#/definitions/id\" },\n \"ids\": + { \"$ref\": \"#/definitions/ids\" }\n },\n \"required\" : [ \"name\" + ],\n \"allOf\": [\n { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" + }\n ],\n \"additionalProperties\": false\n },\n\n \"id_ids_mutually_exclusive\": + {\n \"not\": {\n \"type\": \"object\",\n \"required\": + [ \"id\", \"ids\" ]\n }\n },\n\n \"one_and_only_one_of_datum_or_datum_ensemble\": + {\n \"allOf\": [\n {\n \"not\": {\n \"type\": + \"object\",\n \"required\": [ \"datum\", \"datum_ensemble\" + ]\n }\n },\n {\n \"oneOf\": [\n { + \"type\": \"object\", \"required\": [\"datum\"] },\n { \"type\": + \"object\", \"required\": [\"datum_ensemble\"] }\n ]\n }\n + \ ]\n },\n\n \"meridian\": {\n \"type\": \"object\",\n \"properties\": + {\n \"$schema\" : { \"type\": \"string\" },\n \"type\": { \"type\": + \"string\", \"enum\": [\"Meridian\"] },\n \"longitude\": { \"$ref\": + \"#/definitions/value_in_degree_or_value_and_unit\" },\n \"id\": { + \"$ref\": \"#/definitions/id\" },\n \"ids\": { \"$ref\": \"#/definitions/ids\" + }\n },\n \"required\" : [ \"longitude\" ],\n \"allOf\": [\n + \ { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" }\n ],\n + \ \"additionalProperties\": false\n },\n\n \"object_usage\": {\n + \ \"anyOf\": [\n {\n \"type\": \"object\",\n \"properties\": + {\n \"$schema\" : { \"type\": \"string\" },\n \"scope\": + { \"type\": \"string\" },\n \"area\": { \"type\": \"string\" },\n + \ \"bbox\": { \"$ref\": \"#/definitions/bbox\" },\n \"vertical_extent\": + { \"$ref\": \"#/definitions/vertical_extent\" },\n \"temporal_extent\": + { \"$ref\": \"#/definitions/temporal_extent\" },\n \"remarks\": + { \"type\": \"string\" },\n \"id\": { \"$ref\": \"#/definitions/id\" + },\n \"ids\": { \"$ref\": \"#/definitions/ids\" }\n },\n + \ \"allOf\": [\n { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" + }\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": + {\n \"$schema\" : { \"type\": \"string\" },\n \"usages\": + { \"$ref\": \"#/definitions/usages\" },\n \"remarks\": { \"type\": + \"string\" },\n \"id\": { \"$ref\": \"#/definitions/id\" },\n \"ids\": + { \"$ref\": \"#/definitions/ids\" }\n },\n \"allOf\": [\n { + \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" }\n ]\n }\n + \ ]\n },\n\n \"parameter_value\": {\n \"type\": \"object\",\n + \ \"properties\": {\n \"$schema\" : { \"type\": \"string\" },\n + \ \"type\": { \"type\": \"string\", \"enum\": [\"ParameterValue\"] },\n + \ \"name\": { \"type\": \"string\" },\n \"value\": {\n \"oneOf\": + [\n { \"type\": \"string\" },\n { \"type\": \"number\" + }\n ]\n },\n \"unit\": { \"$ref\": \"#/definitions/unit\" + },\n \"id\": { \"$ref\": \"#/definitions/id\" },\n \"ids\": + { \"$ref\": \"#/definitions/ids\" }\n },\n \"required\" : [ \"name\", + \"value\" ],\n \"allOf\": [\n { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" + }\n ],\n \"additionalProperties\": false\n },\n\n \"parametric_crs\": + {\n \"type\": \"object\",\n \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" + }],\n \"properties\": {\n \"type\": { \"type\": \"string\", \"enum\": + [\"ParametricCRS\"] },\n \"name\": { \"type\": \"string\" },\n \"datum\": + { \"$ref\": \"#/definitions/parametric_datum\" },\n \"coordinate_system\": + { \"$ref\": \"#/definitions/coordinate_system\" },\n \"$schema\" : + {},\n \"scope\": {},\n \"area\": {},\n \"bbox\": {},\n + \ \"vertical_extent\": {},\n \"temporal_extent\": {},\n \"usages\": + {},\n \"remarks\": {},\n \"id\": {}, \"ids\": {}\n },\n + \ \"required\" : [ \"name\", \"datum\" ],\n \"additionalProperties\": + false\n },\n\n \"parametric_datum\": {\n \"type\": \"object\",\n + \ \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": + {\n \"type\": { \"type\": \"string\", \"enum\": [\"ParametricDatum\"] + },\n \"name\": { \"type\": \"string\" },\n \"anchor\": { \"type\": + \"string\" },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": + {},\n \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\" ],\n \"additionalProperties\": + false\n },\n\n \"point_motion_operation\": {\n \"$comment\": \"Not + implemented in PROJ (at least as of PROJ 9.1)\",\n \"type\": \"object\",\n + \ \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": + {\n \"type\": { \"type\": \"string\", \"enum\": [\"PointMotionOperation\"] + },\n \"name\": { \"type\": \"string\" },\n \"source_crs\": { + \"$ref\": \"#/definitions/crs\" },\n \"method\": { \"$ref\": \"#/definitions/method\" + },\n \"parameters\": {\n \"type\": \"array\",\n \"items\": + { \"$ref\": \"#/definitions/parameter_value\" }\n },\n \"accuracy\": + { \"type\": \"string\" },\n \"$schema\" : {},\n \"scope\": {},\n + \ \"area\": {},\n \"bbox\": {},\n \"vertical_extent\": + {},\n \"temporal_extent\": {},\n \"usages\": {},\n \"remarks\": + {},\n \"id\": {}, \"ids\": {}\n },\n \"required\" : [ \"name\", + \"source_crs\", \"method\", \"parameters\" ],\n \"additionalProperties\": + false\n },\n\n \"prime_meridian\": {\n \"type\": \"object\",\n + \ \"properties\": {\n \"$schema\" : { \"type\": \"string\" },\n + \ \"type\": { \"type\": \"string\", \"enum\": [\"PrimeMeridian\"] },\n + \ \"name\": { \"type\": \"string\" },\n \"longitude\": { \"$ref\": + \"#/definitions/value_in_degree_or_value_and_unit\" },\n \"id\": { + \"$ref\": \"#/definitions/id\" },\n \"ids\": { \"$ref\": \"#/definitions/ids\" + }\n },\n \"required\" : [ \"name\" ],\n \"allOf\": [\n { + \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" }\n ],\n \"additionalProperties\": + false\n },\n\n \"single_operation\": {\n \"oneOf\": [\n { + \"$ref\": \"#/definitions/conversion\" },\n { \"$ref\": \"#/definitions/transformation\" + },\n { \"$ref\": \"#/definitions/point_motion_operation\" }\n ]\n + \ },\n\n \"projected_crs\": {\n \"type\": \"object\",\n \"allOf\": + [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": {\n + \ \"type\": { \"type\": \"string\",\n \"enum\": [\"ProjectedCRS\"] + },\n \"name\": { \"type\": \"string\" },\n \"base_crs\": { \"$ref\": + \"#/definitions/geodetic_crs\" },\n \"conversion\": { \"$ref\": \"#/definitions/conversion\" + },\n \"coordinate_system\": { \"$ref\": \"#/definitions/coordinate_system\" + },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": {},\n + \ \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"base_crs\", \"conversion\", + \"coordinate_system\" ],\n \"additionalProperties\": false\n },\n\n + \ \"temporal_crs\": {\n \"type\": \"object\",\n \"allOf\": [{ + \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": {\n \"type\": + { \"type\": \"string\", \"enum\": [\"TemporalCRS\"] },\n \"name\": + { \"type\": \"string\" },\n \"datum\": { \"$ref\": \"#/definitions/temporal_datum\" + },\n \"coordinate_system\": { \"$ref\": \"#/definitions/coordinate_system\" + },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": {},\n + \ \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"datum\" ],\n \"additionalProperties\": + false\n },\n\n \"temporal_datum\": {\n \"type\": \"object\",\n + \ \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": + {\n \"type\": { \"type\": \"string\", \"enum\": [\"TemporalDatum\"] + },\n \"name\": { \"type\": \"string\" },\n \"calendar\": { \"type\": + \"string\" },\n \"time_origin\": { \"type\": \"string\" },\n \"$schema\" + : {},\n \"scope\": {},\n \"area\": {},\n \"bbox\": {},\n + \ \"vertical_extent\": {},\n \"temporal_extent\": {},\n \"usages\": + {},\n \"remarks\": {},\n \"id\": {}, \"ids\": {}\n },\n + \ \"required\" : [ \"name\", \"calendar\" ],\n \"additionalProperties\": + false\n },\n\n \"temporal_extent\": {\n \"type\": \"object\",\n + \ \"properties\": {\n \"start\": { \"type\": \"string\" },\n \"end\": + { \"type\": \"string\" }\n },\n \"required\" : [ \"start\", \"end\" + ],\n \"additionalProperties\": false\n },\n\n \"transformation\": + {\n \"type\": \"object\",\n \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" + }],\n \"properties\": {\n \"type\": { \"type\": \"string\", \"enum\": + [\"Transformation\"] },\n \"name\": { \"type\": \"string\" },\n \"source_crs\": + { \"$ref\": \"#/definitions/crs\" },\n \"target_crs\": { \"$ref\": + \"#/definitions/crs\" },\n \"interpolation_crs\": { \"$ref\": \"#/definitions/crs\" + },\n \"method\": { \"$ref\": \"#/definitions/method\" },\n \"parameters\": + {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/definitions/parameter_value\" + }\n },\n \"accuracy\": { \"type\": \"string\" },\n \"$schema\" + : {},\n \"scope\": {},\n \"area\": {},\n \"bbox\": {},\n + \ \"vertical_extent\": {},\n \"temporal_extent\": {},\n \"usages\": + {},\n \"remarks\": {},\n \"id\": {}, \"ids\": {}\n },\n + \ \"required\" : [ \"name\", \"source_crs\", \"target_crs\", \"method\", + \"parameters\" ],\n \"additionalProperties\": false\n },\n\n \"unit\": + {\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"enum\": + [\"metre\", \"degree\", \"unity\"]\n },\n {\n \"type\": \"object\",\n + \ \"properties\": {\n \"type\": { \"type\": \"string\",\n \"enum\": + [\"LinearUnit\", \"AngularUnit\", \"ScaleUnit\",\n \"TimeUnit\", + \"ParametricUnit\", \"Unit\"] },\n \"name\": { \"type\": \"string\" + },\n \"conversion_factor\": { \"type\": \"number\" },\n \"id\": + { \"$ref\": \"#/definitions/id\" },\n \"ids\": { \"$ref\": \"#/definitions/ids\" + }\n },\n \"required\" : [ \"type\", \"name\" ],\n \"allOf\": + [\n { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" }\n + \ ],\n \"additionalProperties\": false\n }\n ]\n + \ },\n\n \"usages\": {\n \"type\": \"array\",\n \"items\": + {\n \"type\": \"object\",\n \"properties\": {\n \"scope\": + { \"type\": \"string\" },\n \"area\": { \"type\": \"string\" },\n + \ \"bbox\": { \"$ref\": \"#/definitions/bbox\" },\n \"vertical_extent\": + { \"$ref\": \"#/definitions/vertical_extent\" },\n \"temporal_extent\": + { \"$ref\": \"#/definitions/temporal_extent\" }\n },\n \"additionalProperties\": + false\n }\n },\n\n \"value_and_unit\": {\n \"type\": \"object\",\n + \ \"properties\": {\n \"value\": { \"type\": \"number\" },\n \"unit\": + { \"$ref\": \"#/definitions/unit\" }\n },\n \"required\" : [ \"value\", + \"unit\" ],\n \"additionalProperties\": false\n },\n\n \"value_in_degree_or_value_and_unit\": + {\n \"oneOf\": [\n { \"type\": \"number\" },\n { \"$ref\": + \"#/definitions/value_and_unit\" }\n ]\n },\n\n \"value_in_metre_or_value_and_unit\": + {\n \"oneOf\": [\n { \"type\": \"number\" },\n { \"$ref\": + \"#/definitions/value_and_unit\" }\n ]\n },\n\n \"vertical_crs\": + {\n \"type\": \"object\",\n \"properties\": {\n \"type\": + { \"type\": \"string\", \"enum\": [\"VerticalCRS\"] },\n \"name\": + { \"type\": \"string\" },\n \"datum\": {\n \"oneOf\": [\n + \ { \"$ref\": \"#/definitions/vertical_reference_frame\" },\n + \ { \"$ref\": \"#/definitions/dynamic_vertical_reference_frame\" + }\n ]\n },\n \"datum_ensemble\": { \"$ref\": \"#/definitions/datum_ensemble\" + },\n \"coordinate_system\": { \"$ref\": \"#/definitions/coordinate_system\" + },\n \"geoid_model\": { \"$ref\": \"#/definitions/geoid_model\" },\n + \ \"geoid_models\": {\n \"type\": \"array\",\n \"items\": + { \"$ref\": \"#/definitions/geoid_model\" }\n },\n \"deformation_models\": + {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/definitions/deformation_model\" + }\n },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": + {},\n \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\"],\n \"description\": + \"One and only one of datum and datum_ensemble must be provided\",\n \"allOf\": + [\n { \"$ref\": \"#/definitions/object_usage\" },\n { \"$ref\": + \"#/definitions/one_and_only_one_of_datum_or_datum_ensemble\" },\n {\n + \ \"not\": {\n \"type\": \"object\",\n \"required\": + [ \"geoid_model\", \"geoid_models\" ]\n }\n }\n ],\n + \ \"additionalProperties\": false\n },\n\n \"vertical_extent\": + {\n \"type\": \"object\",\n \"properties\": {\n \"minimum\": + { \"type\": \"number\" },\n \"maximum\": { \"type\": \"number\" },\n + \ \"unit\": { \"$ref\": \"#/definitions/unit\" }\n },\n \"required\" + : [ \"minimum\", \"maximum\" ],\n \"additionalProperties\": false\n },\n\n + \ \"vertical_reference_frame\": {\n \"type\": \"object\",\n \"allOf\": + [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": {\n + \ \"type\": { \"type\": \"string\", \"enum\": [\"VerticalReferenceFrame\"] + },\n \"name\": { \"type\": \"string\" },\n \"anchor\": { \"type\": + \"string\" },\n \"anchor_epoch\": { \"type\": \"number\" },\n \"$schema\" + : {},\n \"scope\": {},\n \"area\": {},\n \"bbox\": {},\n + \ \"vertical_extent\": {},\n \"temporal_extent\": {},\n \"usages\": + {},\n \"remarks\": {},\n \"id\": {}, \"ids\": {}\n },\n + \ \"required\" : [ \"name\" ],\n \"additionalProperties\": false\n + \ }\n\n }\n}\n" + headers: {} + status: + code: 200 + message: OK version: 1 diff --git a/extensions/datacube/tests/cassettes/test_datacube/test_validate.yaml b/extensions/datacube/tests/cassettes/test_datacube/test_validate.yaml index 2d844e2a2..d268ac918 100644 --- a/extensions/datacube/tests/cassettes/test_datacube/test_validate.yaml +++ b/extensions/datacube/tests/cassettes/test_datacube/test_validate.yaml @@ -666,4 +666,761 @@ interactions: status: code: 200 message: OK +- request: + body: null + headers: {} + method: GET + uri: https://stac-extensions.github.io/datacube/v2.3.0/schema.json + response: + body: + string: "{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": + \"https://stac-extensions.github.io/datacube/v2.3.0/schema.json\",\n \"title\": + \"Datacube Extension\",\n \"description\": \"STAC Datacube Extension for + STAC Items and STAC Collections.\",\n \"oneOf\": [\n {\n \"$comment\": + \"This is the schema for STAC Items.\",\n \"allOf\": [\n {\n \"type\": + \"object\",\n \"required\": [\n \"type\"\n ],\n + \ \"properties\": {\n \"type\": {\n \"const\": + \"Feature\"\n }\n }\n },\n {\n \"$ref\": + \"#/definitions/stac_extensions\"\n }\n ],\n \"anyOf\": [\n + \ {\n \"type\": \"object\",\n \"required\": [\n \"properties\"\n + \ ],\n \"properties\": {\n \"properties\": {\n + \ \"allOf\": [\n {\n \"$ref\": + \"#/definitions/require_field\"\n },\n {\n \"$ref\": + \"#/definitions/fields\"\n }\n ]\n }\n + \ }\n },\n {\n \"$comment\": \"This validates + the fields in Item Assets.\",\n \"required\": [\n \"assets\"\n + \ ],\n \"properties\": {\n \"assets\": {\n \"type\": + \"object\",\n \"not\": {\n \"additionalProperties\": + {\n \"not\": {\n \"allOf\": [\n {\n + \ \"$ref\": \"#/definitions/require_field\"\n },\n + \ {\n \"$ref\": \"#/definitions/fields\"\n + \ }\n ]\n }\n }\n + \ }\n }\n }\n }\n ]\n },\n + \ {\n \"$comment\": \"This is the schema for STAC Collections.\",\n + \ \"type\": \"object\",\n \"allOf\": [\n {\n \"required\": + [\n \"type\"\n ],\n \"properties\": {\n \"type\": + {\n \"const\": \"Collection\"\n }\n }\n },\n + \ {\n \"$ref\": \"#/definitions/stac_extensions\"\n }\n + \ ],\n \"anyOf\": [\n {\n \"$comment\": \"This is + the schema for the top-level fields in a Collection.\",\n \"allOf\": + [\n {\n \"$ref\": \"#/definitions/require_field\"\n + \ },\n {\n \"$ref\": \"#/definitions/fields\"\n + \ }\n ]\n },\n {\n \"$comment\": + \"This validates the fields in Collection Assets.\",\n \"required\": + [\n \"assets\"\n ],\n \"properties\": {\n \"assets\": + {\n \"type\": \"object\",\n \"not\": {\n \"additionalProperties\": + {\n \"not\": {\n \"allOf\": [\n {\n + \ \"$ref\": \"#/definitions/require_field\"\n },\n + \ {\n \"$ref\": \"#/definitions/fields\"\n + \ }\n ]\n }\n }\n + \ }\n }\n }\n },\n {\n \"$comment\": + \"This is the schema for the fields in Item Asset Definitions.\",\n \"required\": + [\n \"item_assets\"\n ],\n \"properties\": {\n + \ \"item_assets\": {\n \"type\": \"object\",\n \"not\": + {\n \"additionalProperties\": {\n \"not\": + {\n \"allOf\": [\n {\n \"$ref\": + \"#/definitions/require_any_field\"\n },\n {\n + \ \"$ref\": \"#/definitions/fields\"\n }\n + \ ]\n }\n }\n }\n + \ }\n }\n },\n {\n \"$comment\": + \"This is the schema for the fields in Summaries. By default, only checks + the existance of the properties, but not the schema of the summaries.\",\n + \ \"required\": [\n \"summaries\"\n ],\n \"properties\": + {\n \"summaries\": {\n \"$ref\": \"#/definitions/require_any_field\"\n + \ }\n }\n }\n ]\n }\n ],\n \"definitions\": + {\n \"stac_extensions\": {\n \"type\": \"object\",\n \"required\": + [\n \"stac_extensions\"\n ],\n \"properties\": {\n \"stac_extensions\": + {\n \"type\": \"array\",\n \"contains\": {\n \"const\": + \"https://stac-extensions.github.io/datacube/v2.3.0/schema.json\"\n }\n + \ }\n }\n },\n \"require_any_field\": {\n \"$comment\": + \"Please list all fields here so that we can force the existance of one of + them in other parts of the schemas.\",\n \"anyOf\": [\n {\"required\": + [\"cube:dimensions\"]},\n {\"required\": [\"cube:variables\"]}\n ]\n + \ },\n \"require_field\": {\n \"required\": [\n \"cube:dimensions\"\n + \ ]\n },\n \"fields\": {\n \"$comment\": \"Add your new fields + here. Don't require them here, do that above in the corresponding schema.\",\n + \ \"type\": \"object\",\n \"properties\": {\n \"cube:dimensions\": + {\n \"$ref\": \"#/definitions/cube:dimensions\"\n },\n \"cube:variables\": + {\n \"$ref\": \"#/definitions/cube:variables\"\n }\n },\n + \ \"patternProperties\": {\n \"^(?!cube:)\": {}\n },\n \"additionalProperties\": + false\n },\n \"cube:dimensions\": {\n \"type\": \"object\",\n \"additionalProperties\": + {\n \"anyOf\": [\n {\n \"$ref\": \"#/definitions/vector_dimension\"\n + \ },\n {\n \"$ref\": \"#/definitions/horizontal_spatial_dimension\"\n + \ },\n {\n \"$ref\": \"#/definitions/vertical_spatial_dimension\"\n + \ },\n {\n \"$ref\": \"#/definitions/temporal_dimension\"\n + \ },\n {\n \"$ref\": \"#/definitions/additional_dimension\"\n + \ }\n ]\n }\n },\n \"cube:variables\": {\n \"type\": + \"object\",\n \"additionalProperties\": {\n \"$ref\": \"#/definitions/variable\"\n + \ }\n },\n \"additional_dimension\": {\n \"title\": \"Additional + Dimension Object\",\n \"type\": \"object\",\n \"anyOf\": [\n {\n + \ \"required\": [\n \"type\",\n \"extent\"\n + \ ]\n },\n {\n \"required\": [\n \"type\",\n + \ \"values\"\n ]\n }\n ],\n \"not\": {\n + \ \"required\": [\n \"axis\"\n ]\n },\n \"properties\": + {\n \"type\": {\n \"type\": \"string\",\n \"not\": + {\n \"enum\": [\n \"spatial\",\n \"geometry\"\n + \ ]\n }\n },\n \"description\": {\n \"$ref\": + \"#/definitions/description\"\n },\n \"extent\": {\n \"$ref\": + \"#/definitions/extent_open\"\n },\n \"values\": {\n \"$ref\": + \"#/definitions/values\"\n },\n \"step\": {\n \"$ref\": + \"#/definitions/step\"\n },\n \"unit\": {\n \"$ref\": + \"#/definitions/unit\"\n },\n \"reference_system\": {\n \"type\": + \"string\"\n },\n \"dimensions\": {\n \"type\": \"array\",\n + \ \"items\": {\n \"type\": [\n \"string\"\n + \ ]\n }\n }\n }\n },\n \"horizontal_spatial_dimension\": + {\n \"title\": \"Horizontal Spatial Raster Dimension Object\",\n \"type\": + \"object\",\n \"required\": [\n \"type\",\n \"axis\",\n + \ \"extent\"\n ],\n \"properties\": {\n \"type\": {\n + \ \"$ref\": \"#/definitions/type_spatial\"\n },\n \"axis\": + {\n \"$ref\": \"#/definitions/axis_xy\"\n },\n \"description\": + {\n \"$ref\": \"#/definitions/description\"\n },\n \"extent\": + {\n \"$ref\": \"#/definitions/extent_closed\"\n },\n \"values\": + {\n \"$ref\": \"#/definitions/values_numeric\"\n },\n \"step\": + {\n \"$ref\": \"#/definitions/step\"\n },\n \"reference_system\": + {\n \"$ref\": \"#/definitions/reference_system_spatial\"\n }\n + \ }\n },\n \"vertical_spatial_dimension\": {\n \"title\": \"Vertical + Spatial Dimension Object\",\n \"type\": \"object\",\n \"anyOf\": + [\n {\n \"required\": [\n \"type\",\n \"axis\",\n + \ \"extent\"\n ]\n },\n {\n \"required\": + [\n \"type\",\n \"axis\",\n \"values\"\n + \ ]\n }\n ],\n \"properties\": {\n \"type\": + {\n \"$ref\": \"#/definitions/type_spatial\"\n },\n \"axis\": + {\n \"$ref\": \"#/definitions/axis_z\"\n },\n \"description\": + {\n \"$ref\": \"#/definitions/description\"\n },\n \"extent\": + {\n \"$ref\": \"#/definitions/extent_open\"\n },\n \"values\": + {\n \"$ref\": \"#/definitions/values\"\n },\n \"step\": + {\n \"$ref\": \"#/definitions/step\"\n },\n \"unit\": + {\n \"$ref\": \"#/definitions/unit\"\n },\n \"reference_system\": + {\n \"$ref\": \"#/definitions/reference_system_spatial\"\n }\n + \ }\n },\n \"vector_dimension\": {\n \"title\": \"Spatial Vector + Dimension Object\",\n \"type\": \"object\",\n \"required\": [\n + \ \"type\",\n \"bbox\"\n ],\n \"properties\": {\n \"type\": + {\n \"type\": \"string\",\n \"const\": \"geometry\"\n },\n + \ \"axes\": {\n \"type\": \"array\",\n \"uniqueItems\": + true,\n \"items\": {\n \"type\": \"string\",\n \"enum\": + [\n \"x\",\n \"y\",\n \"z\"\n ]\n + \ }\n },\n \"description\": {\n \"$ref\": \"#/definitions/description\"\n + \ },\n \"bbox\": {\n \"title\": \"Spatial extent\",\n + \ \"type\": \"array\",\n \"oneOf\": [\n {\n \"minItems\":4,\n + \ \"maxItems\":4\n },\n {\n \"minItems\":6,\n + \ \"maxItems\":6\n }\n ],\n \"items\": + {\n \"type\": \"number\"\n }\n },\n \"values\": + {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": + {\n \"description\": \"WKT or Identifier\",\n \"type\": + \"string\"\n }\n },\n \"geometry_types\": {\n \"type\": + \"array\",\n \"uniqueItems\": true,\n \"items\": {\n \"type\": + \"string\",\n \"enum\": [\n \"Point\",\n \"MultiPoint\",\n + \ \"LineString\",\n \"MultiLineString\",\n \"Polygon\",\n + \ \"MultiPolygon\",\n \"GeometryCollection\"\n ]\n + \ }\n },\n \"reference_system\": {\n \"$ref\": + \"#/definitions/reference_system_spatial\"\n }\n }\n },\n \"temporal_dimension\": + {\n \"title\": \"Temporal Dimension Object\",\n \"type\": \"object\",\n + \ \"required\": [\n \"type\",\n \"extent\"\n ],\n \"not\": + {\n \"required\": [\n \"axis\"\n ]\n },\n \"properties\": + {\n \"type\": {\n \"type\": \"string\",\n \"const\": + \"temporal\"\n },\n \"description\": {\n \"$ref\": + \"#/definitions/description\"\n },\n \"values\": {\n \"type\": + \"array\",\n \"minItems\": 1,\n \"items\": {\n \"type\": + \"string\"\n }\n },\n \"extent\": {\n \"type\": + \"array\",\n \"minItems\": 2,\n \"maxItems\": 2,\n \"items\": + {\n \"type\": [\n \"string\",\n \"null\"\n + \ ]\n }\n },\n \"step\": {\n \"type\": + [\n \"string\",\n \"null\"\n ]\n }\n + \ }\n },\n \"variable\": {\n \"title\": \"Variable Object\",\n + \ \"type\": \"object\",\n \"required\": [\n \"dimensions\"\n + \ ],\n \"properties\": {\n \"variable_type\": {\n \"type\": + \"string\",\n \"enum\": [\n \"data\",\n \"auxiliary\"\n + \ ]\n },\n \"description\": {\n \"$ref\": \"#/definitions/description\"\n + \ },\n \"dimensions\": {\n \"type\": \"array\",\n \"items\": + {\n \"type\": \"string\"\n }\n },\n \"values\": + {\n \"type\": \"array\",\n \"minItems\": 1\n },\n + \ \"extent\": {\n \"type\": \"array\",\n \"minItems\": + 2,\n \"maxItems\": 2,\n \"items\": {\n \"type\": + [\n \"string\",\n \"number\",\n \"null\"\n + \ ]\n }\n },\n \"unit\": {\n \"$ref\": + \"#/definitions/unit\"\n },\n \"nodata\": {\n \"$ref\": + \"#/definitions/nodata\"\n },\n \"data_type\": {\n \"$ref\": + \"#/definitions/data_type\"\n }\n }\n },\n \"type_spatial\": + {\n \"type\": \"string\",\n \"const\": \"spatial\"\n },\n \"axis_xy\": + {\n \"type\": \"string\",\n \"enum\": [\n \"x\",\n \"y\"\n + \ ]\n },\n \"axis_z\": {\n \"type\": \"string\",\n \"const\": + \"z\"\n },\n \"extent_closed\": {\n \"type\": \"array\",\n \"minItems\": + 2,\n \"maxItems\": 2,\n \"items\": {\n \"type\": \"number\"\n + \ }\n },\n \"extent_open\": {\n \"type\": \"array\",\n \"minItems\": + 2,\n \"maxItems\": 2,\n \"items\": {\n \"type\": [\n \"number\",\n + \ \"null\"\n ]\n }\n },\n \"values_numeric\": {\n + \ \"type\": \"array\",\n \"minItems\": 1,\n \"items\": {\n \"type\": + \"number\"\n }\n },\n \"values\": {\n \"type\": \"array\",\n + \ \"minItems\": 1,\n \"items\": {\n \"oneOf\": [\n {\n + \ \"type\": \"number\"\n },\n {\n \"type\": + \"string\"\n }\n ]\n }\n },\n \"step\": {\n \"type\": + [\n \"number\",\n \"null\"\n ]\n },\n \"unit\": {\n + \ \"$comment\": \"The schema is from common metadata, see https://github.com/radiantearth/stac-spec/blob/v1.1.0/item-spec/json-schema/data-values.json\",\n + \ \"type\": \"string\"\n },\n \"data_type\": {\n \"$comment\": + \"The schema is from common metadata, see https://github.com/radiantearth/stac-spec/blob/v1.1.0/item-spec/json-schema/data-values.json\",\n + \ \"type\": \"string\",\n \"enum\": [\n \"int8\",\n \"int16\",\n + \ \"int32\",\n \"int64\",\n \"uint8\",\n \"uint16\",\n + \ \"uint32\",\n \"uint64\",\n \"float16\",\n \"float32\",\n + \ \"float64\",\n \"cint16\",\n \"cint32\",\n \"cfloat32\",\n + \ \"cfloat64\",\n \"other\"\n ]\n },\n \"nodata\": + {\n \"$comment\": \"The schema is from common metadata, see https://github.com/radiantearth/stac-spec/blob/v1.1.0/item-spec/json-schema/data-values.json\",\n + \ \"oneOf\": [\n {\n \"type\": \"number\"\n },\n + \ {\n \"type\": \"string\",\n \"enum\": [\n \"nan\",\n + \ \"inf\",\n \"-inf\"\n ]\n }\n ]\n + \ },\n \"reference_system_spatial\": {\n \"oneOf\": [\n {\n + \ \"description\": \"WKT2\",\n \"type\": \"string\"\n },\n + \ {\n \"description\": \"EPSG code\",\n \"type\": + \"integer\",\n \"minimum\": 0\n },\n {\n \"$ref\": + \"https://proj.org/schemas/v0.7/projjson.schema.json\"\n }\n ],\n + \ \"default\": 4326\n },\n \"description\": {\n \"type\": \"string\"\n + \ }\n }\n}\n" + headers: {} + status: + code: 200 + message: OK +- request: + body: null + headers: {} + method: GET + uri: https://proj.org/schemas/v0.7/projjson.schema.json + response: + body: + string: '' + headers: + Location: + - https://proj.org/en/latest/schemas/v0.7/projjson.schema.json + status: + code: 302 + message: Found +- request: + body: null + headers: {} + method: GET + uri: https://proj.org/en/latest/schemas/v0.7/projjson.schema.json + response: + body: + string: "{\n \"$id\": \"https://proj.org/schemas/v0.7/projjson.schema.json\",\n + \ \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"description\": + \"Schema for PROJJSON (v0.7)\",\n \"$comment\": \"This document is copyright + Even Rouault and PROJ contributors, 2019-2023, and subject to the MIT license. + This file exists both in data/ and in schemas/vXXX/. Keep both in sync. And + if changing the value of $id, change PROJJSON_DEFAULT_VERSION accordingly + in io.cpp\",\n\n \"oneOf\": [\n { \"$ref\": \"#/definitions/crs\" },\n + \ { \"$ref\": \"#/definitions/datum\" },\n { \"$ref\": \"#/definitions/datum_ensemble\" + },\n { \"$ref\": \"#/definitions/ellipsoid\" },\n { \"$ref\": \"#/definitions/prime_meridian\" + },\n { \"$ref\": \"#/definitions/single_operation\" },\n { \"$ref\": + \"#/definitions/concatenated_operation\" },\n { \"$ref\": \"#/definitions/coordinate_metadata\" + }\n ],\n\n \"definitions\": {\n\n \"abridged_transformation\": {\n \"type\": + \"object\",\n \"properties\": {\n \"$schema\" : { \"type\": \"string\" + },\n \"type\": { \"type\": \"string\", \"enum\": [\"AbridgedTransformation\"] + },\n \"name\": { \"type\": \"string\" },\n \"source_crs\": {\n + \ \"$ref\": \"#/definitions/crs\",\n \"$comment\": \"Only + present when the source_crs of the bound_crs does not match the source_crs + of the AbridgedTransformation. No equivalent in WKT\"\n },\n \"method\": + { \"$ref\": \"#/definitions/method\" },\n \"parameters\": {\n \"type\": + \"array\",\n \"items\": { \"$ref\": \"#/definitions/parameter_value\" + }\n },\n \"id\": { \"$ref\": \"#/definitions/id\" },\n \"ids\": + { \"$ref\": \"#/definitions/ids\" }\n },\n \"required\" : [ \"name\", + \"method\", \"parameters\" ],\n \"allOf\": [\n { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" + }\n ],\n \"additionalProperties\": false\n },\n\n \"axis\": + {\n \"type\": \"object\",\n \"properties\": {\n \"$schema\" + : { \"type\": \"string\" },\n \"type\": { \"type\": \"string\", \"enum\": + [\"Axis\"] },\n \"name\": { \"type\": \"string\" },\n \"abbreviation\": + { \"type\": \"string\" },\n \"direction\": { \"type\": \"string\",\n + \ \"enum\": [ \"north\",\n \"northNorthEast\",\n + \ \"northEast\",\n \"eastNorthEast\",\n + \ \"east\",\n \"eastSouthEast\",\n + \ \"southEast\",\n \"southSouthEast\",\n + \ \"south\",\n \"southSouthWest\",\n + \ \"southWest\",\n \"westSouthWest\",\n + \ \"west\",\n \"westNorthWest\",\n + \ \"northWest\",\n \"northNorthWest\",\n + \ \"up\",\n \"down\",\n + \ \"geocentricX\",\n \"geocentricY\",\n + \ \"geocentricZ\",\n \"columnPositive\",\n + \ \"columnNegative\",\n \"rowPositive\",\n + \ \"rowNegative\",\n \"displayRight\",\n + \ \"displayLeft\",\n \"displayUp\",\n + \ \"displayDown\",\n \"forward\",\n + \ \"aft\",\n \"port\",\n + \ \"starboard\",\n \"clockwise\",\n + \ \"counterClockwise\",\n \"towards\",\n + \ \"awayFrom\",\n \"future\",\n + \ \"past\",\n \"unspecified\" + ] },\n \"meridian\": { \"$ref\": \"#/definitions/meridian\" },\n \"unit\": + { \"$ref\": \"#/definitions/unit\" },\n \"minimum_value\": { \"type\": + \"number\" },\n \"maximum_value\": { \"type\": \"number\" },\n \"range_meaning\": + { \"type\": \"string\", \"enum\": [ \"exact\", \"wraparound\"] },\n \"id\": + { \"$ref\": \"#/definitions/id\" },\n \"ids\": { \"$ref\": \"#/definitions/ids\" + }\n },\n \"required\" : [ \"name\", \"abbreviation\", \"direction\" + ],\n \"allOf\": [\n { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" + }\n ],\n \"additionalProperties\": false\n },\n\n \"bbox\": + {\n \"type\": \"object\",\n \"properties\": {\n \"east_longitude\": + { \"type\": \"number\" },\n \"west_longitude\": { \"type\": \"number\" + },\n \"south_latitude\": { \"type\": \"number\" },\n \"north_latitude\": + { \"type\": \"number\" }\n },\n \"required\" : [ \"east_longitude\", + \"west_longitude\",\n \"south_latitude\", \"north_latitude\" + ],\n \"additionalProperties\": false\n },\n\n \"bound_crs\": {\n + \ \"type\": \"object\",\n \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" + }],\n \"properties\": {\n \"$schema\" : { \"type\": \"string\" + },\n \"type\": { \"type\": \"string\", \"enum\": [\"BoundCRS\"] },\n + \ \"name\": { \"type\": \"string\" },\n \"source_crs\": { \"$ref\": + \"#/definitions/crs\" },\n \"target_crs\": { \"$ref\": \"#/definitions/crs\" + },\n \"transformation\": { \"$ref\": \"#/definitions/abridged_transformation\" + },\n \"scope\": {},\n \"area\": {},\n \"bbox\": {},\n + \ \"vertical_extent\": {},\n \"temporal_extent\": {},\n \"usages\": + {},\n \"remarks\": {},\n \"id\": {}, \"ids\": {}\n },\n + \ \"required\" : [ \"source_crs\", \"target_crs\", \"transformation\" ],\n + \ \"additionalProperties\": false\n },\n\n \"compound_crs\": {\n + \ \"type\": \"object\",\n \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" + }],\n \"properties\": {\n \"type\": { \"type\": \"string\", \"enum\": + [\"CompoundCRS\"] },\n \"name\": { \"type\": \"string\" },\n \"components\": + \ {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/definitions/crs\" + }\n },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": + {},\n \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"components\" ],\n + \ \"additionalProperties\": false\n },\n\n \"concatenated_operation\": + {\n \"type\": \"object\",\n \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" + }],\n \"properties\": {\n \"type\": { \"type\": \"string\", \"enum\": + [\"ConcatenatedOperation\"] },\n \"name\": { \"type\": \"string\" },\n + \ \"source_crs\": { \"$ref\": \"#/definitions/crs\" },\n \"target_crs\": + { \"$ref\": \"#/definitions/crs\" },\n \"steps\": {\n \"type\": + \"array\",\n \"items\": { \"$ref\": \"#/definitions/single_operation\" + }\n },\n \"accuracy\": { \"type\": \"string\" },\n \"$schema\" + : {},\n \"scope\": {},\n \"area\": {},\n \"bbox\": {},\n + \ \"vertical_extent\": {},\n \"temporal_extent\": {},\n \"usages\": + {},\n \"remarks\": {},\n \"id\": {}, \"ids\": {}\n },\n + \ \"required\" : [ \"name\", \"source_crs\", \"target_crs\", \"steps\" + ],\n \"additionalProperties\": false\n },\n\n \"conversion\": {\n + \ \"type\": \"object\",\n \"properties\": {\n \"$schema\" + : { \"type\": \"string\" },\n \"type\": { \"type\": \"string\", \"enum\": + [\"Conversion\"] },\n \"name\": { \"type\": \"string\" },\n \"method\": + { \"$ref\": \"#/definitions/method\" },\n \"parameters\": {\n \"type\": + \"array\",\n \"items\": { \"$ref\": \"#/definitions/parameter_value\" + }\n },\n \"id\": { \"$ref\": \"#/definitions/id\" },\n \"ids\": + { \"$ref\": \"#/definitions/ids\" }\n },\n \"required\" : [ \"name\", + \"method\" ],\n \"allOf\": [\n { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" + }\n ],\n \"additionalProperties\": false\n },\n\n \"coordinate_metadata\": + {\n \"type\": \"object\",\n \"properties\": {\n \"$schema\" + : { \"type\": \"string\" },\n \"type\": { \"type\": \"string\", \"enum\": + [\"CoordinateMetadata\"] },\n \"crs\": { \"$ref\": \"#/definitions/crs\" + },\n \"coordinateEpoch\": { \"type\": \"number\" }\n },\n \"required\" + : [ \"crs\" ],\n \"additionalProperties\": false\n },\n\n \"coordinate_system\": + {\n \"type\": \"object\",\n \"properties\": {\n \"$schema\" + : { \"type\": \"string\" },\n \"type\": { \"type\": \"string\", \"enum\": + [\"CoordinateSystem\"] },\n \"name\": { \"type\": \"string\" },\n \"subtype\": + { \"type\": \"string\",\n \"enum\": [\"Cartesian\",\n + \ \"spherical\",\n \"ellipsoidal\",\n + \ \"vertical\",\n \"ordinal\",\n + \ \"parametric\",\n \"affine\",\n + \ \"TemporalDateTime\",\n \"TemporalCount\",\n + \ \"TemporalMeasure\"] },\n \"axis\": + {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/definitions/axis\" + }\n },\n \"id\": { \"$ref\": \"#/definitions/id\" },\n \"ids\": + { \"$ref\": \"#/definitions/ids\" }\n },\n \"required\" : [ \"subtype\", + \"axis\" ],\n \"allOf\": [\n { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" + }\n ],\n \"additionalProperties\": false\n },\n\n \"crs\": + {\n \"oneOf\": [\n { \"$ref\": \"#/definitions/bound_crs\" },\n + \ { \"$ref\": \"#/definitions/compound_crs\" },\n { \"$ref\": + \"#/definitions/derived_engineering_crs\" },\n { \"$ref\": \"#/definitions/derived_geodetic_crs\" + },\n { \"$ref\": \"#/definitions/derived_parametric_crs\" },\n { + \"$ref\": \"#/definitions/derived_projected_crs\" },\n { \"$ref\": + \"#/definitions/derived_temporal_crs\" },\n { \"$ref\": \"#/definitions/derived_vertical_crs\" + },\n { \"$ref\": \"#/definitions/engineering_crs\" },\n { \"$ref\": + \"#/definitions/geodetic_crs\" },\n { \"$ref\": \"#/definitions/parametric_crs\" + },\n { \"$ref\": \"#/definitions/projected_crs\" },\n { \"$ref\": + \"#/definitions/temporal_crs\" },\n { \"$ref\": \"#/definitions/vertical_crs\" + }\n ]\n },\n\n \"datum\": {\n \"oneOf\": [\n { \"$ref\": + \"#/definitions/geodetic_reference_frame\" },\n { \"$ref\": \"#/definitions/vertical_reference_frame\" + },\n { \"$ref\": \"#/definitions/dynamic_geodetic_reference_frame\" + },\n { \"$ref\": \"#/definitions/dynamic_vertical_reference_frame\" + },\n { \"$ref\": \"#/definitions/temporal_datum\" },\n { \"$ref\": + \"#/definitions/parametric_datum\" },\n { \"$ref\": \"#/definitions/engineering_datum\" + }\n ]\n },\n\n \"datum_ensemble\": {\n \"type\": \"object\",\n + \ \"properties\": {\n \"$schema\" : { \"type\": \"string\" },\n + \ \"type\": { \"type\": \"string\", \"enum\": [\"DatumEnsemble\"] },\n + \ \"name\": { \"type\": \"string\" },\n \"members\": {\n \"type\": + \"array\",\n \"items\": {\n \"type\": \"object\",\n + \ \"properties\": {\n \"name\": { \"type\": + \"string\" },\n \"id\": { \"$ref\": \"#/definitions/id\" + },\n \"ids\": { \"$ref\": \"#/definitions/ids\" }\n },\n + \ \"required\" : [ \"name\" ],\n \"allOf\": [\n + \ { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" + }\n ],\n \"additionalProperties\": false\n }\n + \ },\n \"ellipsoid\": { \"$ref\": \"#/definitions/ellipsoid\" + },\n \"accuracy\": { \"type\": \"string\" },\n \"id\": { \"$ref\": + \"#/definitions/id\" },\n \"ids\": { \"$ref\": \"#/definitions/ids\" + }\n },\n \"required\" : [ \"name\", \"members\", \"accuracy\" ],\n + \ \"allOf\": [\n { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" + }\n ],\n \"additionalProperties\": false\n },\n\n \"deformation_model\": + {\n \"description\": \"Association to a PointMotionOperation\",\n \"type\": + \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" + },\n \"id\": { \"$ref\": \"#/definitions/id\" }\n },\n \"required\" + : [ \"name\" ],\n \"additionalProperties\": false\n },\n\n \"derived_engineering_crs\": + {\n \"type\": \"object\",\n \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" + }],\n \"properties\": {\n \"type\": { \"type\": \"string\",\n + \ \"enum\": [\"DerivedEngineeringCRS\"] },\n \"name\": + { \"type\": \"string\" },\n \"base_crs\": { \"$ref\": \"#/definitions/engineering_crs\" + },\n \"conversion\": { \"$ref\": \"#/definitions/conversion\" },\n + \ \"coordinate_system\": { \"$ref\": \"#/definitions/coordinate_system\" + },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": {},\n + \ \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"base_crs\", \"conversion\", + \"coordinate_system\" ],\n \"additionalProperties\": false\n },\n\n + \ \"derived_geodetic_crs\": {\n \"type\": \"object\",\n \"allOf\": + [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": {\n + \ \"type\": { \"type\": \"string\",\n \"enum\": [\"DerivedGeodeticCRS\",\n + \ \"DerivedGeographicCRS\"] },\n \"name\": + { \"type\": \"string\" },\n \"base_crs\": { \"$ref\": \"#/definitions/geodetic_crs\" + },\n \"conversion\": { \"$ref\": \"#/definitions/conversion\" },\n + \ \"coordinate_system\": { \"$ref\": \"#/definitions/coordinate_system\" + },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": {},\n + \ \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"base_crs\", \"conversion\", + \"coordinate_system\" ],\n \"additionalProperties\": false\n },\n\n + \ \"derived_parametric_crs\": {\n \"type\": \"object\",\n \"allOf\": + [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": {\n + \ \"type\": { \"type\": \"string\",\n \"enum\": [\"DerivedParametricCRS\"] + },\n \"name\": { \"type\": \"string\" },\n \"base_crs\": { \"$ref\": + \"#/definitions/parametric_crs\" },\n \"conversion\": { \"$ref\": \"#/definitions/conversion\" + },\n \"coordinate_system\": { \"$ref\": \"#/definitions/coordinate_system\" + },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": {},\n + \ \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"base_crs\", \"conversion\", + \"coordinate_system\" ],\n \"additionalProperties\": false\n },\n\n + \ \"derived_projected_crs\": {\n \"type\": \"object\",\n \"allOf\": + [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": {\n + \ \"type\": { \"type\": \"string\",\n \"enum\": [\"DerivedProjectedCRS\"] + },\n \"name\": { \"type\": \"string\" },\n \"base_crs\": { \"$ref\": + \"#/definitions/projected_crs\" },\n \"conversion\": { \"$ref\": \"#/definitions/conversion\" + },\n \"coordinate_system\": { \"$ref\": \"#/definitions/coordinate_system\" + },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": {},\n + \ \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"base_crs\", \"conversion\", + \"coordinate_system\" ],\n \"additionalProperties\": false\n },\n\n + \ \"derived_temporal_crs\": {\n \"type\": \"object\",\n \"allOf\": + [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": {\n + \ \"type\": { \"type\": \"string\",\n \"enum\": [\"DerivedTemporalCRS\"] + },\n \"name\": { \"type\": \"string\" },\n \"base_crs\": { \"$ref\": + \"#/definitions/temporal_crs\" },\n \"conversion\": { \"$ref\": \"#/definitions/conversion\" + },\n \"coordinate_system\": { \"$ref\": \"#/definitions/coordinate_system\" + },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": {},\n + \ \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"base_crs\", \"conversion\", + \"coordinate_system\" ],\n \"additionalProperties\": false\n },\n\n + \ \"derived_vertical_crs\": {\n \"type\": \"object\",\n \"allOf\": + [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": {\n + \ \"type\": { \"type\": \"string\",\n \"enum\": [\"DerivedVerticalCRS\"] + },\n \"name\": { \"type\": \"string\" },\n \"base_crs\": { \"$ref\": + \"#/definitions/vertical_crs\" },\n \"conversion\": { \"$ref\": \"#/definitions/conversion\" + },\n \"coordinate_system\": { \"$ref\": \"#/definitions/coordinate_system\" + },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": {},\n + \ \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"base_crs\", \"conversion\", + \"coordinate_system\" ],\n \"additionalProperties\": false\n },\n\n + \ \"dynamic_geodetic_reference_frame\": {\n \"type\": \"object\",\n + \ \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": + {\n \"type\": { \"type\": \"string\", \"enum\": [\"DynamicGeodeticReferenceFrame\"] + },\n \"name\": {},\n \"anchor\": {},\n \"anchor_epoch\": + {},\n \"ellipsoid\": {},\n \"prime_meridian\": {},\n \"frame_reference_epoch\": + { \"type\": \"number\" },\n \"$schema\" : {},\n \"scope\": {},\n + \ \"area\": {},\n \"bbox\": {},\n \"vertical_extent\": + {},\n \"temporal_extent\": {},\n \"usages\": {},\n \"remarks\": + {},\n \"id\": {}, \"ids\": {}\n },\n \"required\" : [ \"name\", + \"ellipsoid\", \"frame_reference_epoch\" ],\n \"additionalProperties\": + false\n },\n\n \"dynamic_vertical_reference_frame\": {\n \"type\": + \"object\",\n \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" + }],\n \"properties\": {\n \"type\": { \"type\": \"string\", \"enum\": + [\"DynamicVerticalReferenceFrame\"] },\n \"name\": {},\n \"anchor\": + {},\n \"anchor_epoch\": {},\n \"frame_reference_epoch\": { \"type\": + \"number\" },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": + {},\n \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"frame_reference_epoch\" + ],\n \"additionalProperties\": false\n },\n\n \"ellipsoid\": {\n + \ \"type\": \"object\",\n \"oneOf\":[\n {\n \"properties\": + {\n \"$schema\" : { \"type\": \"string\" },\n \"type\": + { \"type\": \"string\", \"enum\": [\"Ellipsoid\"] },\n \"name\": + { \"type\": \"string\" },\n \"semi_major_axis\": { \"$ref\": \"#/definitions/value_in_metre_or_value_and_unit\" + },\n \"semi_minor_axis\": { \"$ref\": \"#/definitions/value_in_metre_or_value_and_unit\" + },\n \"id\": { \"$ref\": \"#/definitions/id\" },\n \"ids\": + { \"$ref\": \"#/definitions/ids\" }\n },\n \"required\" + : [ \"name\", \"semi_major_axis\", \"semi_minor_axis\" ],\n \"additionalProperties\": + false\n },\n {\n \"properties\": {\n \"$schema\" + : { \"type\": \"string\" },\n \"type\": { \"type\": \"string\", + \"enum\": [\"Ellipsoid\"] },\n \"name\": { \"type\": \"string\" + },\n \"semi_major_axis\": { \"$ref\": \"#/definitions/value_in_metre_or_value_and_unit\" + },\n \"inverse_flattening\": { \"type\": \"number\" },\n \"id\": + { \"$ref\": \"#/definitions/id\" },\n \"ids\": { \"$ref\": \"#/definitions/ids\" + }\n },\n \"required\" : [ \"name\", \"semi_major_axis\", + \"inverse_flattening\" ],\n \"additionalProperties\": false\n },\n + \ {\n \"properties\": {\n \"$schema\" : { \"type\": + \"string\" },\n \"type\": { \"type\": \"string\", \"enum\": [\"Ellipsoid\"] + },\n \"name\": { \"type\": \"string\" },\n \"radius\": + { \"$ref\": \"#/definitions/value_in_metre_or_value_and_unit\" },\n \"id\": + { \"$ref\": \"#/definitions/id\" },\n \"ids\": { \"$ref\": \"#/definitions/ids\" + }\n },\n \"required\" : [ \"name\", \"radius\" ],\n \"additionalProperties\": + false\n }\n ],\n \"allOf\": [\n { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" + }\n ]\n },\n\n \"engineering_crs\": {\n \"type\": \"object\",\n + \ \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": + {\n \"type\": { \"type\": \"string\", \"enum\": [\"EngineeringCRS\"] + },\n \"name\": { \"type\": \"string\" },\n \"datum\": { \"$ref\": + \"#/definitions/engineering_datum\" },\n \"coordinate_system\": { \"$ref\": + \"#/definitions/coordinate_system\" },\n \"$schema\" : {},\n \"scope\": + {},\n \"area\": {},\n \"bbox\": {},\n \"vertical_extent\": + {},\n \"temporal_extent\": {},\n \"usages\": {},\n \"remarks\": + {},\n \"id\": {}, \"ids\": {}\n },\n \"required\" : [ \"name\", + \"datum\" ],\n \"additionalProperties\": false\n },\n\n \"engineering_datum\": + {\n \"type\": \"object\",\n \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" + }],\n \"properties\": {\n \"type\": { \"type\": \"string\", \"enum\": + [\"EngineeringDatum\"] },\n \"name\": { \"type\": \"string\" },\n \"anchor\": + { \"type\": \"string\" },\n \"$schema\" : {},\n \"scope\": {},\n + \ \"area\": {},\n \"bbox\": {},\n \"vertical_extent\": + {},\n \"temporal_extent\": {},\n \"usages\": {},\n \"remarks\": + {},\n \"id\": {}, \"ids\": {}\n },\n \"required\" : [ \"name\" + ],\n \"additionalProperties\": false\n },\n\n \"geodetic_crs\": + {\n \"type\": \"object\",\n \"properties\": {\n \"type\": + { \"type\": \"string\", \"enum\": [\"GeodeticCRS\", \"GeographicCRS\"] },\n + \ \"name\": { \"type\": \"string\" },\n \"datum\": {\n \"oneOf\": + [\n { \"$ref\": \"#/definitions/geodetic_reference_frame\" + },\n { \"$ref\": \"#/definitions/dynamic_geodetic_reference_frame\" + }\n ]\n },\n \"datum_ensemble\": { \"$ref\": \"#/definitions/datum_ensemble\" + },\n \"coordinate_system\": { \"$ref\": \"#/definitions/coordinate_system\" + },\n \"deformation_models\": {\n \"type\": \"array\",\n \"items\": + { \"$ref\": \"#/definitions/deformation_model\" }\n },\n \"$schema\" + : {},\n \"scope\": {},\n \"area\": {},\n \"bbox\": {},\n + \ \"vertical_extent\": {},\n \"temporal_extent\": {},\n \"usages\": + {},\n \"remarks\": {},\n \"id\": {}, \"ids\": {}\n },\n + \ \"required\" : [ \"name\" ],\n \"description\": \"One and only + one of datum and datum_ensemble must be provided\",\n \"allOf\": [\n + \ { \"$ref\": \"#/definitions/object_usage\" },\n { \"$ref\": + \"#/definitions/one_and_only_one_of_datum_or_datum_ensemble\" }\n ],\n + \ \"additionalProperties\": false\n },\n\n \"geodetic_reference_frame\": + {\n \"type\": \"object\",\n \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" + }],\n \"properties\": {\n \"type\": { \"type\": \"string\", \"enum\": + [\"GeodeticReferenceFrame\"] },\n \"name\": { \"type\": \"string\" + },\n \"anchor\": { \"type\": \"string\" },\n \"anchor_epoch\": + { \"type\": \"number\" },\n \"ellipsoid\": { \"$ref\": \"#/definitions/ellipsoid\" + },\n \"prime_meridian\": { \"$ref\": \"#/definitions/prime_meridian\" + },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": {},\n + \ \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"ellipsoid\" ],\n + \ \"additionalProperties\": false\n },\n\n \"geoid_model\": {\n + \ \"type\": \"object\",\n \"properties\": {\n \"name\": { + \"type\": \"string\" },\n \"interpolation_crs\": { \"$ref\": \"#/definitions/crs\" + },\n \"id\": { \"$ref\": \"#/definitions/id\" }\n },\n \"required\" + : [ \"name\" ],\n \"additionalProperties\": false\n },\n\n \"id\": + {\n \"type\": \"object\",\n \"properties\": {\n \"authority\": + { \"type\": \"string\" },\n \"code\": {\n \"oneOf\": [ { \"type\": + \"string\" }, { \"type\": \"integer\" } ]\n },\n \"version\": + {\n \"oneOf\": [ { \"type\": \"string\" }, { \"type\": \"number\" + } ]\n },\n \"authority_citation\": { \"type\": \"string\" },\n + \ \"uri\": { \"type\": \"string\" }\n },\n \"required\" : + [ \"authority\", \"code\" ],\n \"additionalProperties\": false\n },\n\n + \ \"ids\": {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/definitions/id\" + }\n },\n\n \"method\": {\n \"type\": \"object\",\n \"properties\": + {\n \"$schema\" : { \"type\": \"string\" },\n \"type\": { \"type\": + \"string\", \"enum\": [\"OperationMethod\"]},\n \"name\": { \"type\": + \"string\" },\n \"id\": { \"$ref\": \"#/definitions/id\" },\n \"ids\": + { \"$ref\": \"#/definitions/ids\" }\n },\n \"required\" : [ \"name\" + ],\n \"allOf\": [\n { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" + }\n ],\n \"additionalProperties\": false\n },\n\n \"id_ids_mutually_exclusive\": + {\n \"not\": {\n \"type\": \"object\",\n \"required\": + [ \"id\", \"ids\" ]\n }\n },\n\n \"one_and_only_one_of_datum_or_datum_ensemble\": + {\n \"allOf\": [\n {\n \"not\": {\n \"type\": + \"object\",\n \"required\": [ \"datum\", \"datum_ensemble\" + ]\n }\n },\n {\n \"oneOf\": [\n { + \"type\": \"object\", \"required\": [\"datum\"] },\n { \"type\": + \"object\", \"required\": [\"datum_ensemble\"] }\n ]\n }\n + \ ]\n },\n\n \"meridian\": {\n \"type\": \"object\",\n \"properties\": + {\n \"$schema\" : { \"type\": \"string\" },\n \"type\": { \"type\": + \"string\", \"enum\": [\"Meridian\"] },\n \"longitude\": { \"$ref\": + \"#/definitions/value_in_degree_or_value_and_unit\" },\n \"id\": { + \"$ref\": \"#/definitions/id\" },\n \"ids\": { \"$ref\": \"#/definitions/ids\" + }\n },\n \"required\" : [ \"longitude\" ],\n \"allOf\": [\n + \ { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" }\n ],\n + \ \"additionalProperties\": false\n },\n\n \"object_usage\": {\n + \ \"anyOf\": [\n {\n \"type\": \"object\",\n \"properties\": + {\n \"$schema\" : { \"type\": \"string\" },\n \"scope\": + { \"type\": \"string\" },\n \"area\": { \"type\": \"string\" },\n + \ \"bbox\": { \"$ref\": \"#/definitions/bbox\" },\n \"vertical_extent\": + { \"$ref\": \"#/definitions/vertical_extent\" },\n \"temporal_extent\": + { \"$ref\": \"#/definitions/temporal_extent\" },\n \"remarks\": + { \"type\": \"string\" },\n \"id\": { \"$ref\": \"#/definitions/id\" + },\n \"ids\": { \"$ref\": \"#/definitions/ids\" }\n },\n + \ \"allOf\": [\n { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" + }\n ]\n },\n {\n \"type\": \"object\",\n \"properties\": + {\n \"$schema\" : { \"type\": \"string\" },\n \"usages\": + { \"$ref\": \"#/definitions/usages\" },\n \"remarks\": { \"type\": + \"string\" },\n \"id\": { \"$ref\": \"#/definitions/id\" },\n \"ids\": + { \"$ref\": \"#/definitions/ids\" }\n },\n \"allOf\": [\n { + \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" }\n ]\n }\n + \ ]\n },\n\n \"parameter_value\": {\n \"type\": \"object\",\n + \ \"properties\": {\n \"$schema\" : { \"type\": \"string\" },\n + \ \"type\": { \"type\": \"string\", \"enum\": [\"ParameterValue\"] },\n + \ \"name\": { \"type\": \"string\" },\n \"value\": {\n \"oneOf\": + [\n { \"type\": \"string\" },\n { \"type\": \"number\" + }\n ]\n },\n \"unit\": { \"$ref\": \"#/definitions/unit\" + },\n \"id\": { \"$ref\": \"#/definitions/id\" },\n \"ids\": + { \"$ref\": \"#/definitions/ids\" }\n },\n \"required\" : [ \"name\", + \"value\" ],\n \"allOf\": [\n { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" + }\n ],\n \"additionalProperties\": false\n },\n\n \"parametric_crs\": + {\n \"type\": \"object\",\n \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" + }],\n \"properties\": {\n \"type\": { \"type\": \"string\", \"enum\": + [\"ParametricCRS\"] },\n \"name\": { \"type\": \"string\" },\n \"datum\": + { \"$ref\": \"#/definitions/parametric_datum\" },\n \"coordinate_system\": + { \"$ref\": \"#/definitions/coordinate_system\" },\n \"$schema\" : + {},\n \"scope\": {},\n \"area\": {},\n \"bbox\": {},\n + \ \"vertical_extent\": {},\n \"temporal_extent\": {},\n \"usages\": + {},\n \"remarks\": {},\n \"id\": {}, \"ids\": {}\n },\n + \ \"required\" : [ \"name\", \"datum\" ],\n \"additionalProperties\": + false\n },\n\n \"parametric_datum\": {\n \"type\": \"object\",\n + \ \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": + {\n \"type\": { \"type\": \"string\", \"enum\": [\"ParametricDatum\"] + },\n \"name\": { \"type\": \"string\" },\n \"anchor\": { \"type\": + \"string\" },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": + {},\n \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\" ],\n \"additionalProperties\": + false\n },\n\n \"point_motion_operation\": {\n \"$comment\": \"Not + implemented in PROJ (at least as of PROJ 9.1)\",\n \"type\": \"object\",\n + \ \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": + {\n \"type\": { \"type\": \"string\", \"enum\": [\"PointMotionOperation\"] + },\n \"name\": { \"type\": \"string\" },\n \"source_crs\": { + \"$ref\": \"#/definitions/crs\" },\n \"method\": { \"$ref\": \"#/definitions/method\" + },\n \"parameters\": {\n \"type\": \"array\",\n \"items\": + { \"$ref\": \"#/definitions/parameter_value\" }\n },\n \"accuracy\": + { \"type\": \"string\" },\n \"$schema\" : {},\n \"scope\": {},\n + \ \"area\": {},\n \"bbox\": {},\n \"vertical_extent\": + {},\n \"temporal_extent\": {},\n \"usages\": {},\n \"remarks\": + {},\n \"id\": {}, \"ids\": {}\n },\n \"required\" : [ \"name\", + \"source_crs\", \"method\", \"parameters\" ],\n \"additionalProperties\": + false\n },\n\n \"prime_meridian\": {\n \"type\": \"object\",\n + \ \"properties\": {\n \"$schema\" : { \"type\": \"string\" },\n + \ \"type\": { \"type\": \"string\", \"enum\": [\"PrimeMeridian\"] },\n + \ \"name\": { \"type\": \"string\" },\n \"longitude\": { \"$ref\": + \"#/definitions/value_in_degree_or_value_and_unit\" },\n \"id\": { + \"$ref\": \"#/definitions/id\" },\n \"ids\": { \"$ref\": \"#/definitions/ids\" + }\n },\n \"required\" : [ \"name\" ],\n \"allOf\": [\n { + \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" }\n ],\n \"additionalProperties\": + false\n },\n\n \"single_operation\": {\n \"oneOf\": [\n { + \"$ref\": \"#/definitions/conversion\" },\n { \"$ref\": \"#/definitions/transformation\" + },\n { \"$ref\": \"#/definitions/point_motion_operation\" }\n ]\n + \ },\n\n \"projected_crs\": {\n \"type\": \"object\",\n \"allOf\": + [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": {\n + \ \"type\": { \"type\": \"string\",\n \"enum\": [\"ProjectedCRS\"] + },\n \"name\": { \"type\": \"string\" },\n \"base_crs\": { \"$ref\": + \"#/definitions/geodetic_crs\" },\n \"conversion\": { \"$ref\": \"#/definitions/conversion\" + },\n \"coordinate_system\": { \"$ref\": \"#/definitions/coordinate_system\" + },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": {},\n + \ \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"base_crs\", \"conversion\", + \"coordinate_system\" ],\n \"additionalProperties\": false\n },\n\n + \ \"temporal_crs\": {\n \"type\": \"object\",\n \"allOf\": [{ + \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": {\n \"type\": + { \"type\": \"string\", \"enum\": [\"TemporalCRS\"] },\n \"name\": + { \"type\": \"string\" },\n \"datum\": { \"$ref\": \"#/definitions/temporal_datum\" + },\n \"coordinate_system\": { \"$ref\": \"#/definitions/coordinate_system\" + },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": {},\n + \ \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\", \"datum\" ],\n \"additionalProperties\": + false\n },\n\n \"temporal_datum\": {\n \"type\": \"object\",\n + \ \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": + {\n \"type\": { \"type\": \"string\", \"enum\": [\"TemporalDatum\"] + },\n \"name\": { \"type\": \"string\" },\n \"calendar\": { \"type\": + \"string\" },\n \"time_origin\": { \"type\": \"string\" },\n \"$schema\" + : {},\n \"scope\": {},\n \"area\": {},\n \"bbox\": {},\n + \ \"vertical_extent\": {},\n \"temporal_extent\": {},\n \"usages\": + {},\n \"remarks\": {},\n \"id\": {}, \"ids\": {}\n },\n + \ \"required\" : [ \"name\", \"calendar\" ],\n \"additionalProperties\": + false\n },\n\n \"temporal_extent\": {\n \"type\": \"object\",\n + \ \"properties\": {\n \"start\": { \"type\": \"string\" },\n \"end\": + { \"type\": \"string\" }\n },\n \"required\" : [ \"start\", \"end\" + ],\n \"additionalProperties\": false\n },\n\n \"transformation\": + {\n \"type\": \"object\",\n \"allOf\": [{ \"$ref\": \"#/definitions/object_usage\" + }],\n \"properties\": {\n \"type\": { \"type\": \"string\", \"enum\": + [\"Transformation\"] },\n \"name\": { \"type\": \"string\" },\n \"source_crs\": + { \"$ref\": \"#/definitions/crs\" },\n \"target_crs\": { \"$ref\": + \"#/definitions/crs\" },\n \"interpolation_crs\": { \"$ref\": \"#/definitions/crs\" + },\n \"method\": { \"$ref\": \"#/definitions/method\" },\n \"parameters\": + {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/definitions/parameter_value\" + }\n },\n \"accuracy\": { \"type\": \"string\" },\n \"$schema\" + : {},\n \"scope\": {},\n \"area\": {},\n \"bbox\": {},\n + \ \"vertical_extent\": {},\n \"temporal_extent\": {},\n \"usages\": + {},\n \"remarks\": {},\n \"id\": {}, \"ids\": {}\n },\n + \ \"required\" : [ \"name\", \"source_crs\", \"target_crs\", \"method\", + \"parameters\" ],\n \"additionalProperties\": false\n },\n\n \"unit\": + {\n \"oneOf\": [\n {\n \"type\": \"string\",\n \"enum\": + [\"metre\", \"degree\", \"unity\"]\n },\n {\n \"type\": \"object\",\n + \ \"properties\": {\n \"type\": { \"type\": \"string\",\n \"enum\": + [\"LinearUnit\", \"AngularUnit\", \"ScaleUnit\",\n \"TimeUnit\", + \"ParametricUnit\", \"Unit\"] },\n \"name\": { \"type\": \"string\" + },\n \"conversion_factor\": { \"type\": \"number\" },\n \"id\": + { \"$ref\": \"#/definitions/id\" },\n \"ids\": { \"$ref\": \"#/definitions/ids\" + }\n },\n \"required\" : [ \"type\", \"name\" ],\n \"allOf\": + [\n { \"$ref\": \"#/definitions/id_ids_mutually_exclusive\" }\n + \ ],\n \"additionalProperties\": false\n }\n ]\n + \ },\n\n \"usages\": {\n \"type\": \"array\",\n \"items\": + {\n \"type\": \"object\",\n \"properties\": {\n \"scope\": + { \"type\": \"string\" },\n \"area\": { \"type\": \"string\" },\n + \ \"bbox\": { \"$ref\": \"#/definitions/bbox\" },\n \"vertical_extent\": + { \"$ref\": \"#/definitions/vertical_extent\" },\n \"temporal_extent\": + { \"$ref\": \"#/definitions/temporal_extent\" }\n },\n \"additionalProperties\": + false\n }\n },\n\n \"value_and_unit\": {\n \"type\": \"object\",\n + \ \"properties\": {\n \"value\": { \"type\": \"number\" },\n \"unit\": + { \"$ref\": \"#/definitions/unit\" }\n },\n \"required\" : [ \"value\", + \"unit\" ],\n \"additionalProperties\": false\n },\n\n \"value_in_degree_or_value_and_unit\": + {\n \"oneOf\": [\n { \"type\": \"number\" },\n { \"$ref\": + \"#/definitions/value_and_unit\" }\n ]\n },\n\n \"value_in_metre_or_value_and_unit\": + {\n \"oneOf\": [\n { \"type\": \"number\" },\n { \"$ref\": + \"#/definitions/value_and_unit\" }\n ]\n },\n\n \"vertical_crs\": + {\n \"type\": \"object\",\n \"properties\": {\n \"type\": + { \"type\": \"string\", \"enum\": [\"VerticalCRS\"] },\n \"name\": + { \"type\": \"string\" },\n \"datum\": {\n \"oneOf\": [\n + \ { \"$ref\": \"#/definitions/vertical_reference_frame\" },\n + \ { \"$ref\": \"#/definitions/dynamic_vertical_reference_frame\" + }\n ]\n },\n \"datum_ensemble\": { \"$ref\": \"#/definitions/datum_ensemble\" + },\n \"coordinate_system\": { \"$ref\": \"#/definitions/coordinate_system\" + },\n \"geoid_model\": { \"$ref\": \"#/definitions/geoid_model\" },\n + \ \"geoid_models\": {\n \"type\": \"array\",\n \"items\": + { \"$ref\": \"#/definitions/geoid_model\" }\n },\n \"deformation_models\": + {\n \"type\": \"array\",\n \"items\": { \"$ref\": \"#/definitions/deformation_model\" + }\n },\n \"$schema\" : {},\n \"scope\": {},\n \"area\": + {},\n \"bbox\": {},\n \"vertical_extent\": {},\n \"temporal_extent\": + {},\n \"usages\": {},\n \"remarks\": {},\n \"id\": {}, + \"ids\": {}\n },\n \"required\" : [ \"name\"],\n \"description\": + \"One and only one of datum and datum_ensemble must be provided\",\n \"allOf\": + [\n { \"$ref\": \"#/definitions/object_usage\" },\n { \"$ref\": + \"#/definitions/one_and_only_one_of_datum_or_datum_ensemble\" },\n {\n + \ \"not\": {\n \"type\": \"object\",\n \"required\": + [ \"geoid_model\", \"geoid_models\" ]\n }\n }\n ],\n + \ \"additionalProperties\": false\n },\n\n \"vertical_extent\": + {\n \"type\": \"object\",\n \"properties\": {\n \"minimum\": + { \"type\": \"number\" },\n \"maximum\": { \"type\": \"number\" },\n + \ \"unit\": { \"$ref\": \"#/definitions/unit\" }\n },\n \"required\" + : [ \"minimum\", \"maximum\" ],\n \"additionalProperties\": false\n },\n\n + \ \"vertical_reference_frame\": {\n \"type\": \"object\",\n \"allOf\": + [{ \"$ref\": \"#/definitions/object_usage\" }],\n \"properties\": {\n + \ \"type\": { \"type\": \"string\", \"enum\": [\"VerticalReferenceFrame\"] + },\n \"name\": { \"type\": \"string\" },\n \"anchor\": { \"type\": + \"string\" },\n \"anchor_epoch\": { \"type\": \"number\" },\n \"$schema\" + : {},\n \"scope\": {},\n \"area\": {},\n \"bbox\": {},\n + \ \"vertical_extent\": {},\n \"temporal_extent\": {},\n \"usages\": + {},\n \"remarks\": {},\n \"id\": {}, \"ids\": {}\n },\n + \ \"required\" : [ \"name\" ],\n \"additionalProperties\": false\n + \ }\n\n }\n}\n" + headers: {} + status: + code: 200 + message: OK version: 1 diff --git a/extensions/datacube/tests/data-files/item.json b/extensions/datacube/tests/data-files/item.json index 3d326ffd8..565f40eca 100644 --- a/extensions/datacube/tests/data-files/item.json +++ b/extensions/datacube/tests/data-files/item.json @@ -1,7 +1,7 @@ { "stac_version": "1.1.0", "stac_extensions": [ - "https://stac-extensions.github.io/datacube/v2.2.0/schema.json" + "https://stac-extensions.github.io/datacube/v2.3.0/schema.json" ], "id": "datacube-123", "type": "Feature", diff --git a/extensions/datacube/tests/test_datacube.py b/extensions/datacube/tests/test_datacube.py index 7c02093dd..a9e99b9d8 100644 --- a/extensions/datacube/tests/test_datacube.py +++ b/extensions/datacube/tests/test_datacube.py @@ -290,7 +290,7 @@ def test_set_dimensions(ext_item: Item) -> None: assert ext_item.validate() -@pytest.mark.parametrize("version", ["v1.0.0", "v2.0.0", "v2.1.0"]) +@pytest.mark.parametrize("version", ["v1.0.0", "v2.0.0", "v2.1.0", "v2.2.0"]) def test_migrate(version: str, ext_item: Item) -> None: item_dict = ext_item.to_dict(include_self_link=False, transform_hrefs=False) item_dict["stac_extensions"] = [ @@ -298,7 +298,7 @@ def test_migrate(version: str, ext_item: Item) -> None: ] item = Item.from_dict(item_dict, migrate=True) assert ( - "https://stac-extensions.github.io/datacube/v2.2.0/schema.json" + "https://stac-extensions.github.io/datacube/v2.3.0/schema.json" in item.stac_extensions )