Skip to main content

Search and download data or scenes from USGS API

Project description

Tests

usgsxplore

Python client for the USGS M2M API — search, download, and process Earth observation imagery from EarthExplorer.

Supports 100+ datasets (Landsat, Hexagon KH-9, declassified imagery, aerial photos, and more). Provides both a CLI and a Python API.

Inspired by landsatxplore, with broader dataset support and additional features.


Installation

pip install usgsxplore

# or with pipx (recommended for CLI use)
pipx install usgsxplore

Credentials

You need a USGS ERS account with M2M API access enabled.

  1. Register at ers.cr.usgs.gov/register
  2. Request M2M API access at ers.cr.usgs.gov/profile/access — specify the datasets you plan to use
  3. Use your username and M2M token (not your password)

Set credentials as environment variables to avoid typing them every time:

export USGS_USERNAME=<your_username>
export USGS_TOKEN=<your_token>

Quick start

# Search for Landsat scenes at a location between 2010 and 2020
usgsxplore search landsat_tm_c2_l1 --location 5.7074 45.1611 --interval-date 2010-01-01 2020-01-01

# Search for Hexagon KH-9 scenes and export to GeoPackage + HTML map
usgsxplore search declassii --filter "camera=H" --output results.gpkg --output map.html

# Download the first 10 results
usgsxplore search landsat_tm_c2_l1 --limit 10 --output results.txt
usgsxplore download results.txt

CLI Reference

usgsxplore [OPTIONS] COMMAND [ARGS]...

Commands:
  search                 Search scenes in a dataset
  download               Download scenes from a text file of entity IDs
  download-browse        Download browse (preview) images from a vector file
  download-browse-strip  Generate mosaicked GeoTIFF strips from browse images
  info                   List available datasets and metadata filters

search

Search scenes in a dataset, with optional spatial, temporal, and metadata filters.

usgsxplore search [OPTIONS] DATASET
Option Description
-o / --output Output file — repeatable, format inferred from extension
-vf / --vector-file Vector file for spatial filter (.gpkg, .shp, .geojson)
-l / --location Point filter: longitude latitude
-b / --bbox Bounding box: xmin ymin xmax ymax
-c / --clouds Max cloud cover percentage (1–100)
-i / --interval-date Date range: YYYY-MM-DD YYYY-MM-DD
-f / --filter Metadata filter string (see Filter syntax)
-m / --limit Max number of results (default: all)
--pbar Show progress bar

Output formats:

Extension Content
.txt Entity IDs, one per line — usable with download
.json Raw API response with full metadata
.gpkg / .shp / .geojson Vector file with scene footprints
.html Interactive map for quick visualization

Multiple outputs can be specified simultaneously:

usgsxplore search declassii --filter "camera=H" --output scenes.gpkg --output map.html

download

Download scenes from a .txt file of entity IDs (produced by search).

usgsxplore download [OPTIONS] TEXTFILE
Option Description
-d / --dataset Dataset name (auto-read from file header if present)
-p / --product-number Product index when multiple products are available
-o / --output-dir Output directory (default: .)
-m / --max-workers Parallel download threads (default: 5)
--overwrite Overwrite existing files
--hide-pbar Hide progress bar
--no-extract Skip extraction of downloaded archives

The .txt file header line #dataset=<name> is read automatically, so passing -d is optional if the file was generated by search.

download-browse

Download browse (preview) images from a vector file and save them locally.

usgsxplore download-browse [OPTIONS] VECTOR_FILE

Reads the browse_url column from the vector file, downloads images to --output-dir, and updates the vector file with local paths.

Option Description
-o / --output-dir Output directory (default: ./browse_images/)
--pbar Show progress bar

download-browse-strip

Download browse images and mosaic them into georeferenced GeoTIFF strips, grouped by satellite acquisition strip.

usgsxplore download-browse-strip [OPTIONS] VECTOR_FILE
Option Description
-o / --output-dir Output directory (default: .)
-r / --resolution Output resolution in meters (default: 100)
-m / --max-workers Parallel download threads (default: 5)
--overwrite Overwrite existing files
--hide-pbar Hide progress bar

This command is useful for getting a quick georeferenced overview of declassified imagery strips (e.g. KH-9 Hexagon).

info

# List all available datasets
usgsxplore info dataset

# List available metadata filters for a dataset
usgsxplore info filters DATASET

Tip: Trigger filter help directly from a search by using an invalid value:

# List all filter fields for the declassii dataset
usgsxplore search declassii -f "whatever=?"

# List all valid values for the "camera" filter
usgsxplore search declassii -f "camera=?"

Filter syntax

The --filter option accepts a human-readable expression:

"field1=value1 & field2=value2 | field3=value3"

Fields can be identified by their filter ID, label, or SQL field name. Values can be the raw value or the display label. All of the following are equivalent:

usgsxplore search declassii --filter "camera=L"
usgsxplore search declassii --filter "Camera Type=L"
usgsxplore search declassii --filter "5e839ff8cfa94807=L"
usgsxplore search declassii --filter "camera=KH-9 Lower Resolution Mapping Camera"

Combine multiple filters:

# KH-9 scenes that are available for download
usgsxplore search declassii --filter "camera=L & DOWNLOAD_AVAILABLE=Y"

Python API

All CLI commands have equivalent Python functions in usgsxplore.core:

from usgsxplore.core import (
    search_scenes,
    download_scenes,
    download_browse_images,
    download_browse_strips,
    list_datasets,
    list_dataset_filters,
)

Search

# Print entity IDs to stdout
search_scenes("landsat_tm_c2_l1",
    location=(5.7074, 45.1611),
    interval_date=("2010-01-01", "2020-01-01"),
)

# Save to multiple formats
search_scenes("declassii",
    output_files=["results.gpkg", "map.html"],
    filter_str="camera=H",
    limit=500,
    show_progress=True,
)

Credentials are read from USGS_USERNAME / USGS_TOKEN environment variables by default, or can be passed explicitly:

search_scenes("declassii", username="myuser", token="mytoken", ...)

Download

download_scenes("results.txt",
    output_dir="./data",
    max_workers=8,
)

Browse images

# Download individual preview images
download_browse_images("results.gpkg", output_dir="./previews")

# Generate mosaicked GeoTIFF strips
download_browse_strips("results.gpkg",
    output_dir="./strips",
    resolution=50,
    max_workers=8,
)

Inspect datasets and filters

# List datasets
datasets = list_datasets()

# List filters for a dataset
filters = list_dataset_filters("declassii")
for f in filters:
    print(f["fieldLabel"], "→", f["searchSql"])

For a full example notebook, see examples/download.ipynb.


Contributing

See CONTRIBUTING.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

usgsxplore-1.1.0.tar.gz (33.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

usgsxplore-1.1.0-py3-none-any.whl (33.5 kB view details)

Uploaded Python 3

File details

Details for the file usgsxplore-1.1.0.tar.gz.

File metadata

  • Download URL: usgsxplore-1.1.0.tar.gz
  • Upload date:
  • Size: 33.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Hatch/1.16.5 cpython/3.10.20 HTTPX/0.28.1

File hashes

Hashes for usgsxplore-1.1.0.tar.gz
Algorithm Hash digest
SHA256 8205b41e6eead2fbd1c6495135dc6bed1c76629194852f24ff1d1face1a05f81
MD5 205f64dc380ac2e0e76519b580000c82
BLAKE2b-256 7eb1ccc064c58445391d2394dbfe19bad4d66edee153af7bad9cee447278894a

See more details on using hashes here.

File details

Details for the file usgsxplore-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: usgsxplore-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 33.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Hatch/1.16.5 cpython/3.10.20 HTTPX/0.28.1

File hashes

Hashes for usgsxplore-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7de7b6feea832e20479ebf166df22cceb52d2349bf2dcf5920a6509badcfc5b0
MD5 eefa56fffeffd0b79611eebbb6d01aa2
BLAKE2b-256 1c86a633d8572f3dac8ff4de7cb70f0b589a3ea908edcea38e8b3b2c2092cc05

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page