Skip to content

Commit 1bf9b01

Browse files
Add orbit state vectors (#8)
* Add orbit state vectors * updated changelog * json schema * Remove .vscode/settings.json * feat: Add validation for orbit state vectors with date-time strings * updated versions for validation * Update README.md Co-authored-by: Matthias Mohr <m.mohr@uni-muenster.de> * feat: Update date-time string pattern in JSON schema for improved validation * Update README.md Co-authored-by: Matthias Mohr <m.mohr@uni-muenster.de> * docs: Improve clarity in README regarding state vector file references --------- Co-authored-by: Matthias Mohr <m.mohr@uni-muenster.de>
1 parent 902f94e commit 1bf9b01

File tree

6 files changed

+125
-18
lines changed

6 files changed

+125
-18
lines changed

.github/remark.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
plugins:
2+
# GitHub Flavored Markdown
3+
- remark-gfm
24
# Check links
35
- validate-links
46
# Apply some recommended defaults for consistency
@@ -8,6 +10,7 @@ plugins:
810
# General formatting
911
- - remark-lint-emphasis-marker
1012
- '*'
13+
- remark-lint-no-undefined-references
1114
- remark-lint-hard-break-spaces
1215
- remark-lint-blockquote-indentation
1316
- remark-lint-no-consecutive-blank-lines
@@ -37,7 +40,7 @@ plugins:
3740
- - remark-lint-unordered-list-marker-style
3841
- '-'
3942
- - remark-lint-list-item-indent
40-
- space
43+
- space
4144
# Tables
4245
- remark-lint-table-pipes
4346
- remark-lint-no-literal-urls

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
99
### Added
1010

1111
- Added `orbit_cycle` field ([#6](https://github.com/stac-extensions/sat/issues/6))
12+
- Added sat:orbit_state_vectors field ([#8](https://github.com/stac-extensions/sat/issues/8))
1213

1314
### Changed
1415

README.md

Lines changed: 64 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,15 @@ It will often be combined with other extensions that describe the actual data, s
2121

2222
## Item Properties
2323

24-
| Field Name | Type | Description |
25-
| ------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
26-
| sat:platform_international_designator | string | The International Designator, also known as COSPAR ID, and NSSDCA ID |
27-
| sat:orbit_state | string | The state of the orbit. Either `ascending` or `descending` for polar orbiting satellites, or `geostationary` for geosynchronous satellites |
28-
| sat:orbit_cycle | integer | The number of repeat cycle done by the satellite at the time of the acquisition. [Repeat cycle](https://ltb.itc.utwente.nl/page/498/concept/81577) is the time between two successive identical orbits. |
29-
| sat:absolute_orbit | integer | The absolute orbit number at the time of acquisition. |
30-
| sat:relative_orbit | integer | The relative orbit number at the time of acquisition. |
31-
| sat:anx_datetime | string | The [Ascending Node](https://en.wikipedia.org/wiki/Orbital_node) Crossing (ANX) time, in UTC. It is formatted according to [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). |
24+
| Field Name | Type | Description |
25+
| ------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
26+
| sat:platform_international_designator | string | The International Designator, also known as COSPAR ID, and NSSDCA ID |
27+
| sat:orbit_state | string | The state of the orbit. Either `ascending` or `descending` for polar orbiting satellites, or `geostationary` for geosynchronous satellites |
28+
| sat:absolute_orbit | integer | The absolute orbit number at the time of acquisition. |
29+
| sat:relative_orbit | integer | The relative orbit number at the time of acquisition. |
30+
| sat:orbit_cycle | integer | The number of repeat cycle done by the satellite at the time of the acquisition. [Repeat cycle](https://ltb.itc.utwente.nl/page/498/concept/81577) is the time between two successive identical orbits. |
31+
| sat:orbit_state_vectors | Map<string, \[number]> | The state vectors of the satellite at the time of acquisition. |
32+
| sat:anx_datetime | string | The [Ascending Node](https://en.wikipedia.org/wiki/Orbital_node) Crossing (ANX) time, in UTC. It is formatted according to [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). |
3233

3334
*At least one of the fields must be specified.*
3435

@@ -73,6 +74,61 @@ The repeat cycle of the satellite. The repeat cycle is the number of orbits requ
7374
position in its orbit. It is used to determine the relative orbit number. For instance, a satellite with a 16-day repeat cycle
7475
will have 16 relative orbits.
7576

77+
#### sat:orbit_state_vectors
78+
79+
The state vectors of the satellite at the time of acquisition. The state vectors are a set of parameters that describe the
80+
position and velocity of the satellite at a given time. The state vectors are used to compute the position of the satellite
81+
at any time during the acquisition.
82+
The state vectors are usually provided in the [ECI](https://en.wikipedia.org/wiki/Earth-centered_inertial) frame.
83+
The field is a map where the key is the time of the state vector and the value is an array of 6 elements (optional 9).
84+
The first 3 elements are the position of the satellite in meters and the last 3 elements are the velocity of the satellite in meters per second.
85+
The optional 3 additional elements are the acceleration of the satellite in meters per second squared.
86+
87+
Example:
88+
89+
```json
90+
{
91+
"sat:orbit_state_vectors": {
92+
"2015-03-05T05:19:40.103Z": [
93+
5082939.4189831074,
94+
1595651.7369050409,
95+
4648033.5588545678,
96+
5173.8779329387489,
97+
-269.5432365485845,
98+
-5550.246440359806
99+
],
100+
"2015-03-05T05:19:45.449Z": [
101+
5110519.0376543682,
102+
1594174.328112772,
103+
4618284.7202579351,
104+
5143.1200754073143,
105+
-283.12343661734587,
106+
-5578.2160610647188
107+
],
108+
"2015-03-05T05:19:50.449Z": [
109+
5136162.3887853986,
110+
1592727.024757518,
111+
4590328.5904560406,
112+
5114.1961953273549,
113+
-295.79384304587683,
114+
-5604.2108611458289
115+
]
116+
}
117+
}
118+
```
119+
120+
It is recommended that the state vectors are provided in a separate file and referenced as a link with relationship type `sat:osv`.
121+
The file should correspond to the example above.
122+
123+
## Relation types
124+
125+
The following types should be used as applicable `rel` types in the
126+
[Link Object](https://github.com/radiantearth/stac-spec/tree/master/item-spec/item-spec.md#link-object).
127+
128+
| Type | Description |
129+
| ------- | -------------------------------------------------- |
130+
| sat:osv | Link to a file containing the orbit state vectors. |
131+
76132
## Contributing
77133

78134
All contributions are subject to the

examples/example-sentinel1.json

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,32 @@
5555
"sat:relative_orbit": 95,
5656
"sat:anx_datetime": "2015-03-05T04:41:46.5788740Z",
5757
"sat:orbit_cycle": 407,
58+
"sat:orbit_state_vectors": {
59+
"2015-03-05T05:19:40.103Z": [
60+
5082939.418983107,
61+
1595651.736905041,
62+
4648033.558854568,
63+
5173.877932938749,
64+
-269.5432365485845,
65+
-5550.246440359806
66+
],
67+
"2015-03-05T05:19:45.449Z": [
68+
5110519.037654368,
69+
1594174.328112772,
70+
4618284.720257935,
71+
5143.120075407314,
72+
-283.1234366173459,
73+
-5578.216061064719
74+
],
75+
"2015-03-05T05:19:50.449Z": [
76+
5136162.388785399,
77+
1592727.024757518,
78+
4590328.590456041,
79+
5114.196195327355,
80+
-295.7938430458768,
81+
-5604.210861145829
82+
]
83+
},
5884
"sar:instrument_mode": "IW",
5985
"sar:polarizations": [
6086
"VV",

json-schema/schema.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@
6161
"required": [
6262
"sat:orbit_cycle"
6363
]
64+
},
65+
{
66+
"required": [
67+
"sat:orbit_state_vectors"
68+
]
6469
}
6570
]
6671
},
@@ -133,6 +138,21 @@
133138
"sat:orbit_cycle": {
134139
"type": "integer",
135140
"minimum": 1
141+
},
142+
"sat:orbit_state_vectors": {
143+
"type": "object",
144+
"$comment": "The key is a date-time string, and the value is an array of numbers.",
145+
"patternProperties": {
146+
"^(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))$": {
147+
"type": "array",
148+
"items": {
149+
"type": "number"
150+
},
151+
"minItems": 6,
152+
"maxItems": 9
153+
}
154+
},
155+
"additionalProperties": false
136156
}
137157
},
138158
"patternProperties": {

package.json

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "stac-extensions",
2+
"name": "stac-extension-sat",
33
"version": "1.0.0",
44
"scripts": {
55
"test": "npm run check-markdown && npm run check-examples",
@@ -8,13 +8,14 @@
88
"format-examples": "stac-node-validator . --format --schemaMap https://stac-extensions.github.io/sat/v1.0.0/schema.json=./json-schema/schema.json"
99
},
1010
"dependencies": {
11-
"remark-cli": "^8.0.0",
12-
"remark-lint": "^7.0.0",
13-
"remark-lint-no-html": "^2.0.0",
14-
"remark-preset-lint-consistent": "^3.0.0",
15-
"remark-preset-lint-markdown-style-guide": "^3.0.0",
16-
"remark-preset-lint-recommended": "^4.0.0",
17-
"remark-validate-links": "^10.0.0",
18-
"stac-node-validator": "^1.0.0"
11+
"remark-cli": "^12.0.0",
12+
"remark-gfm": "^4.0.0",
13+
"remark-lint": "^9.1.2",
14+
"remark-lint-no-html": "^3.1.2",
15+
"remark-preset-lint-consistent": "^5.1.2",
16+
"remark-preset-lint-markdown-style-guide": "^5.1.3",
17+
"remark-preset-lint-recommended": "^6.1.3",
18+
"remark-validate-links": "^13.0.0",
19+
"stac-node-validator": "^1.3.0"
1920
}
2021
}

0 commit comments

Comments
 (0)