Find, vet, and validate public satellite/climate datasets (STAC discovery + Olofsson et al. 2014 accuracy assessment)
Project description
satscout — find, vet, and validate public satellite/climate datasets
An open-source tool for remote-sensing researchers who need to match public satellite/climate archives to their own work. Built around two pain points that came up repeatedly in user interviews:
- Finding and vetting data means downloading metadata by hand — e.g. pulling scene metadata just to check cloud cover. satscout searches the big public STAC catalogs and surfaces scene metadata (cloud cover, revisit gaps, bands, resolution) directly — nothing is downloaded.
- Validating remote-sensing products to the community standard (Olofsson et al. 2014) is high-value but tedious. satscout ships a complete, tested implementation of the good-practice workflow: stratified sample design, error-matrix analysis, and unbiased (error-adjusted) area estimates with confidence intervals.
Install
pip install satscout
Or from source:
git clone https://github.com/yz-al/satscout && cd satscout
pip install . # dev: pip install -e '.[dev]'
Only dependency: requests. Python ≥ 3.10.
Quick start
1. Discover candidate datasets
Which public collections could cover a 2020–2023 study of surface reflectance over the Central Valley?
satscout discover \
--keywords "sentinel-2 surface reflectance" \
--bbox -121.5,36.5,-120.5,37.5 --start 2020-01-01 --end 2023-12-31
Ranks matching collections across Earth Search (AWS Open Data),
Microsoft Planetary Computer, and USGS LandsatLook. Collections
whose spatial/temporal extent can't cover the request are filtered out;
the rest are ranked by keyword relevance. satscout catalogs lists the
endpoints.
2. Vet a dataset without downloading anything
satscout check --catalog earth-search --collection sentinel-2-l2a \
--bbox -121.5,36.5,-120.5,37.5 --start 2022-06-01 --end 2022-09-30 \
--max-cloud 20
Produces an alignment report: scene count, date coverage, revisit-gap
statistics, the cloud-cover distribution, platforms, resolution, and the
bands/assets present in every scene — plus plain-language warnings (e.g.
"largest temporal gap is 74 days"). satscout search lists the individual
scenes; add --json to either for machine-readable output.
3. Validate a map per Olofsson et al. (2014)
Plan the reference sample (Eq. 13 + allocation with a rare-class floor):
satscout validate design \
--map-areas 200000,150000,3200000,6450000 \
--expected-users 0.70,0.60,0.90,0.95 --target-se 0.01
Then, with reference labels collected, feed the error matrix
(CSV, rows = map class, columns = reference class, same order as
--map-areas):
satscout validate assess --matrix matrix.csv \
--map-areas 200000,150000,3200000,6450000 \
--classes deforestation,gain,stable-forest,stable-nonforest
Output: overall/user's/producer's accuracies with 95% CIs and
error-adjusted area estimates with CIs (Eqs. 1–11 of the paper).
The implementation reproduces the paper's worked example — including the
flagship result, deforestation area = 235,086 ± 68,418 ha — in
tests/test_olofsson.py.
The same functionality is importable:
from satscout import assess, design_sample
result = assess(matrix, mapped_areas, class_names=names)
print(result.overall_accuracy, result.adjusted_areas)
Tests
pytest tests -m "not network" # offline unit tests (fast, no internet)
pytest tests -m network # real-data tests against the live public APIs
The offline suite includes a scripted fake server exercising rate-limit (HTTP 429) recovery, Retry-After handling, exponential backoff, and both STAC pagination styles. The network suite hits Earth Search, Planetary Computer, and USGS live — including a 10-request burst against the AWS-hosted API to prove throttling is absorbed, not fatal.
Scope (MVP)
- AOIs are reduced to lon/lat bounding boxes (GeoJSON in, bbox out); antimeridian-crossing AOIs must be split.
- Discovery covers the three largest free STAC APIs; adding a catalog is a
one-line entry in
satscout/catalogs.py. - The validation module implements stratified estimators for the standard "map classes = strata" design. Reference: Olofsson, Foody, Herold, Stehman, Woodcock & Wulder (2014). Good practices for estimating area and assessing accuracy of land change. Remote Sensing of Environment 148:42–57. doi:10.1016/j.rse.2014.02.015
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file satscout-0.1.0.tar.gz.
File metadata
- Download URL: satscout-0.1.0.tar.gz
- Upload date:
- Size: 30.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d5dd227280c3b62cb53b10ef32dbe080b73718f40cbee8e1a0ed8e0ee04ba839
|
|
| MD5 |
f31e18bc10dc27d0c2ceb89d401c7ebd
|
|
| BLAKE2b-256 |
e758959c8a00fbb1aeeabebea4894aa271175db09d85fc61acfe023cc609d385
|
Provenance
The following attestation bundles were made for satscout-0.1.0.tar.gz:
Publisher:
workflow.yml on yz-al/satscout
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
satscout-0.1.0.tar.gz -
Subject digest:
d5dd227280c3b62cb53b10ef32dbe080b73718f40cbee8e1a0ed8e0ee04ba839 - Sigstore transparency entry: 2152613843
- Sigstore integration time:
-
Permalink:
yz-al/satscout@713765662a49c7d9596cb19db3cdf5d508f22ff4 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/yz-al
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@713765662a49c7d9596cb19db3cdf5d508f22ff4 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file satscout-0.1.0-py3-none-any.whl.
File metadata
- Download URL: satscout-0.1.0-py3-none-any.whl
- Upload date:
- Size: 22.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c27c9cfd4078a42b369cfad476cef1daa5eed6653489bf3a3f259642a4578b9c
|
|
| MD5 |
9a440bb61e6c7fc88871d297d4786fed
|
|
| BLAKE2b-256 |
14186fc9ab80e23860e667d408a90fb65619cd684c589d7f3f78ac0a9b769d77
|
Provenance
The following attestation bundles were made for satscout-0.1.0-py3-none-any.whl:
Publisher:
workflow.yml on yz-al/satscout
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
satscout-0.1.0-py3-none-any.whl -
Subject digest:
c27c9cfd4078a42b369cfad476cef1daa5eed6653489bf3a3f259642a4578b9c - Sigstore transparency entry: 2152613851
- Sigstore integration time:
-
Permalink:
yz-al/satscout@713765662a49c7d9596cb19db3cdf5d508f22ff4 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/yz-al
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
workflow.yml@713765662a49c7d9596cb19db3cdf5d508f22ff4 -
Trigger Event:
workflow_dispatch
-
Statement type: