satellite_observer 1.0.1
satellite_observer: ^1.0.1 copied to clipboard
A pure-Dart engine for SGP4 satellite propagation, topocentric look-angles, pass prediction, and naked-eye visibility. No Flutter dependency.
Changelog #
All notable changes to this project are documented here. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.0.1 - 2026-06-21 #
Documentation only. No public API or behaviour change.
Changed #
- Clarified that a
SatelliteObserver(and itsSgp4Engine) should be constructed once per satellite and reused across ticks, not rebuilt per frame. Added a construction-cost row to the Performance table, a "Construct once, reuse across ticks" section to the README and theSatelliteObserverdartdoc, anexample/live_tracking.dartbuild-once-then-loop sample, and a note that theengine:parameter lets one initialised propagator serve multiple observers.
1.0.0 - 2026-06-16 #
First stable release: the complete L1-L4 compute set with a frozen public API (semver-stable from here).
Added #
SatelliteObserverfacade - the single public entry point. Construct it from genericGpElementsplus anObserver; nocelestrak(or any data source) dependency, so it is usable standalone.- L1 - SGP4/SDP4 propagation. Near-Earth and deep-space propagation behind
the
PropagationEngineseam (Sgp4Engine), verified against the canonical Vallado reference vectors (SGP4-VER.TLE/tcppver.out).GpElements(from a raw TLE pair viaGpElements.fromTle, or from mean elements),EciState(TEME position/velocity),Vector3,GravityModel(WGS-72 default, the SGP4 convention). Methods:propagate,propagateSeries,epoch. - L2 - topocentric geometry.
lookAngleAtreturns aLookAngle(azimuth, elevation, slant range, range-rate);subPointAtreturns aSubSatellitePoint. WGS-84 geodesy, TEME -> ECEF via IAU-82 GMST. - L3 - pass prediction.
passesfinds rise / culmination / setPasstriples over a window (coarse sample + root refine), with per-eventLookAngleand peak elevation;nextPassis forward-scan sugar.minElevationDegdefaults to 10 deg (documented), withHorizonMaskpresets (openSky0 deg,obstructed10 deg). - L4 - naked-eye visibility.
visiblePasses/nextVisiblePassmark the sub-arcs where the observer is in darkness AND the satellite is sunlit, returningPassVisibilitywithVisibleIntervals.isObserverInDarkness(withTwilightPhasecivil/nautical/astronomical or a raw Sun-altitude threshold) andisSatelliteSunlit. Analytic Meeus Sun model (~arc-minute, no ephemeris/network) and a geometric conical-umbra eclipse test. - Error model. Sealed
SatelliteObserverExceptiontree (InvalidElementsException,PropagationException,GeometryException); internal failures are mapped so no raw numeric/format error leaks out. - Docs & examples. Visibility-first README with the accuracy/TLE-staleness
caveat and the 10-degree default rationale; runnable offline examples
(
visible_iss_pass,look_angle,passes) plus a networkcelestrakfetch -> propagate example; a propagation benchmark. - Tooling. Strict analysis options (very_good_analysis + strict language modes), MIT license with Vallado attribution, and CI (format / analyze / test with coverage / publish dry-run).