Complete API reference for OrbitView's scientific calculation libraries.
- DopplerCalculator
- OrbitalDecay
- PassPrediction
- GroundTrack
- ConjunctionAnalysis
- TLE Parser
- NASA Horizons API
File: src/lib/DopplerCalculator.ts
Calculates Doppler frequency shifts for satellite-ground communication.
interface ObserverPosition {
latitude: number; // degrees
longitude: number; // degrees
altitude: number; // meters above sea level
}
interface SatelliteState {
position: { x: number; y: number; z: number }; // ECF in meters
velocity: { x: number; y: number; z: number }; // ECF in m/s
}
interface DopplerResult {
rangeKm: number; // Distance to satellite
rangeRateMps: number; // Range rate (+ = receding)
dopplerShiftHz: number; // Frequency shift
receivedFreqHz: number; // Received frequency
shiftPpm: number; // Parts per million
isApproaching: boolean; // True if approaching
}Converts geodetic coordinates to Earth-Centered Fixed (ECF).
function geodeticToECF(
lat: number, // Latitude in degrees
lon: number, // Longitude in degrees
alt: number // Altitude in meters
): { x: number; y: number; z: number }Example:
const ecf = geodeticToECF(41.0082, 28.9784, 0);
// { x: 4208832.5, y: 2334850.2, z: 4171288.8 }Calculates Doppler shift for a satellite pass.
function calculateDopplerShift(
satellite: SatelliteState,
observer: ObserverPosition,
baseFrequencyHz: number
): DopplerResultconst COMMON_FREQUENCIES = {
ISS_VOICE: 145_800_000, // 145.800 MHz
ISS_PACKET: 145_825_000, // 145.825 MHz
NOAA_APT: 137_100_000, // 137.1 MHz
GPS_L1: 1_575_420_000, // 1575.42 MHz
STARLINK_KU: 12_000_000_000 // ~12 GHz
};File: src/lib/OrbitalDecay.ts
Estimates satellite orbital lifetime based on atmospheric drag.
interface DecayPrediction {
currentAltitudeKm: number;
currentDensity: number;
decayRateKmPerDay: number;
estimatedLifetimeDays: number;
estimatedReentryDate: Date;
altitudeHistory: { days: number; altitude: number }[];
riskLevel: 'low' | 'medium' | 'high' | 'critical';
}Returns atmospheric density using exponential model.
function getAtmosphericDensity(altitudeKm: number): number // kg/m³Extracts B* drag coefficient from TLE Line 1.
function parseBStar(tleLine1: string): numberPredicts orbital decay timeline.
function predictOrbitalDecay(
semiMajorAxisKm: number,
eccentricity: number,
bstar: number,
currentDate?: Date
): DecayPredictionFile: src/lib/PassPrediction.ts
Predicts satellite passes for ground observers.
interface SatellitePass {
aosTime: Date; // Acquisition of Signal
losTime: Date; // Loss of Signal
maxElevationTime: Date; // Time of maximum elevation
maxElevation: number; // Max elevation in degrees
duration: number; // Duration in seconds
azimuthAOS: number; // Azimuth at rise
azimuthLOS: number; // Azimuth at set
visible: boolean; // Sunlit satellite, dark sky
}
interface ObserverLocation {
latitude: number; // degrees
longitude: number; // degrees
altitude: number; // meters
}Finds all satellite passes in a time range.
function predictPasses(
satData: SatelliteData,
observer: ObserverLocation,
startTime: Date,
endTime: Date,
minElevation: number = 10 // minimum elevation in degrees
): SatellitePass[]Example:
const passes = predictPasses(
issData,
{ latitude: 40.7128, longitude: -74.0060, altitude: 10 },
new Date(),
new Date(Date.now() + 86400000), // 24 hours
10 // minimum 10° elevation
);Calculates current azimuth/elevation/range.
function getLookAngles(
satData: SatelliteData,
observer: ObserverLocation,
time: Date
): { azimuth: number; elevation: number; range: number } | nullFile: src/lib/GroundTrack.ts
Calculates satellite ground tracks and coverage footprints.
interface GroundTrackPoint {
latitude: number; // degrees
longitude: number; // degrees
altitude: number; // km
time: Date;
}
interface GroundTrackResult {
pastTrack: GroundTrackPoint[];
futureTrack: GroundTrackPoint[];
currentPosition: GroundTrackPoint;
}Generates ground track points.
function calculateGroundTrack(
tle1: string,
tle2: string,
startTime: Date = new Date(),
durationMinutes: number = 90,
stepSeconds: number = 60
): GroundTrackResultReturns satellite visibility radius on Earth's surface.
function calculateFootprintRadius(
altitude: number, // km
minElevation: number = 0 // degrees
): number // kmGenerates polygon points for footprint visualization.
function generateFootprintCircle(
centerLat: number,
centerLon: number,
radiusKm: number,
numPoints: number = 72
): Array<{ latitude: number; longitude: number }>Checks if ground location can see the satellite.
function isWithinFootprint(
satLat: number,
satLon: number,
satAltitude: number,
groundLat: number,
groundLon: number,
minElevation: number = 0
): booleanFile: src/lib/ConjunctionAnalysis.ts
Analyzes close approach events between space objects.
interface ConjunctionEvent {
id: string;
primaryObject: {
name: string;
noradId: string;
type: 'payload' | 'debris' | 'rocket_body' | 'unknown';
};
secondaryObject: { /* same structure */ };
tca: Date; // Time of Closest Approach
minRangeKm: number; // Minimum distance
relativeVelocityKmS: number; // Relative velocity
probabilityOfCollision?: number;
riskLevel: 'low' | 'medium' | 'high' | 'critical';
}Parses SOCRATES conjunction data.
function parseSOCRATES(csvData: string): ConjunctionEvent[]Determines collision risk category.
function calculateRiskLevel(
minRangeKm: number,
relVelKmS: number
): 'low' | 'medium' | 'high' | 'critical'| Risk Level | Miss Distance |
|---|---|
| Critical | < 100m |
| High | < 500m |
| Medium | < 1 km |
| Low | > 1 km |
File: src/lib/tle.ts
Fetches and parses Two-Line Element data.
interface SatelliteData {
id: string; // NORAD ID
name: string; // Satellite name
line1: string; // TLE Line 1
line2: string; // TLE Line 2
}Fetches all active satellites from CelesTrak.
async function fetchActiveSatellites(): Promise<SatelliteData[]>Parses raw TLE text into structured data.
function parseTLE(text: string): SatelliteData[]File: src/lib/HorizonsAPI.ts
Fetches ephemeris data for deep-space objects.
Retrieves JWST position data from JPL Horizons.
async function fetchJWSTEphemeris(
startDate: Date,
endDate: Date,
stepSize: string = '1h'
): Promise<EphemerisData[]>All functions that can fail provide graceful error handling:
try {
const result = calculateDopplerShift(sat, observer, freq);
} catch (error) {
console.error('[DopplerCalculator] Error:', error);
// Return null or default values
}- SGP4 Propagation: ~0.1ms per propagation
- Pass Prediction: ~50-100ms for 24-hour prediction
- Ground Track: ~10ms for 90-minute track
- Atmospheric Density: Cached lookup tables
This API documentation is part of OrbitView open-source project. For mathematical foundations, see THEORY.md.