Satellites¶
Predict satellite overpasses, compute ground-track swaths, and find temporal coincidences between airborne and spaceborne observations. Supports 14+ Earth-observing satellites with auto-fetched TLEs.
Satellite overpass prediction and coordination.
Fetches TLE (Two-Line Element) sets from CelesTrak, propagates orbits using Skyfield’s SGP4 implementation, and computes ground tracks, swath footprints, and spatial overlap with study areas. Supports 15+ satellite missions including PACE, Landsat-8/9, Sentinel-2A/B, and ICESat-2.
Satellite references¶
Rhodes, B. (2019). Skyfield: High precision research-grade positions for planets and Earth satellites generator. https://rhodesmill.org/skyfield/
TLE data source: CelesTrak (https://celestrak.org), maintained by T.S. Kelso.
- get_satellite(name)[source]¶
Look up a satellite by name or alias.
- Parameters:
name (
str) – Satellite name (key in SATELLITE_REGISTRY) or an alias.- Return type:
- Returns:
SatelliteInfo for the requested satellite.
- Raises:
ValueError – If the satellite is not found.
- fetch_tle(satellite, max_age_hours=24.0)[source]¶
Fetch the TLE for a satellite, using cache when available.
Downloads from CelesTrak if the cache is missing or stale.
- Parameters:
satellite (
Union[str,SatelliteInfo]) – Satellite name or SatelliteInfo object.max_age_hours (
float) – Maximum age of cached TLE before re-fetching.
- Returns:
Loaded satellite object.
- Return type:
skyfield.sgp4lib.EarthSatellite
- Raises:
RuntimeError – If the TLE cannot be fetched or parsed.
- compute_ground_track(satellite, start_time, end_time, time_step_s=30.0, max_tle_age_hours=24.0)[source]¶
Compute the satellite ground track over a time window.
- Parameters:
satellite (
Union[str,SatelliteInfo]) – Satellite name or SatelliteInfo object.start_time (
datetime) – Start of the time window (UTC datetime).end_time (
datetime) – End of the time window (UTC datetime).time_step_s (
float) – Time step for propagation in seconds.max_tle_age_hours (
float) – Maximum TLE cache age.
- Returns:
satellite_name, norad_id, timestamp, latitude, longitude, altitude_km, solar_zenith. Geometry is Point.
- Return type:
GeoDataFrame with columns
- compute_swath_footprint(ground_track_gdf, swath_width_km=None)[source]¶
Generate swath footprint polygons from a ground track GeoDataFrame.
For each pass segment, constructs a polygon by offsetting perpendicular to the track direction by half the swath width on each side.
- Parameters:
- Returns:
satellite_name, norad_id, pass_start, pass_end, ascending, geometry (Polygon).
- Return type:
GeoDataFrame with one row per pass segment. Columns
- find_overpasses(satellite, region, start_time, end_time, time_step_s=10.0, max_sza=None, include_swath=True, max_tle_age_hours=24.0)[source]¶
Find satellite passes over a geographic region within a time window.
- Parameters:
satellite (
Union[str,SatelliteInfo]) – Satellite name or SatelliteInfo object.region (
Union[Polygon,GeoDataFrame]) – Shapely Polygon or GeoDataFrame defining the area of interest.start_time (
datetime) – Start of search window (UTC datetime).end_time (
datetime) – End of search window (UTC datetime).time_step_s (
float) – Time step in seconds for propagation.max_sza (
Optional[float]) – Maximum solar zenith angle for usable passes. If None, uses the satellite’s default max_sza.include_swath (
bool) – If True, geometry is swath Polygon. If False, geometry is ground track LineString.max_tle_age_hours (
float) – Maximum TLE cache age.
- Returns:
satellite_name, norad_id, pass_start, pass_end, ascending, ground_track, solar_zenith_at_center, is_usable.
- Return type:
GeoDataFrame with one row per overpass. Columns
- find_all_overpasses(satellites=None, region=None, start_time=None, end_time=None, max_sza=None, **kwargs)[source]¶
Find overpasses for multiple satellites and concatenate results.
- Parameters:
satellites (
Optional[List[Union[str,SatelliteInfo]]]) – List of satellite names or SatelliteInfo objects. If None, uses all entries in SATELLITE_REGISTRY.region (
Union[Polygon,GeoDataFrame]) – Geographic region of interest.start_time (
Optional[datetime]) – Start of search window (UTC).max_sza (
Optional[float]) – Override max SZA for all satellites. If None, uses each satellite’s default.**kwargs – Additional keyword arguments passed to find_overpasses().
- Return type:
GeoDataFrame- Returns:
GeoDataFrame of combined overpass results, sorted by pass_start.
- compute_overpass_overlap(flight_plan_gdf, overpasses_gdf, flight_time_utc, max_time_offset_min=60.0)[source]¶
Compute spatial overlap between flight plan segments and satellite overpasses.
- Parameters:
flight_plan_gdf (
GeoDataFrame) – GeoDataFrame from flight_plan.compute_flight_plan().overpasses_gdf (
GeoDataFrame) – GeoDataFrame from find_overpasses().flight_time_utc (
datetime) – UTC datetime when the flight starts (used to compute absolute times for flight plan segments).max_time_offset_min (
float) – Maximum time offset (minutes) to consider as a valid overlap.
- Returns:
satellite_name, segment_name, time_offset_min, overlap_area_km2, geometry.
- Return type:
GeoDataFrame with overlap results. Columns