{"id":37651451,"url":"https://github.com/stac-extensions/eo","last_synced_at":"2026-01-16T11:34:15.512Z","repository":{"id":40720313,"uuid":"351594161","full_name":"stac-extensions/eo","owner":"stac-extensions","description":"Covers electro-optical data that represents a snapshot of the Earth. It could consist of cloud cover and multiple spectral bands, for example visible bands, infrared bands, red edge bands and panchromatic bands.","archived":false,"fork":false,"pushed_at":"2025-11-24T15:35:13.000Z","size":51,"stargazers_count":12,"open_issues_count":3,"forks_count":10,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-11-28T04:17:56.024Z","etag":null,"topics":["eo","stable","stac"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stac-extensions.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-03-25T22:34:39.000Z","updated_at":"2025-11-24T15:34:48.000Z","dependencies_parsed_at":"2023-02-15T16:15:53.490Z","dependency_job_id":"b7216e25-d523-4b4b-bb4d-1962e8c457d7","html_url":"https://github.com/stac-extensions/eo","commit_stats":{"total_commits":24,"total_committers":6,"mean_commits":4.0,"dds":"0.41666666666666663","last_synced_commit":"3e5c9239a74276feaf49efa5274c252e977f9ebc"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":"stac-extensions/template","purl":"pkg:github/stac-extensions/eo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stac-extensions%2Feo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stac-extensions%2Feo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stac-extensions%2Feo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stac-extensions%2Feo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stac-extensions","download_url":"https://codeload.github.com/stac-extensions/eo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stac-extensions%2Feo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478349,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T06:30:42.265Z","status":"ssl_error","status_checked_at":"2026-01-16T06:30:16.248Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["eo","stable","stac"],"created_at":"2026-01-16T11:34:14.864Z","updated_at":"2026-01-16T11:34:15.506Z","avatar_url":"https://github.com/stac-extensions.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Electro-Optical Extension Specification\n\n- **Title:** Electro-Optical\n- **Identifier:** \u003chttps://stac-extensions.github.io/eo/v2.0.0/schema.json\u003e\n- **Field Name Prefix:** eo\n- **Scope:** Item, Collection\n- **Extension [Maturity Classification](https://github.com/radiantearth/stac-spec/tree/master/extensions/README.md#extension-maturity):** Stable\n- **Owner**: @matthewhanson\n- **History:** [Prior to March 30, 2021](https://github.com/radiantearth/stac-spec/commits/v1.0.0-rc.2/extensions/eo)\n\nThis document explains the fields of the Electro-Optical (EO) Extension to the\n[SpatioTemporal Asset Catalog](https://github.com/radiantearth/stac-spec) (STAC) specification.\n\nEO data is considered to be data that represents a snapshot of the Earth for a single date and time. It\ncould consist of multiple spectral bands in any part of the electromagnetic spectrum. Examples of EO\ndata include sensors with visible, short-wave and mid-wave IR bands (e.g., the OLI instrument on\nLandsat-8), long-wave IR bands (e.g. TIRS aboard Landsat-8).\n\nIt is strongly recommended to use [Instrument Fields](https://github.com/radiantearth/stac-spec/tree/master/item-spec/common-metadata.md#instrument)\nwith the EO extension, to provide information about the platform (satellite, aerial, etc) used to capture the images.\n\nFor defining view geometry of data, it is strongly recommended to use the [View Extension](https://github.com/stac-extensions/view).\n\n- Examples:\n  - [Collection example](examples/collection.json)\n  - [Item example](examples/item.json)\n- [JSON Schema](json-schema/schema.json)\n- [Changelog](./CHANGELOG.md)\n\n## Fields\n\nThe fields in the table below can be used in these parts of STAC documents:\n\n- [ ] Catalogs\n- [ ] Collections\n- [x] Item Properties (incl. Summaries in Collections)\n- [x] Assets (for both Collections and Items, incl. Item Asset Definitions in Collections)\n- [x] Bands\n- [ ] Links\n\n| Field Name             | Type   | Description                                                                                                                                                        |\n| ---------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| eo:cloud_cover         | number | Estimate of cloud cover as a percentage (0-100).                                                                                                                   |\n| eo:snow_cover          | number | Estimate of snow and ice cover as a percentage (0-100).                                                                                                            |\n| eo:common_name         | string | The name commonly used to refer to the band to make it easier to search for bands across instruments. See the [list of accepted common names](#common-band-names). |\n| eo:center_wavelength   | number | The center wavelength of the band, in micrometers (μm).                                                                                                            |\n| eo:full_width_half_max | number | Full width at half maximum (FWHM). The width of the band, as measured at half the maximum transmission, in micrometers (μm).                                       |\n| eo:solar_illumination  | number | The solar illumination of the band, as measured at half the maximum transmission, in W/m2/micrometers.                                                             |\n\n*At least one of the fields must be specified.*\n\n### Coverages\n\nThis extension defines some common coverage types (cloud and snow/ice cover) as a percentages (0-100) of the entire scene:\n- `eo:cloud_cover`\n- `eo:snow_cover`\n\nIt is important to consider only the valid data regions, excluding any \"nodata\" areas while calculating both the coverages.\nIf such information is not available or can't be calculated, the fields should not be provided.\n\nUsually, the properties should be used in Item Properties rather than Item Assets,\nas an Item from an electro-optical source is a single snapshot of the Earth, so the coverages usually apply to all assets.\n\n### Spectral Bands\n\n\u003e \\[!NOTE]\n\u003e This extension formerly had a field `eo:bands`, which has been removed in favor of a general field `bands`\n\u003e in STAC common metadata. The structure is the same, it's an array of Band Objects.\n\u003e The fields in the Band Object may change, fields from the EO extension will have a `eo:` prefix, but some more\n\u003e general fields like `description` have been moved to common metadata and don't need a prefix and as such don't change.\n\u003e Please note that bands in Item Properties are not the union of all bands in the assets any longer.\n\u003e If you specify bands in the Item Properties, the bands apply to all assets unless you have a bands object at the asset level.\n\nThe presence of one of the `eo:` fields in a Band Object makes the band\n\"[spectral](https://www.sciencedirect.com/topics/earth-and-planetary-sciences/spectral-band)\".\nThis enables clients to read the file and understand which band is 'red' and which is 'nir' (near infrared) so that it can perform an\n[NDVI](https://en.wikipedia.org/wiki/Normalized_difference_vegetation_index) operation, for example.\nEach Asset should specify its own band object.\nIf the individual bands are repeated in different assets they should all use the same values and\ninclude the optional bands `name` field to enable clients to easily combine and summarize the bands.\n\n#### eo:center_wavelength and eo:full_width_half_max\n\nThese fields are a common way to approximately describe a spectral band. In most cases even these numbers are not as useful as the\n`eo:common_name` that should be supplied with the spectral bands, where they exist. For non-standard bands (such as with hyperspectral sensors)\nthe wavelength fields indicate where the band is.\n\nAnother common way to define a spectral band with a minimum and maximum wavelength, where outside these bounds the transmission is 0%,\nand non-zero inside the bounds (e.g., 80%). The maximum transmission of a band is not captured in any of these metrics,\nnor is it important in most cases.\n\nHowever, spectral transmission for a filter does not go from 0% to a constant max value (e.g., 80%) then back to 0%. Such a filter is\nreferred to as a \"top-hat\" filter due to it's shape, but does not exist in reality. Thus, the minimum and maximum wavelengths are\ntypically selected to be the point at which transmission drops below some threshold, and this threshold is often half of the maximum\ntransmission. Thus if a filter's maximum transmission is 80%, the min and max thresholds would be the points where the transmission drops below 40%.\n\nThe `eo:center_wavelength` of a band is the midpoint between the min and max wavelengths:\n\n```python\ncenter_wavelength = (min_wavelength + max_wavelength) / 2\n```\n\nThe `eo:full_width_half_max` (FWHM) is the difference between the min and max wavelengths,\nthus representing the width of the band at half it's maximum transmission.\n\n```python\nfull_width_half_max = max_wavelength - min_wavelength\n```\n\nFor example, if we were given a band described as (0.4um - 0.5um) the `eo:center_wavelength` would be 0.45um\nand the `eo:full_width_half_max` would be 0.1um.\n\nIn some cases the full transmission profile is needed, such as when harmonizing between two sensor modalities. It is recommended\n that the full spectral profile be included as a link or an asset (preferably at the\n [Collection](https://github.com/radiantearth/stac-spec/tree/master/collection-spec/collection-spec.md) level).\n\n#### eo:solar_illumination\n\nIn satellite-based remote sensing applications, the calibration of the sensor recorded top-of-atmosphere reflectance to radiance, or vice-versa,\nis carried out using a reference spectral solar irradiance value.\nIt depends of the extra-terrestrial solar irradiance (e.g. [[Thuillier et al., 2003](https://link.springer.com/article/10.1023/A:1024048429145)])\nat a specific spectral wavelength,\nof the illumination conditions during the calibration data acquisition (through platform navigation and attitude),\nof the instrument viewing geometry on the diffuser panel.\nThe value in this field is the mean value representing the solar illumination in W/m2/micrometers\nat a specific level (e.g. Top of Atmosphere) for the asset.\nFor instance, this value is used for optical calibration of an asset (e.g. [ESUN(b) value in OTB optical calibration application](https://www.orfeo-toolbox.org/CookBook/Applications/app_OpticalCalibration.html#description))\n\n#### Common Band Names\n\nThe band's `eo:common_name` is the name that is commonly used to refer to that band's spectral\nproperties. The table below shows the allowed common names based on the average band range for the band\nnumbers of several popular instruments.\n\n| Common Name | Band Range (μm) | Landsat 5 TM / 7 ETM+ | Landsat 8 | Landsat Next | Sentinel-2 | Sentinel-3 OLCI / SLSTR | MODIS | NAIP | Planetscope | Worldview 2 / 3 |\n| ----------- | --------------- | --------------------- | --------- | ------------ | ---------- | ----------------------- | ----- | ---- | ----------- | --------------- |\n| pan         | 0.40 - 1.00     | - / 8                 | 8         |              |            |                         |       |      |             | (1)             |\n| coastal     | 0.40 - 0.45     |                       | 1         | 2            | 1          | 3 / -                   |       |      | 1           | 1               |\n| blue        | 0.45 - 0.53     | 1                     | 2         | 3            | 2          | 4 / -                   | 3     | 3    | 2           | 2               |\n| green       | 0.51 - 0.60     | 2                     | 3         | 4            | 3          | 6 / 1                   | 4     | 2    | 4           | 3               |\n| green05     | 0.51 - 0.55     |                       |           |              |            | 5 / -                   | 11    |      | 3           |                 |\n| yellow      | 0.58 - 0.62     |                       |           | 5            |            | 7 / -                   |       |      | 5           | 4               |\n| red         | 0.62 - 0.69     | 3                     | 4         | 8            | 4          | 9 / 2                   | 1     | 1    | 6           | 5               |\n| rededge     | 0.69 - 0.79     |                       |           |              |            |                         |       |      |             | 6               |\n| rededge071  | 0.69 - 0.73     |                       |           | 9            | 5          | 11 / -                  |       |      | 7           |                 |\n| rededge075  | 0.73 - 0.76     |                       |           | 10           | 6          | 12 / -                  |       |      |             |                 |\n| rededge078  | 0.76 - 0.79     |                       |           |              | 7          | 16 / -                  |       |      |             |                 |\n| nir         | 0.76 - 1.00     | 4 / 8                 |           | 11           | 8          |                         | 2     | 4    |             | 7               |\n| nir08       | 0.80 - 0.90     |                       | 5         | 12           | 8a         | 17 / 3                  |       |      | 8           |                 |\n| nir09       | 0.90 - 1.00     |                       |           | 13           | 9          | 20 / -                  |       |      |             |                 |\n| cirrus      | 1.35 - 1.40     |                       | 9         | 17           | 10         | - / 4                   | 26    |      |             |                 |\n| swir16      | 1.55 - 1.75     | 5                     | 6         | 18           | 11         | - / 5                   | 6     |      |             |                 |\n| swir22      | 2.08 - 2.35     | 7                     | 7         | 21           | 12         | - / 6                   | 7     |      |             |                 |\n| lwir        | 10.4 - 12.5     | 6                     |           |              |            |                         |       |      |             |                 |\n| lwir11      | 10.5 - 11.5     |                       | 10        | 25           |            |                         | 31    |      |             |                 |\n| lwir12      | 11.5 - 12.5     |                       | 11        | 26           |            |                         | 32    |      |             |                 |\n\nThe difference between the `nir`, `nir08`, and `nir09` bands are that the `nir` band is a wider band that covers\nmost of the spectral range of 0.76μm to 1.0μm. `nir08` and `nir09` are narrow bands centered 0.85μm and 0.95μm\nrespectively. The same applies for all variants that have numerical suffixes, e.g. green, lwir and rededge.\n\nCommon band names should be uniquely assigned, i.e. there should never be two bands that share the same common\nname in an Item or Collection.\n\n## Best Practices\n\nOne of the emerging best practices is to use [Asset Roles](https://github.com/radiantearth/stac-spec/tree/master/item-spec/item-spec.md#asset-roles)\nto provide clients with more information about the assets in an item. The following list includes a shared vocabulary for some common EO assets.\nThis list should not be considered definitive, and implementors are welcome to use other asset roles. If consensus and tooling consolidates around\nthese role names then they will be specified in the future as more standard than just 'best practices'.\n\n| Role Name    | Description                                                                                                                                                                                            |\n| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| reflectance  | An asset the provides [reflectance](https://www.l3harrisgeospatial.com/Support/Self-Help-Tools/Help-Articles/Help-Articles-Detail/ArtMID/10220/ArticleID/19247/3377) values, instead of just radiance. |\n| temperature  | An asset that provides actual temperature measurements.                                                                                                                                                |\n| saturation   | Points to a file that indicates where pixels in the input spectral bands are saturated.                                                                                                                |\n| cloud        | Points to a file that indicates whether a pixel is assessed as being cloud                                                                                                                             |\n| cloud-shadow | Points to a file that indicates whether a pixel is assessed as being cloud shadow.                                                                                                                     |\n\n## Contributing\n\nAll contributions are subject to the\n[STAC Specification Code of Conduct](https://github.com/radiantearth/stac-spec/blob/master/CODE_OF_CONDUCT.md).\nFor contributions, please follow the\n[STAC specification contributing guide](https://github.com/radiantearth/stac-spec/blob/master/CONTRIBUTING.md) Instructions\nfor running tests are copied here for convenience.\n\n### Running tests\n\nThe same checks that run as checks on PR's are part of the repository and can be run locally to verify that changes are valid.\nTo run tests locally, you'll need `npm`, which is a standard part of any [node.js installation](https://nodejs.org/en/download/).\n\nFirst you'll need to install everything with npm once. Just navigate to the root of this repository and on\nyour command line run:\n\n```bash\nnpm install\n```\n\nThen to check markdown formatting and test the examples against the JSON schema, you can run:\n\n```bash\nnpm test\n```\n\nThis will spit out the same texts that you see online, and you can then go and fix your markdown or examples.\n\nIf the tests reveal formatting problems with the examples, you can fix them with:\n\n```bash\nnpm run format-examples\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstac-extensions%2Feo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstac-extensions%2Feo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstac-extensions%2Feo/lists"}