Collect Metadata
Umbra delivers a STAC metadata file alongside each Collect. The metadata file is available in multiple places:
- As an asset download in Canopy
- Pushed alongside user requested Product Types when performing customer deliveries via Delivery Configs
STAC metadata is a GeoJSON format, where the metadata for a collect is stored under the "properties"
field.
Umbra Specific STAC Fields
The below table of definitions are for Umbra specific STAC Item metadata keys in the"properties"
field.
Field Name | Type | Description |
---|---|---|
umbra:best_resolution_azimuth_meters | number | The best possible azimuth resolution achievable from the CPHD data product processing. |
umbra:best_resolution_range_meters | number | The best possible range resolution achievable from the CPHD data product processing. |
umbra:collect_id | UUID | The Collect ID if the task is composed of a single collect for the task. Umbra Collect docs |
umbra:collect_ids | [UUID] | The Collect IDs if the task is composed of multiple collects for the task. Umbra Collect docs |
umbra:grazing_angle_degrees | number | The angle between the local vertical and the line of sight. It is a complement to the incidence angle (they always add up to 90°). It determines how steep (or shallow) the angle of collection is. As a general rule, a higher grazing angle provides more image contrast but reduces the amount of access to the AOI. |
umbra:organization_id | string | The Umbra provided organization id for the task. ORG ID in Canopy organization overview |
umbra:platform_pair | string | Only defined in the case where "sar:instrument_mode" == "MULTISTATIC" . Unique name of the Umbra satellite which transmitted pulse data to the Umbra satellite defined by the platform property in a multistatic collect. The following regex defines the usable platform strings: Umbra-[\d]{2,}+ . For example "Umbra-09" is viable Umbra platform name, but "Umbra9" , "Umbra09" , "umbra-09" , "UMBRA-09" , and "Umbra_09" are all invalid. Definition from common metadata |
umbra:slant_range_meters | number | The Slant Range is the straight line distance between the target location and the satellite in meters. |
umbra:squint_angle_degrees_off_broadside | number | 90° is in the direction of the velocity vector for both left and right observation directions. 90° is also in the direction opposite of the velocity vector. 0° is off broadside for both left and right observation directions. |
umbra:squint_angle_engineering_degrees | number | 0° signifies the satellite's velocity vector - a reference point for orientation determination. Negative is to the left of vehicle and positive to the right. 180°/-180° is the opposite direction of the velocity vector. |
umbra:squint_angle_exploitation_degrees | number | On the right side of vehicle, -90° is velocity vector direction, 0° broadside and 90° opposite of velocity vector. on Left side 90° is velocity vector direction, 0° broadside and -90° opposite to velocity vector. To be used in conjunction with SAR extension sar:observation_direction to determine "left" and "right" antenna pointing direction. |
umbra:target_azimuth_angle_degrees | number | The angle between the projected vector [the collection geometry of the particular opportunity] and a reference vector [north] on the reference plane is called the azimuth. This identifies the direction from which the capture will occur. As an example, a target azimuth angle of 90 degrees means the satellite will be due looking due west at the target from a position due east of the target. |
umbra:task_id | UUID | REQUIRED. The Task ID. Umbra Task docs |
Interpretation of STAC Common Metadata Fields
For the fundamental STAC Item fields, Umbra provides additional information on how we utilize the common metadata. There is one STAC Item per processing job at Umbra, which means one Task could have multiple Metadata STAC Items. For Spotlight Tasks, there would be a single Metadata STAC Item representing the Spotlight Collect that fulfills the Task.
The STAC version supported by Umbra is 1.0.0 ("stac_version": "1.0.0"
). The currently supported "stac_extension"
field will be :
"stac_extensions" : [
"https://stac-extensions.github.io/processing/v1.0.0/schema.json",
"https://stac-extensions.github.io/sar/v1.0.0/schema.json",
"https://stac-extensions.github.io/sat/v1.0.0/schema.json",
"https://stac-extensions.github.io/view/v1.0.0/schema.json"
]
If there are any other common metadata fields not listed below, then those fields are either not currently supported in Umbra's STAC Item or they exactly follow the definitions from STAC item-spec and common-metadata.
Field Name | Type | Description |
---|---|---|
id | UUID | A single umbra:task_id or umbra:collect_id can have multiple STAC Items. The id field of the STAC Item at Umbra is associated with the processing of a task/collect (prior to Dec, 2024, the id was not associated with the processing of an task, but instead the id was randomly generated). One collect can be processed multiple times, each time it's processed with new parameters a STAC Item will be created and the processing id will be the used as the STAC Item id |
created | string | Typically the date and time at the completion of processing of the data (although there may be collects whose metadata is not associated with the processing date because of some fix to metadata). It is formatted according to RFC 3339, section 5.6. Definition from common metadata. |
updated | string | The date and time of the last update to STAC metadata. It is formatted according to RFC 3339, section 5.6. Definition from common metadata. |
datetime | string | The date and time at the center of aperture of the collect, which must be in UTC. It is formatted according to RFC 3339, section 5.6. Definition from common metadata. |
start_datetime | string | The start date and time associated with the first pulse of the task, in UTC. It is formatted according to RFC 3339, section 5.6. |
end_datetime | string | The end date and time associated with the last pulse of the task, in UTC. It is formatted according to RFC 3339, section 5.6. |
platform | string | Unique name of the specific Umbra satellite which received the pulse data. In the case of "sar:instrument_mode" == "MULTISTATIC" , the Umbra satellite receiving data is defined by platform and the satellite transmitting is defined by the umbra:platform_pair field. The following regex defines the usable platform strings: Umbra-[\d]{2,}+ . For example "Umbra-09" is viable Umbra platform name, but "Umbra9" , "Umbra09" , "umbra-09" , "UMBRA-09" , and "Umbra_09" are all invalid. Definition from common metadata |
constellation | string | Name of the constellation to which the platform belongs. Always set to "umbra" . Definition from common metadata |
providers | Provider Object | Additional information about Umbra. Definition from common metadata |
geometry | GeoJSON Geometry Object | Defines the full footprint of the collect(s) of the STAC Item's task represented by this Item, formatted according to RFC 7946, section 3.1. The footprint should be the default GeoJSON geometry, though additional geometries can be included. Coordinates are specified in Longitude/Latitude or Longitude/Latitude/Elevation based on WGS 84. |
bbox | [number] | Bounding Box of the task. 4 floats that define the bounding box are formatted as follows, [minimum longitude, minimum latitude, maximum longitude, maximum latitude]. Formatted according to RFC 7946, section 5. |
Fields From Other Extensions
The following other extensions are used along with the above fields for an Umbra STAC Item
- https://github.com/stac-extensions/processing/tree/v1.0.0
- https://github.com/stac-extensions/sar/tree/v1.0.0
- https://github.com/stac-extensions/sat/tree/v1.0.0
- https://github.com/stac-extensions/view/tree/v1.0.0
Of the above listed extensions the following fields are utilized by Umbra
Field Name | Type | Description |
---|---|---|
processing:software | Map<string, string> | A dictionary with name/version of the Umbra processing library involved during the production of the data for provenance purposes. |
sar:center_frequency | number | The center frequency of the instrument, in gigahertz (GHz). |
sar:frequency_band | string | REQUIRED. For Umbra this will always be the "X" band. common frequency band names and definitions |
sar:instrument_mode | string | REQUIRED. The name of the sensor acquisition mode that is commonly used. For example, "SPOTLIGHT" for Umbra spotlight collect or "MULTISTATIC" for multistatic tasks |
sar:looks_azimuth | number | Number of azimuth looks, which is the number of groups of signal samples (looks) parallel to the flight path. |
sar:looks_range | number | Number of range looks, which is the number of groups of signal samples (looks) perpendicular to the flight path. Umbra satellites do not perform range multi-looking so this is always 1 for now. |
sar:observation_direction | string | Antenna pointing direction relative to the flight trajectory of the satellite, either "left" or "right" . |
sar:polarizations | [string] | REQUIRED. Any combination of polarizations. "VV" , "HH" , or "SS" (slant). |
sar:product_type | string | *DEPRECATED in favor of product:type .* For Umbra this will always be "GEC" |
sar:resolution_azimuth | number | The azimuth resolution, which is the maximum ability to distinguish two adjacent targets parallel to the flight path, in meters (m). |
sar:resolution_range | number | The range resolution, which is the maximum ability to distinguish two adjacent targets perpendicular to the flight path, in meters (m). |
sat:orbit_state | string | The state of the orbit. Either "ascending" or "descending" |
view:azimuth | number | Viewing azimuth angle. The angle measured from the sub-satellite point (point on the ground below the platform) between the scene center and true north. Measured clockwise from north in degrees (0-360). |
view:incidence_angle | number | The incidence angle is the angle between the vertical (normal) to the intercepting surface and the line of sight back to the satellite at the scene center. Measured in degrees (0-90). |
Squint Field Differences
Diagram demonstrating difference between umbra:squint_angle_engineering_degrees
, umbra:squint_angle_exploitation_degrees
, and umbra:squint_angle_degrees_off_broadside
:
.
Umbra STAC Extension v1.0.0 JSON Schema
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://stac-extensions.github.io/umbra/v1.0.0/schema.json#",
"title": "Umbra STAC Extension",
"description": "STAC Extension for Umbra STAC Items .",
"oneOf": [
{
"$comment": "This is the schema for STAC Items.",
"allOf": [
{
"$ref": "#/definitions/stac_extensions"
},
{
"type": "object",
"required": [
"type",
"properties",
"assets"
],
"properties": {
"type": {
"const": "Feature"
},
"properties": {
"allOf": [
{
"$comment": "Require fields here for Item Properties.",
"required": [
"umbra:task_id"
]
},
{
"$ref": "#/definitions/fields"
}
]
},
"assets": {
"$comment": "This validates the fields in Item Assets, but does not require them.",
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/fields"
}
}
}
}
]
},
{
"$comment": "This is the schema for STAC Collections.",
"type": "object",
"allOf": [
{
"required": [
"type"
],
"properties": {
"type": {
"const": "Collection"
}
}
},
{
"$ref": "#/definitions/stac_extensions"
}
],
"anyOf": [
{
"$comment": "This is the schema for the top-level fields in a Collection. Remove this if this extension does not define top-level fields for Collections.",
"allOf": [
{
"$comment": "Require fields here for Collections (top-level).",
"required": [
"umbra:task_id"
]
},
{
"$ref": "#/definitions/fields"
}
]
},
{
"$comment": "This validates the fields in Collection Assets, but does not require them.",
"required": [
"assets"
],
"properties": {
"assets": {
"type": "object",
"not": {
"additionalProperties": {
"not": {
"allOf": [
{
"$ref": "#/definitions/require_any_field"
},
{
"$ref": "#/definitions/fields"
}
]
}
}
}
}
}
},
{
"$comment": "This is the schema for the fields in Item Asset Definitions. It doesn't require any fields.",
"required": [
"item_assets"
],
"properties": {
"item_assets": {
"type": "object",
"not": {
"additionalProperties": {
"not": {
"allOf": [
{
"$ref": "#/definitions/require_any_field"
},
{
"$ref": "#/definitions/fields"
}
]
}
}
}
}
}
},
{
"$comment": "This is the schema for the fields in Summaries. By default, only checks the existence of the properties, but not the schema of the summaries.",
"required": [
"summaries"
],
"properties": {
"summaries": {
"$ref": "#/definitions/require_any_field"
}
}
}
]
}
],
"definitions": {
"stac_extensions": {
"type": "object",
"required": [
"stac_extensions"
],
"properties": {
"stac_extensions": {
"type": "array",
"contains": {
"const": "https://stac-extensions.github.io/umbra/v1.0.0/schema.json"
}
}
}
},
"require_any_field": {
"$comment": "Please list all fields here so that we can force the existence of one of them in other parts of the schemas.",
"anyOf": [
{"required": ["umbra:grazing_angle_degrees"]},
{"required": ["umbra:squint_angle_engineering_degrees"]},
{"required": ["umbra:squint_angle_exploitation_degrees"]},
{"required": ["umbra:umbra:squint_angle_degrees_off_broadside"]},
{"required": ["umbra:slant_range_meters"]},
{"required": ["umbra:target_azimuth_angle_degrees"]},
{"required": ["umbra:organization_id"]},
{"required": ["umbra:task_id"]},
{"required": ["umbra:collect_id"]}
]
},
"fields": {
"$comment": "Add your new fields here. Don't require them here, do that above in the corresponding schema.",
"type": "object",
"properties": {
"umbra:best_resolution_azimuth_meters": {
"type": "number",
"description": "The best possible azimuth resolution achievable from the CPHD data product processing.",
"minimum": 0
},
"umbra:best_resolution_range_meters": {
"type": "number",
"description": "The best possible range resolution achievable from the CPHD data product processing.",
"minimum": 0
},
"umbra:collect_id": {
"type": "string",
"description": "The collect id if the task is composed of a single collect for the task."
},
"umbra:collect_ids": {
"type": "array",
"description": "The collect ids if the task is composed of multiple collects for the task."
},
"umbra:grazing_angle_degrees": {
"type": "number",
"description": "The angle between the local vertical and the line of sight."
},
"umbra:organization_id": {
"type": "string",
"description": "Umbra Org Id code"
},
"umbra:platform_pair": {
"type": "string",
"description": "Transmitting platform name in the case of a Multistatic collect"
},
"umbra:slant_range_meters": {
"type": "number",
"description": "The slant range is the straight line distance between the target location and the satellite in meters."
},
"umbra:squint_angle_degrees_off_broadside": {
"type": "number",
"minimum": 0,
"maximum": 90,
"description": "squint angle in degrees off broadside, where zero is directly broadside"
},
"umbra:squint_angle_engineering_degrees": {
"type": "number",
"minimum": -180,
"maximum": 180,
"description": "squint angle engineering degrees. if negative on left side, if positive on right, 0 in direction of velocity."
},
"umbra:squint_angle_exploitation_degrees": {
"type": "number",
"minimum": -90,
"maximum": 90,
"description": "squint angle exploitation degrees. requires pairing with sat:observation_direction to know the meaning of the value. The least useful of the three squints."
},
"umbra:target_azimuth_angle_degrees": {
"type": "number",
"minimum": 0,
"maximum": 360,
"description": "The angle between the projected vector [the collection geometry of the particular opportunity] and a reference vector [north] on the reference plane is called the azimuth"
},
"umbra:task_id": {
"type": "string",
"description": "Task uuid id"
}
},
"patternProperties": {
"^(?!umbra:)": {
"$comment": "Above, change `umbra` to the prefix of this extension"
}
},
"additionalProperties": false
}
}
}
Updated about 1 month ago