Skip to the content.

Runway Information

Overview

Runway information is critical for crosswind component calculations. This document details the runways used for operations and the associated airport data.


Primary Airport: KCPS (St. Louis Downtown Airport)

Airport Information

Airport Name: St. Louis Downtown Airport (formerly Bi-State Parks Airport)
ICAO Code: KCPS
IATA Code: CPS
Location: Cahokia, Illinois (near St. Louis, Missouri)
Elevation: 413 feet MSL
Coordinates: 38°34’10”N 90°09’26”W

Runway Configuration

Runway 12/30

Runway Designations: 12 and 30
Runway Length: 6,498 feet
Runway Width: 100 feet
Surface: Asphalt

Magnetic Headings:

Runway Usage

KCPS Runway 12/30 is the primary runway used for:

Active Runway Selection: Determined by wind direction (typically land into the wind)


Backup Airport: KSTL (Lambert-St. Louis International Airport)

Airport Information

Airport Name: St. Louis Lambert International Airport
ICAO Code: KSTL
IATA Code: STL
Location: St. Louis, Missouri
Elevation: 605 feet MSL
Coordinates: 38°44’52”N 90°21’36”W

Purpose

KSTL serves as:

Usage in Dashboard: When KCPS METAR is older than 2 hours or unavailable, the system uses KSTL data for restriction calculations.

Major Runways (Reference Only)

KSTL has multiple runways, but they are not used for crosswind calculations in the dashboard:

Note: The dashboard calculates crosswinds based on KCPS Runway 12/30 regardless of which airport provides the weather data.


Crosswind Calculation Method

Formula

Crosswind component is calculated using trigonometry:

function calculateCrosswind(windDirection, windSpeed, runwayHeading) {
    const angleDiff = Math.abs(windDirection - runwayHeading);
    const normalizedAngle = angleDiff > 180 ? 360 - angleDiff : angleDiff;
    const crosswind = windSpeed * Math.sin(normalizedAngle * Math.PI / 180);
    return crosswind;
}

Parameters

Calculation Process

  1. Calculate angle between wind direction and runway heading
  2. Normalize angle to 0-180° range
  3. Calculate sine of the angle
  4. Multiply wind speed by sine to get crosswind component
  5. Use maximum crosswind of both runway directions (12 and 30)

Example Calculations

Example 1: Direct Crosswind

Given:

Calculation:

Angle difference: |180 - 122| = 58°
Crosswind: 20 * sin(58°) = 20 * 0.848 = 17.0 knots

Result: 17.0 knot crosswind component


Example 2: Headwind Component

Given:

Calculation:

Angle difference: |120 - 122| = 2°
Crosswind: 20 * sin(2°) = 20 * 0.035 = 0.7 knots

Result: 0.7 knot crosswind component (nearly direct headwind)


Example 3: Quartering Wind

Given:

Calculation:

Angle difference: |90 - 122| = 32°
Crosswind: 15 * sin(32°) = 15 * 0.530 = 8.0 knots

Result: 8.0 knot crosswind component


Dual Runway Check

The dashboard calculates crosswind for both runway directions and uses the maximum value:

const cross12 = calculateCrosswind(windDir, windSpeed, 122);  // Runway 12
const cross30 = calculateCrosswind(windDir, windSpeed, 302);  // Runway 30
const maxCrosswind = Math.max(cross12, cross30);

Rationale: This ensures restrictions are based on the worst-case scenario regardless of which runway is in use. Pilots can land on either runway depending on wind direction, so both must be considered.


Runway Heading Selection Rationale

Why 122° instead of 120°?

Runway 12 is designated as “120°” in common terminology (12 × 10 = 120), but the actual magnetic heading is 122°.

Reasons for precision:

Impact: Using 122° instead of 120° provides:


Elevation Usage in Ceiling Calculations

KCPS Elevation: 413 feet MSL

Used to convert cloud heights from Mean Sea Level (MSL) to Above Ground Level (AGL):

const ceilingAGL = cloudHeightMSL - 413;

Example:

KSTL Elevation: 605 feet MSL

Used when KSTL data is the primary source:

const ceilingAGL = cloudHeightMSL - 605;

Example:


Implementation Details

Code Locations

Runway information is used in:

Constants

const kcpsElevation = 413;  // feet MSL
const kstlElevation = 605;  // feet MSL
const runway12Heading = 122;  // degrees magnetic
const runway30Heading = 302;  // degrees magnetic

Future Considerations

Additional Runways

If operations expand to other airports or runways:

  1. Add runway heading constants
  2. Update crosswind calculation to include all relevant runways
  3. Document new airport elevations
  4. Update ceiling calculations accordingly

Runway Surface Conditions

Current system does not account for:

These factors may be added in future versions if operational needs require.


Quick Reference Table

Airport Code Elevation Runway Headings Length
St. Louis Downtown KCPS 413 ft MSL 12/30 122°/302° 6,498 ft
Lambert International KSTL 605 ft MSL (Reference) Various Various

Related Documentation: