Skip to main content

Multi-provider satellite imagery monitoring and weather-aware recommendation tool

Project description

Satellite Monitor

This tool will tell you what satellite imagery is available for a location of your choice. It checks multiple satellite operators, and lists recent and upcoming image captures. If configured with a weather API key, it will also check current cloud cover and visibility conditions, and provide smart recommendations on which satellites to use based on the weather -- for example, optical imagery will not be useful if there is heavy cloud cover!

Key Features

  • Weather-Aware Recommendations: Automatically checks cloud cover and recommends suitable satellites
  • Cost Optimization: From FREE (Sentinel) to $10,000+ (commercial SAR) per image
  • Multi-Provider Support: ESA, Maxar, Planet Labs, Airbus, BlackSky, ICEYE, Capella
  • Real-time Availability: Shows when the next satellite pass will occur
  • Any Location: Works for any coordinates, not just Brussels
  • Smart Weather Integration: Knows when optical won't work and suggests SAR alternatives

Installation

From PyPI

pip install satellite-monitor

From Source

git clone https://github.com/will-fawcett/satellite-monitor.git
cd satellite-monitor
pip install -e .

Optional Dependencies

# For Sentinel data download
pip install satellite-monitor[sentinel]

# For orbit calculations
pip install satellite-monitor[orbit]

# All optional features
pip install satellite-monitor[all]

Quick Start

Command Line

# Check satellite availability (default: Brussels)
satellite-monitor check

# Use a named location (60+ presets available)
satellite-monitor --location London check
satellite-monitor -l "New York" check
satellite-monitor -l Tokyo recommend

# Or use exact coordinates
satellite-monitor --lat 48.8566 --lon 2.3522 check

# List all preset locations
satellite-monitor locations

# Get weather-aware recommendations with constraints
satellite-monitor recommend --budget 1000 --resolution 1.0

# Download Sentinel data (requires Copernicus account)
satellite-monitor download --days 14 --dry-run

# Configure weather APIs for real cloud data
satellite-monitor setup

# Run interactive demo
satellite-monitor demo

Python API

from satellite_monitor import (
    Location,
    SatelliteChecker,
    SmartSatelliteAdvisor,
    resolve_location,
)

# Use default location (Brussels)
checker = SatelliteChecker()
checker.run()

# Use a preset location by name
london = resolve_location("London")
checker = SatelliteChecker(location=london, area_sqkm=150)
checker.run()

# Or create custom location with coordinates
paris = Location(name="Paris", latitude=48.8566, longitude=2.3522)
checker = SatelliteChecker(location=paris, area_sqkm=150)
checker.run()

# Geocode any location via OpenStreetMap
remote = resolve_location("Reykjavik, Iceland")  # Works for any place!
checker = SatelliteChecker(location=remote)
checker.run()

# Get programmatic recommendations
advisor = SmartSatelliteAdvisor(location=paris)
weather = advisor.weather_service.get_weather()
recommendations = advisor.get_recommendations(
    weather,
    max_budget=1000,
    min_resolution=5.0
)

for rec in recommendations[:3]:
    print(f"{rec.satellite_name}: {rec.score:.0f} score, {rec.cost}")

Example Output

Satellite Image Availability for Brussels | Cloud Cover: 75%

Satellite     Provider        Type     Resolution  Weather OK  Next Image  Cost
--------------------------------------------------------------------------------
Sentinel-1    ESA Copernicus  SAR      5m          yes         in 2d       FREE
Sentinel-2    ESA Copernicus  Optical  10m         no          in 3d       FREE
PlanetScope   Planet Labs     Optical  3m          no          in 20h      $250
ICEYE         ICEYE           SAR      0.25m       yes         in 14h      $10,000

Smart Recommendations
Current cloud cover: 75% (Mostly cloudy)

POOR CONDITIONS for optical satellites
   Optical satellites will not work well
   MUST use SAR satellites:
   Sentinel-1 (FREE) - 5m SAR
   Capella ($8,000) - 0.5m SAR

CLI Commands

Command Description
satellite-monitor check Check current satellite availability
satellite-monitor recommend Get weather-aware recommendations
satellite-monitor download Download Sentinel imagery
satellite-monitor setup Configure weather API keys
satellite-monitor locations List available preset locations
satellite-monitor demo Run interactive demonstration

Global Options

Option Description
-l, --location TEXT Named location (e.g., "London", "Paris", "Tokyo")
--lat FLOAT Latitude of target location
--lon FLOAT Longitude of target location
--area-km FLOAT Coverage area in km² (default: 100)

Location Resolution

Locations are resolved in this priority order:

  1. Explicit coordinates (--lat/--lon) - Use exact coordinates
  2. Named location (--location) - Tries preset first, then geocoding
  3. Default - Brussels

The --location option supports:

  • 60+ preset cities - Instant lookup, no network needed (e.g., London, Paris, Tokyo, New York)
  • Any place name - Falls back to OpenStreetMap Nominatim geocoding (e.g., "Reykjavik", "Auckland Airport")

Satellite Options

Free Satellites

  • Sentinel-1 (ESA): 5m SAR, works through clouds, 6-day revisit
  • Sentinel-2 (ESA): 10m optical, requires clear weather, 5-day revisit
  • Landsat-9 (USGS): 30m optical, 16-day revisit

Commercial Satellites

Budget Options ($250-500/image)

  • PlanetScope: 3m optical, daily
  • BlackSky: 1m optical, sub-daily

Premium Options ($1,000-3,000/image)

  • SkySat: 0.5m optical
  • WorldView-3: 0.31m optical
  • Pleiades-Neo: 0.3m optical

SAR - All Weather ($8,000-10,000/image)

  • Capella: 0.5m SAR
  • ICEYE: 0.25m SAR

Weather Decision Logic

Cloud Cover Daylight Recommendation Best Choice
< 30% Yes Excellent for optical FREE Sentinel-2 or PlanetScope
30-60% Yes Moderate for optical Consider SAR or high-quality optical
> 60% Yes Poor for optical Must use SAR (Sentinel-1 FREE)
Any No Impossible for optical Only SAR satellites work

Weather API Setup

For accurate cloud cover data, configure a free weather API:

satellite-monitor setup

Supported APIs:

Without API keys, the system uses simulated weather data.

Downloading Sentinel Data

To download actual satellite images (FREE):

  1. Register at Copernicus Hub

  2. Set credentials:

export COPERNICUS_USERNAME="your_username"
export COPERNICUS_PASSWORD="your_password"
  1. Download:
# Search only (dry run)
satellite-monitor download --dry-run

# Download with custom parameters
satellite-monitor download --days 14 --cloud-max 15 --max-products 5

Advanced Usage

Watch Mode

Continuous monitoring with updates every minute:

satellite-monitor check --watch

JSON Output

For automation and scripting:

satellite-monitor check --json
satellite-monitor recommend --json

Custom Location with Constraints

# Using named location
satellite-monitor -l London recommend \
    --budget 500 \
    --resolution 1.0 \
    --urgent 24

# Using coordinates
satellite-monitor --lat 51.5074 --lon -0.1278 recommend \
    --budget 500 \
    --resolution 1.0 \
    --urgent 24

Cost Savings Example

Weather awareness can save thousands:

  • Without weather info: Order $2,500 optical imagery on cloudy day = Wasted money
  • With weather info: System says "Use FREE Sentinel-1 SAR instead" = $2,500 saved

Development

# Install with dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Type checking
mypy src/satellite_monitor

License

MIT License. Sentinel data is provided free by ESA under the Copernicus programme.

Resources

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

satellite_monitor-1.0.0.tar.gz (35.5 kB view details)

Uploaded Source

Built Distribution

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

satellite_monitor-1.0.0-py3-none-any.whl (42.8 kB view details)

Uploaded Python 3

File details

Details for the file satellite_monitor-1.0.0.tar.gz.

File metadata

  • Download URL: satellite_monitor-1.0.0.tar.gz
  • Upload date:
  • Size: 35.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for satellite_monitor-1.0.0.tar.gz
Algorithm Hash digest
SHA256 2b8d77b813d1e2954cb54535ed88e966f328a2627408384cee6b3be9f5a4f5ec
MD5 23b5f8fe99ae205c30093de9835c3292
BLAKE2b-256 836e5cb3190936d10772905530c2b1be283b38902ab889f1705feb631e565224

See more details on using hashes here.

File details

Details for the file satellite_monitor-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for satellite_monitor-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 281436d2c92bd39af97ccc8192d143ce125e8d08d56084f45b5cc7242b01d5f3
MD5 b09e6d80a50596305e8db3041d10d449
BLAKE2b-256 04f920275f847664f36016b02127114444431a1d5b50f69e221772e57afa051d

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