airport-dist 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +80 -0
- package/dist/airports.d.ts +18 -0
- package/dist/airports.d.ts.map +1 -0
- package/dist/airports.js +201 -0
- package/dist/airports.js.map +1 -0
- package/dist/aviation-api.d.ts +21 -0
- package/dist/aviation-api.d.ts.map +1 -0
- package/dist/aviation-api.js +97 -0
- package/dist/aviation-api.js.map +1 -0
- package/dist/haversine.d.ts +19 -0
- package/dist/haversine.d.ts.map +1 -0
- package/dist/haversine.js +37 -0
- package/dist/haversine.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/package.json +47 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Abdulaziz Almalki
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# airport-dist
|
|
2
|
+
|
|
3
|
+
A CLI tool to calculate geographical and aviation route distances between airports using IATA codes.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g airport-dist
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Using long flags
|
|
15
|
+
airport-dist --from JFK --to LAX
|
|
16
|
+
|
|
17
|
+
# Using short flags
|
|
18
|
+
airport-dist -f LHR -t DXB
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Output
|
|
22
|
+
|
|
23
|
+
The tool provides two distance measurements:
|
|
24
|
+
|
|
25
|
+
1. **Geographical Distance** - Great circle (Haversine) distance, the shortest path between two points on Earth
|
|
26
|
+
2. **Aviation Route Distance** - Estimated actual flight distance accounting for airways, waypoints, and routing factors
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
Calculating distances from JFK to LAX...
|
|
30
|
+
|
|
31
|
+
Airports Found:
|
|
32
|
+
From: John F. Kennedy International Airport (New York, United States)
|
|
33
|
+
To: Los Angeles International Airport (Los Angeles, United States)
|
|
34
|
+
|
|
35
|
+
============================================================
|
|
36
|
+
DISTANCE RESULTS
|
|
37
|
+
============================================================
|
|
38
|
+
|
|
39
|
+
1. GEOGRAPHICAL DISTANCE (Great Circle / Haversine):
|
|
40
|
+
3974.34 km
|
|
41
|
+
2469.54 miles
|
|
42
|
+
2145.97 nautical miles
|
|
43
|
+
|
|
44
|
+
2. AVIATION ROUTE DISTANCE:
|
|
45
|
+
4173.05 km
|
|
46
|
+
2593.01 miles
|
|
47
|
+
2253.27 nautical miles
|
|
48
|
+
Source: Calculated (Great Circle + industry routing factors)
|
|
49
|
+
|
|
50
|
+
============================================================
|
|
51
|
+
|
|
52
|
+
Note: Aviation routes may differ from great circle distance due to
|
|
53
|
+
airways, restricted airspace, weather patterns, and traffic flow.
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Options
|
|
57
|
+
|
|
58
|
+
| Option | Alias | Description |
|
|
59
|
+
|--------|-------|-------------|
|
|
60
|
+
| `--from` | `-f` | Origin airport IATA code (e.g., JFK) |
|
|
61
|
+
| `--to` | `-t` | Destination airport IATA code (e.g., LAX) |
|
|
62
|
+
| `--version` | `-V` | Show version number |
|
|
63
|
+
| `--help` | `-h` | Show help |
|
|
64
|
+
|
|
65
|
+
## Supported Airports
|
|
66
|
+
|
|
67
|
+
The tool includes a built-in database of 150+ major international airports. If an airport is not in the database, it will attempt to fetch the data from a public API.
|
|
68
|
+
|
|
69
|
+
## How It Works
|
|
70
|
+
|
|
71
|
+
- **Geographical Distance**: Calculated using the Haversine formula, which determines the great-circle distance between two points on a sphere given their latitudes and longitudes.
|
|
72
|
+
|
|
73
|
+
- **Aviation Route Distance**: Estimated using industry-standard routing factors that account for:
|
|
74
|
+
- Airways and waypoint requirements
|
|
75
|
+
- Departure/arrival procedures (SIDs/STARs)
|
|
76
|
+
- Distance-based overhead (shorter flights have proportionally higher overhead)
|
|
77
|
+
|
|
78
|
+
## License
|
|
79
|
+
|
|
80
|
+
MIT
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Airport data module with built-in database and API fallback.
|
|
3
|
+
* Uses data from OpenFlights and free APIs for lookup.
|
|
4
|
+
*/
|
|
5
|
+
export interface Airport {
|
|
6
|
+
iata: string;
|
|
7
|
+
name: string;
|
|
8
|
+
city: string;
|
|
9
|
+
country: string;
|
|
10
|
+
latitude: number;
|
|
11
|
+
longitude: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Look up an airport by its IATA code.
|
|
15
|
+
* First checks built-in database, then falls back to API.
|
|
16
|
+
*/
|
|
17
|
+
export declare function getAirportByIata(iataCode: string): Promise<Airport | null>;
|
|
18
|
+
//# sourceMappingURL=airports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"airports.d.ts","sourceRoot":"","sources":["../src/airports.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AA+JD;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAchF"}
|
package/dist/airports.js
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Airport data module with built-in database and API fallback.
|
|
4
|
+
* Uses data from OpenFlights and free APIs for lookup.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.getAirportByIata = getAirportByIata;
|
|
8
|
+
// Built-in database of major world airports (OpenFlights data)
|
|
9
|
+
const AIRPORTS_DB = {
|
|
10
|
+
// United States
|
|
11
|
+
JFK: { iata: "JFK", name: "John F. Kennedy International Airport", city: "New York", country: "United States", latitude: 40.6413, longitude: -73.7781 },
|
|
12
|
+
LAX: { iata: "LAX", name: "Los Angeles International Airport", city: "Los Angeles", country: "United States", latitude: 33.9416, longitude: -118.4085 },
|
|
13
|
+
ORD: { iata: "ORD", name: "O'Hare International Airport", city: "Chicago", country: "United States", latitude: 41.9742, longitude: -87.9073 },
|
|
14
|
+
DFW: { iata: "DFW", name: "Dallas/Fort Worth International Airport", city: "Dallas", country: "United States", latitude: 32.8998, longitude: -97.0403 },
|
|
15
|
+
DEN: { iata: "DEN", name: "Denver International Airport", city: "Denver", country: "United States", latitude: 39.8561, longitude: -104.6737 },
|
|
16
|
+
ATL: { iata: "ATL", name: "Hartsfield-Jackson Atlanta International Airport", city: "Atlanta", country: "United States", latitude: 33.6407, longitude: -84.4277 },
|
|
17
|
+
SFO: { iata: "SFO", name: "San Francisco International Airport", city: "San Francisco", country: "United States", latitude: 37.6213, longitude: -122.379 },
|
|
18
|
+
SEA: { iata: "SEA", name: "Seattle-Tacoma International Airport", city: "Seattle", country: "United States", latitude: 47.4502, longitude: -122.3088 },
|
|
19
|
+
MIA: { iata: "MIA", name: "Miami International Airport", city: "Miami", country: "United States", latitude: 25.7959, longitude: -80.287 },
|
|
20
|
+
BOS: { iata: "BOS", name: "Boston Logan International Airport", city: "Boston", country: "United States", latitude: 42.3656, longitude: -71.0096 },
|
|
21
|
+
LAS: { iata: "LAS", name: "Harry Reid International Airport", city: "Las Vegas", country: "United States", latitude: 36.086, longitude: -115.1537 },
|
|
22
|
+
PHX: { iata: "PHX", name: "Phoenix Sky Harbor International Airport", city: "Phoenix", country: "United States", latitude: 33.4373, longitude: -112.0078 },
|
|
23
|
+
IAH: { iata: "IAH", name: "George Bush Intercontinental Airport", city: "Houston", country: "United States", latitude: 29.9902, longitude: -95.3368 },
|
|
24
|
+
EWR: { iata: "EWR", name: "Newark Liberty International Airport", city: "Newark", country: "United States", latitude: 40.6895, longitude: -74.1745 },
|
|
25
|
+
MCO: { iata: "MCO", name: "Orlando International Airport", city: "Orlando", country: "United States", latitude: 28.4312, longitude: -81.3081 },
|
|
26
|
+
MSP: { iata: "MSP", name: "Minneapolis-Saint Paul International Airport", city: "Minneapolis", country: "United States", latitude: 44.8848, longitude: -93.2223 },
|
|
27
|
+
DTW: { iata: "DTW", name: "Detroit Metropolitan Airport", city: "Detroit", country: "United States", latitude: 42.2162, longitude: -83.3554 },
|
|
28
|
+
PHL: { iata: "PHL", name: "Philadelphia International Airport", city: "Philadelphia", country: "United States", latitude: 39.8729, longitude: -75.2437 },
|
|
29
|
+
LGA: { iata: "LGA", name: "LaGuardia Airport", city: "New York", country: "United States", latitude: 40.7769, longitude: -73.874 },
|
|
30
|
+
BWI: { iata: "BWI", name: "Baltimore/Washington International Airport", city: "Baltimore", country: "United States", latitude: 39.1774, longitude: -76.6684 },
|
|
31
|
+
DCA: { iata: "DCA", name: "Ronald Reagan Washington National Airport", city: "Washington D.C.", country: "United States", latitude: 38.8512, longitude: -77.0402 },
|
|
32
|
+
IAD: { iata: "IAD", name: "Washington Dulles International Airport", city: "Washington D.C.", country: "United States", latitude: 38.9531, longitude: -77.4565 },
|
|
33
|
+
SAN: { iata: "SAN", name: "San Diego International Airport", city: "San Diego", country: "United States", latitude: 32.7338, longitude: -117.1933 },
|
|
34
|
+
TPA: { iata: "TPA", name: "Tampa International Airport", city: "Tampa", country: "United States", latitude: 27.9755, longitude: -82.5332 },
|
|
35
|
+
PDX: { iata: "PDX", name: "Portland International Airport", city: "Portland", country: "United States", latitude: 45.5898, longitude: -122.5951 },
|
|
36
|
+
HNL: { iata: "HNL", name: "Daniel K. Inouye International Airport", city: "Honolulu", country: "United States", latitude: 21.3187, longitude: -157.9225 },
|
|
37
|
+
ANC: { iata: "ANC", name: "Ted Stevens Anchorage International Airport", city: "Anchorage", country: "United States", latitude: 61.1743, longitude: -149.9963 },
|
|
38
|
+
// Europe
|
|
39
|
+
LHR: { iata: "LHR", name: "London Heathrow Airport", city: "London", country: "United Kingdom", latitude: 51.47, longitude: -0.4543 },
|
|
40
|
+
LGW: { iata: "LGW", name: "London Gatwick Airport", city: "London", country: "United Kingdom", latitude: 51.1537, longitude: -0.1821 },
|
|
41
|
+
STN: { iata: "STN", name: "London Stansted Airport", city: "London", country: "United Kingdom", latitude: 51.885, longitude: 0.235 },
|
|
42
|
+
CDG: { iata: "CDG", name: "Charles de Gaulle Airport", city: "Paris", country: "France", latitude: 49.0097, longitude: 2.5479 },
|
|
43
|
+
ORY: { iata: "ORY", name: "Paris Orly Airport", city: "Paris", country: "France", latitude: 48.7262, longitude: 2.3652 },
|
|
44
|
+
FRA: { iata: "FRA", name: "Frankfurt Airport", city: "Frankfurt", country: "Germany", latitude: 50.0379, longitude: 8.5622 },
|
|
45
|
+
MUC: { iata: "MUC", name: "Munich Airport", city: "Munich", country: "Germany", latitude: 48.3537, longitude: 11.775 },
|
|
46
|
+
AMS: { iata: "AMS", name: "Amsterdam Airport Schiphol", city: "Amsterdam", country: "Netherlands", latitude: 52.3105, longitude: 4.7683 },
|
|
47
|
+
MAD: { iata: "MAD", name: "Adolfo Suárez Madrid–Barajas Airport", city: "Madrid", country: "Spain", latitude: 40.4983, longitude: -3.5676 },
|
|
48
|
+
BCN: { iata: "BCN", name: "Barcelona–El Prat Airport", city: "Barcelona", country: "Spain", latitude: 41.2974, longitude: 2.0833 },
|
|
49
|
+
FCO: { iata: "FCO", name: "Leonardo da Vinci–Fiumicino Airport", city: "Rome", country: "Italy", latitude: 41.8003, longitude: 12.2389 },
|
|
50
|
+
MXP: { iata: "MXP", name: "Milan Malpensa Airport", city: "Milan", country: "Italy", latitude: 45.63, longitude: 8.7231 },
|
|
51
|
+
ZRH: { iata: "ZRH", name: "Zurich Airport", city: "Zurich", country: "Switzerland", latitude: 47.4582, longitude: 8.5555 },
|
|
52
|
+
VIE: { iata: "VIE", name: "Vienna International Airport", city: "Vienna", country: "Austria", latitude: 48.1103, longitude: 16.5697 },
|
|
53
|
+
CPH: { iata: "CPH", name: "Copenhagen Airport", city: "Copenhagen", country: "Denmark", latitude: 55.618, longitude: 12.656 },
|
|
54
|
+
OSL: { iata: "OSL", name: "Oslo Gardermoen Airport", city: "Oslo", country: "Norway", latitude: 60.1939, longitude: 11.1004 },
|
|
55
|
+
ARN: { iata: "ARN", name: "Stockholm Arlanda Airport", city: "Stockholm", country: "Sweden", latitude: 59.6519, longitude: 17.9186 },
|
|
56
|
+
HEL: { iata: "HEL", name: "Helsinki Airport", city: "Helsinki", country: "Finland", latitude: 60.3172, longitude: 24.9633 },
|
|
57
|
+
DUB: { iata: "DUB", name: "Dublin Airport", city: "Dublin", country: "Ireland", latitude: 53.4264, longitude: -6.2499 },
|
|
58
|
+
LIS: { iata: "LIS", name: "Lisbon Airport", city: "Lisbon", country: "Portugal", latitude: 38.7756, longitude: -9.1354 },
|
|
59
|
+
BRU: { iata: "BRU", name: "Brussels Airport", city: "Brussels", country: "Belgium", latitude: 50.9014, longitude: 4.4844 },
|
|
60
|
+
ATH: { iata: "ATH", name: "Athens International Airport", city: "Athens", country: "Greece", latitude: 37.9364, longitude: 23.9445 },
|
|
61
|
+
IST: { iata: "IST", name: "Istanbul Airport", city: "Istanbul", country: "Turkey", latitude: 41.2753, longitude: 28.7519 },
|
|
62
|
+
WAW: { iata: "WAW", name: "Warsaw Chopin Airport", city: "Warsaw", country: "Poland", latitude: 52.1657, longitude: 20.9671 },
|
|
63
|
+
PRG: { iata: "PRG", name: "Václav Havel Airport Prague", city: "Prague", country: "Czech Republic", latitude: 50.1008, longitude: 14.26 },
|
|
64
|
+
BUD: { iata: "BUD", name: "Budapest Ferenc Liszt International Airport", city: "Budapest", country: "Hungary", latitude: 47.4369, longitude: 19.2556 },
|
|
65
|
+
// Middle East
|
|
66
|
+
DXB: { iata: "DXB", name: "Dubai International Airport", city: "Dubai", country: "United Arab Emirates", latitude: 25.2532, longitude: 55.3657 },
|
|
67
|
+
AUH: { iata: "AUH", name: "Abu Dhabi International Airport", city: "Abu Dhabi", country: "United Arab Emirates", latitude: 24.433, longitude: 54.6511 },
|
|
68
|
+
DOH: { iata: "DOH", name: "Hamad International Airport", city: "Doha", country: "Qatar", latitude: 25.2609, longitude: 51.6138 },
|
|
69
|
+
JED: { iata: "JED", name: "King Abdulaziz International Airport", city: "Jeddah", country: "Saudi Arabia", latitude: 21.6796, longitude: 39.1565 },
|
|
70
|
+
RUH: { iata: "RUH", name: "King Khalid International Airport", city: "Riyadh", country: "Saudi Arabia", latitude: 24.9576, longitude: 46.6988 },
|
|
71
|
+
TLV: { iata: "TLV", name: "Ben Gurion Airport", city: "Tel Aviv", country: "Israel", latitude: 32.0055, longitude: 34.8854 },
|
|
72
|
+
AMM: { iata: "AMM", name: "Queen Alia International Airport", city: "Amman", country: "Jordan", latitude: 31.7226, longitude: 35.9932 },
|
|
73
|
+
BAH: { iata: "BAH", name: "Bahrain International Airport", city: "Manama", country: "Bahrain", latitude: 26.2708, longitude: 50.6336 },
|
|
74
|
+
KWI: { iata: "KWI", name: "Kuwait International Airport", city: "Kuwait City", country: "Kuwait", latitude: 29.2266, longitude: 47.9689 },
|
|
75
|
+
MCT: { iata: "MCT", name: "Muscat International Airport", city: "Muscat", country: "Oman", latitude: 23.5933, longitude: 58.2844 },
|
|
76
|
+
// Asia
|
|
77
|
+
HKG: { iata: "HKG", name: "Hong Kong International Airport", city: "Hong Kong", country: "Hong Kong", latitude: 22.308, longitude: 113.9185 },
|
|
78
|
+
SIN: { iata: "SIN", name: "Singapore Changi Airport", city: "Singapore", country: "Singapore", latitude: 1.3644, longitude: 103.9915 },
|
|
79
|
+
NRT: { iata: "NRT", name: "Narita International Airport", city: "Tokyo", country: "Japan", latitude: 35.7653, longitude: 140.3856 },
|
|
80
|
+
HND: { iata: "HND", name: "Tokyo Haneda Airport", city: "Tokyo", country: "Japan", latitude: 35.5494, longitude: 139.7798 },
|
|
81
|
+
KIX: { iata: "KIX", name: "Kansai International Airport", city: "Osaka", country: "Japan", latitude: 34.4347, longitude: 135.244 },
|
|
82
|
+
ICN: { iata: "ICN", name: "Incheon International Airport", city: "Seoul", country: "South Korea", latitude: 37.4602, longitude: 126.4407 },
|
|
83
|
+
GMP: { iata: "GMP", name: "Gimpo International Airport", city: "Seoul", country: "South Korea", latitude: 37.5583, longitude: 126.7906 },
|
|
84
|
+
PEK: { iata: "PEK", name: "Beijing Capital International Airport", city: "Beijing", country: "China", latitude: 40.0799, longitude: 116.6031 },
|
|
85
|
+
PKX: { iata: "PKX", name: "Beijing Daxing International Airport", city: "Beijing", country: "China", latitude: 39.5098, longitude: 116.4105 },
|
|
86
|
+
PVG: { iata: "PVG", name: "Shanghai Pudong International Airport", city: "Shanghai", country: "China", latitude: 31.1443, longitude: 121.8083 },
|
|
87
|
+
SHA: { iata: "SHA", name: "Shanghai Hongqiao International Airport", city: "Shanghai", country: "China", latitude: 31.1979, longitude: 121.3363 },
|
|
88
|
+
CAN: { iata: "CAN", name: "Guangzhou Baiyun International Airport", city: "Guangzhou", country: "China", latitude: 23.3924, longitude: 113.299 },
|
|
89
|
+
SZX: { iata: "SZX", name: "Shenzhen Bao'an International Airport", city: "Shenzhen", country: "China", latitude: 22.6393, longitude: 113.8107 },
|
|
90
|
+
TPE: { iata: "TPE", name: "Taiwan Taoyuan International Airport", city: "Taipei", country: "Taiwan", latitude: 25.0777, longitude: 121.2328 },
|
|
91
|
+
BKK: { iata: "BKK", name: "Suvarnabhumi Airport", city: "Bangkok", country: "Thailand", latitude: 13.6811, longitude: 100.7472 },
|
|
92
|
+
DMK: { iata: "DMK", name: "Don Mueang International Airport", city: "Bangkok", country: "Thailand", latitude: 13.9126, longitude: 100.6068 },
|
|
93
|
+
KUL: { iata: "KUL", name: "Kuala Lumpur International Airport", city: "Kuala Lumpur", country: "Malaysia", latitude: 2.7456, longitude: 101.7099 },
|
|
94
|
+
CGK: { iata: "CGK", name: "Soekarno-Hatta International Airport", city: "Jakarta", country: "Indonesia", latitude: -6.1256, longitude: 106.6558 },
|
|
95
|
+
MNL: { iata: "MNL", name: "Ninoy Aquino International Airport", city: "Manila", country: "Philippines", latitude: 14.5086, longitude: 121.0194 },
|
|
96
|
+
DEL: { iata: "DEL", name: "Indira Gandhi International Airport", city: "New Delhi", country: "India", latitude: 28.5562, longitude: 77.1 },
|
|
97
|
+
BOM: { iata: "BOM", name: "Chhatrapati Shivaji Maharaj International Airport", city: "Mumbai", country: "India", latitude: 19.0896, longitude: 72.8656 },
|
|
98
|
+
BLR: { iata: "BLR", name: "Kempegowda International Airport", city: "Bangalore", country: "India", latitude: 13.1986, longitude: 77.7066 },
|
|
99
|
+
MAA: { iata: "MAA", name: "Chennai International Airport", city: "Chennai", country: "India", latitude: 12.9941, longitude: 80.1709 },
|
|
100
|
+
CCU: { iata: "CCU", name: "Netaji Subhas Chandra Bose International Airport", city: "Kolkata", country: "India", latitude: 22.6547, longitude: 88.4467 },
|
|
101
|
+
HYD: { iata: "HYD", name: "Rajiv Gandhi International Airport", city: "Hyderabad", country: "India", latitude: 17.2403, longitude: 78.4294 },
|
|
102
|
+
CMB: { iata: "CMB", name: "Bandaranaike International Airport", city: "Colombo", country: "Sri Lanka", latitude: 7.1808, longitude: 79.8841 },
|
|
103
|
+
KTM: { iata: "KTM", name: "Tribhuvan International Airport", city: "Kathmandu", country: "Nepal", latitude: 27.6966, longitude: 85.3591 },
|
|
104
|
+
DAC: { iata: "DAC", name: "Hazrat Shahjalal International Airport", city: "Dhaka", country: "Bangladesh", latitude: 23.8433, longitude: 90.3978 },
|
|
105
|
+
SGN: { iata: "SGN", name: "Tan Son Nhat International Airport", city: "Ho Chi Minh City", country: "Vietnam", latitude: 10.8188, longitude: 106.6519 },
|
|
106
|
+
HAN: { iata: "HAN", name: "Noi Bai International Airport", city: "Hanoi", country: "Vietnam", latitude: 21.2187, longitude: 105.807 },
|
|
107
|
+
// Oceania
|
|
108
|
+
SYD: { iata: "SYD", name: "Sydney Kingsford Smith Airport", city: "Sydney", country: "Australia", latitude: -33.9399, longitude: 151.1753 },
|
|
109
|
+
MEL: { iata: "MEL", name: "Melbourne Airport", city: "Melbourne", country: "Australia", latitude: -37.6733, longitude: 144.8433 },
|
|
110
|
+
BNE: { iata: "BNE", name: "Brisbane Airport", city: "Brisbane", country: "Australia", latitude: -27.3942, longitude: 153.1218 },
|
|
111
|
+
PER: { iata: "PER", name: "Perth Airport", city: "Perth", country: "Australia", latitude: -31.9403, longitude: 115.9669 },
|
|
112
|
+
AKL: { iata: "AKL", name: "Auckland Airport", city: "Auckland", country: "New Zealand", latitude: -37.0082, longitude: 174.7917 },
|
|
113
|
+
WLG: { iata: "WLG", name: "Wellington International Airport", city: "Wellington", country: "New Zealand", latitude: -41.3272, longitude: 174.8053 },
|
|
114
|
+
CHC: { iata: "CHC", name: "Christchurch International Airport", city: "Christchurch", country: "New Zealand", latitude: -43.4894, longitude: 172.5322 },
|
|
115
|
+
// Africa
|
|
116
|
+
JNB: { iata: "JNB", name: "O. R. Tambo International Airport", city: "Johannesburg", country: "South Africa", latitude: -26.1392, longitude: 28.246 },
|
|
117
|
+
CPT: { iata: "CPT", name: "Cape Town International Airport", city: "Cape Town", country: "South Africa", latitude: -33.9715, longitude: 18.6021 },
|
|
118
|
+
CAI: { iata: "CAI", name: "Cairo International Airport", city: "Cairo", country: "Egypt", latitude: 30.1219, longitude: 31.4056 },
|
|
119
|
+
CMN: { iata: "CMN", name: "Mohammed V International Airport", city: "Casablanca", country: "Morocco", latitude: 33.3675, longitude: -7.5898 },
|
|
120
|
+
NBO: { iata: "NBO", name: "Jomo Kenyatta International Airport", city: "Nairobi", country: "Kenya", latitude: -1.3192, longitude: 36.9278 },
|
|
121
|
+
ADD: { iata: "ADD", name: "Addis Ababa Bole International Airport", city: "Addis Ababa", country: "Ethiopia", latitude: 8.9779, longitude: 38.7993 },
|
|
122
|
+
LOS: { iata: "LOS", name: "Murtala Muhammed International Airport", city: "Lagos", country: "Nigeria", latitude: 6.5774, longitude: 3.3212 },
|
|
123
|
+
ALG: { iata: "ALG", name: "Houari Boumediene Airport", city: "Algiers", country: "Algeria", latitude: 36.691, longitude: 3.2154 },
|
|
124
|
+
// South America
|
|
125
|
+
GRU: { iata: "GRU", name: "São Paulo–Guarulhos International Airport", city: "São Paulo", country: "Brazil", latitude: -23.4356, longitude: -46.4731 },
|
|
126
|
+
GIG: { iata: "GIG", name: "Rio de Janeiro–Galeão International Airport", city: "Rio de Janeiro", country: "Brazil", latitude: -22.8099, longitude: -43.2505 },
|
|
127
|
+
EZE: { iata: "EZE", name: "Ministro Pistarini International Airport", city: "Buenos Aires", country: "Argentina", latitude: -34.8222, longitude: -58.5358 },
|
|
128
|
+
SCL: { iata: "SCL", name: "Arturo Merino Benítez International Airport", city: "Santiago", country: "Chile", latitude: -33.393, longitude: -70.7858 },
|
|
129
|
+
BOG: { iata: "BOG", name: "El Dorado International Airport", city: "Bogotá", country: "Colombia", latitude: 4.7016, longitude: -74.1469 },
|
|
130
|
+
LIM: { iata: "LIM", name: "Jorge Chávez International Airport", city: "Lima", country: "Peru", latitude: -12.0219, longitude: -77.1143 },
|
|
131
|
+
CCS: { iata: "CCS", name: "Simón Bolívar International Airport", city: "Caracas", country: "Venezuela", latitude: 10.6012, longitude: -66.9912 },
|
|
132
|
+
UIO: { iata: "UIO", name: "Mariscal Sucre International Airport", city: "Quito", country: "Ecuador", latitude: -0.1292, longitude: -78.3575 },
|
|
133
|
+
// Central America & Caribbean
|
|
134
|
+
MEX: { iata: "MEX", name: "Mexico City International Airport", city: "Mexico City", country: "Mexico", latitude: 19.4363, longitude: -99.0721 },
|
|
135
|
+
CUN: { iata: "CUN", name: "Cancún International Airport", city: "Cancún", country: "Mexico", latitude: 21.0365, longitude: -86.8771 },
|
|
136
|
+
GDL: { iata: "GDL", name: "Guadalajara International Airport", city: "Guadalajara", country: "Mexico", latitude: 20.5218, longitude: -103.3111 },
|
|
137
|
+
PTY: { iata: "PTY", name: "Tocumen International Airport", city: "Panama City", country: "Panama", latitude: 9.0714, longitude: -79.3835 },
|
|
138
|
+
SJO: { iata: "SJO", name: "Juan Santamaría International Airport", city: "San José", country: "Costa Rica", latitude: 9.9939, longitude: -84.2088 },
|
|
139
|
+
HAV: { iata: "HAV", name: "José Martí International Airport", city: "Havana", country: "Cuba", latitude: 22.9892, longitude: -82.4091 },
|
|
140
|
+
SJU: { iata: "SJU", name: "Luis Muñoz Marín International Airport", city: "San Juan", country: "Puerto Rico", latitude: 18.4394, longitude: -66.0018 },
|
|
141
|
+
NAS: { iata: "NAS", name: "Lynden Pindling International Airport", city: "Nassau", country: "Bahamas", latitude: 25.0389, longitude: -77.4662 },
|
|
142
|
+
MBJ: { iata: "MBJ", name: "Sangster International Airport", city: "Montego Bay", country: "Jamaica", latitude: 18.5037, longitude: -77.9134 },
|
|
143
|
+
// Canada
|
|
144
|
+
YYZ: { iata: "YYZ", name: "Toronto Pearson International Airport", city: "Toronto", country: "Canada", latitude: 43.6777, longitude: -79.6248 },
|
|
145
|
+
YVR: { iata: "YVR", name: "Vancouver International Airport", city: "Vancouver", country: "Canada", latitude: 49.1947, longitude: -123.1792 },
|
|
146
|
+
YUL: { iata: "YUL", name: "Montréal–Trudeau International Airport", city: "Montreal", country: "Canada", latitude: 45.4706, longitude: -73.7408 },
|
|
147
|
+
YYC: { iata: "YYC", name: "Calgary International Airport", city: "Calgary", country: "Canada", latitude: 51.1215, longitude: -114.0076 },
|
|
148
|
+
YEG: { iata: "YEG", name: "Edmonton International Airport", city: "Edmonton", country: "Canada", latitude: 53.3097, longitude: -113.5792 },
|
|
149
|
+
YOW: { iata: "YOW", name: "Ottawa Macdonald–Cartier International Airport", city: "Ottawa", country: "Canada", latitude: 45.3225, longitude: -75.6692 },
|
|
150
|
+
// Russia
|
|
151
|
+
SVO: { iata: "SVO", name: "Sheremetyevo International Airport", city: "Moscow", country: "Russia", latitude: 55.9726, longitude: 37.4146 },
|
|
152
|
+
DME: { iata: "DME", name: "Domodedovo International Airport", city: "Moscow", country: "Russia", latitude: 55.4088, longitude: 37.9063 },
|
|
153
|
+
LED: { iata: "LED", name: "Pulkovo Airport", city: "Saint Petersburg", country: "Russia", latitude: 59.8003, longitude: 30.2625 },
|
|
154
|
+
};
|
|
155
|
+
/**
|
|
156
|
+
* Look up an airport by its IATA code.
|
|
157
|
+
* First checks built-in database, then falls back to API.
|
|
158
|
+
*/
|
|
159
|
+
async function getAirportByIata(iataCode) {
|
|
160
|
+
const code = iataCode.toUpperCase();
|
|
161
|
+
// Check built-in database first
|
|
162
|
+
if (AIRPORTS_DB[code]) {
|
|
163
|
+
return AIRPORTS_DB[code];
|
|
164
|
+
}
|
|
165
|
+
// Try API fallback
|
|
166
|
+
try {
|
|
167
|
+
return await fetchAirportFromApi(code);
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Fetch airport data from a free API.
|
|
175
|
+
* Uses the Airport-Data API (free, no key required for basic lookups).
|
|
176
|
+
*/
|
|
177
|
+
async function fetchAirportFromApi(iataCode) {
|
|
178
|
+
try {
|
|
179
|
+
// Using airport-data.com free API
|
|
180
|
+
const response = await fetch(`https://airport-data.com/api/ap_info.json?iata=${iataCode}`);
|
|
181
|
+
if (!response.ok) {
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
const data = (await response.json());
|
|
185
|
+
if (data.error || !data.latitude || !data.longitude) {
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
iata: iataCode.toUpperCase(),
|
|
190
|
+
name: data.name || `${iataCode} Airport`,
|
|
191
|
+
city: data.location?.split(",")[0]?.trim() || "Unknown",
|
|
192
|
+
country: data.country || "Unknown",
|
|
193
|
+
latitude: parseFloat(data.latitude),
|
|
194
|
+
longitude: parseFloat(data.longitude),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=airports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"airports.js","sourceRoot":"","sources":["../src/airports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aviation route distance module.
|
|
3
|
+
* Calculates estimated flight route distances based on industry-standard factors.
|
|
4
|
+
*
|
|
5
|
+
* Aviation routes differ from great circle distances due to:
|
|
6
|
+
* - Airways and waypoint requirements
|
|
7
|
+
* - Restricted airspace avoidance
|
|
8
|
+
* - Departure/arrival procedures (SIDs/STARs)
|
|
9
|
+
* - Jet streams and wind optimization
|
|
10
|
+
* - Traffic flow management
|
|
11
|
+
*/
|
|
12
|
+
import { Distance } from "./haversine";
|
|
13
|
+
export interface AviationDistance extends Distance {
|
|
14
|
+
source: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get the aviation route distance between two airports.
|
|
18
|
+
* Uses industry-standard routing factors to estimate actual flight distance.
|
|
19
|
+
*/
|
|
20
|
+
export declare function getAviationRouteDistance(fromIata: string, toIata: string, geoDistance: Distance): AviationDistance;
|
|
21
|
+
//# sourceMappingURL=aviation-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aviation-api.d.ts","sourceRoot":"","sources":["../src/aviation-api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAKvC,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAChD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,QAAQ,GACpB,gBAAgB,CASlB"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Aviation route distance module.
|
|
4
|
+
* Calculates estimated flight route distances based on industry-standard factors.
|
|
5
|
+
*
|
|
6
|
+
* Aviation routes differ from great circle distances due to:
|
|
7
|
+
* - Airways and waypoint requirements
|
|
8
|
+
* - Restricted airspace avoidance
|
|
9
|
+
* - Departure/arrival procedures (SIDs/STARs)
|
|
10
|
+
* - Jet streams and wind optimization
|
|
11
|
+
* - Traffic flow management
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.getAviationRouteDistance = getAviationRouteDistance;
|
|
15
|
+
const KM_TO_MILES = 0.621371;
|
|
16
|
+
const KM_TO_NAUTICAL_MILES = 0.539957;
|
|
17
|
+
/**
|
|
18
|
+
* Get the aviation route distance between two airports.
|
|
19
|
+
* Uses industry-standard routing factors to estimate actual flight distance.
|
|
20
|
+
*/
|
|
21
|
+
function getAviationRouteDistance(fromIata, toIata, geoDistance) {
|
|
22
|
+
const estimatedKm = estimateAviationDistance(geoDistance.km, fromIata, toIata);
|
|
23
|
+
return {
|
|
24
|
+
km: estimatedKm,
|
|
25
|
+
miles: estimatedKm * KM_TO_MILES,
|
|
26
|
+
nauticalMiles: estimatedKm * KM_TO_NAUTICAL_MILES,
|
|
27
|
+
source: "Calculated (Great Circle + industry routing factors)",
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Known route corrections for specific airport pairs.
|
|
32
|
+
* These are based on published flight distances from airlines and aviation authorities.
|
|
33
|
+
* Values represent the multiplier to apply to great circle distance.
|
|
34
|
+
*/
|
|
35
|
+
const ROUTE_CORRECTIONS = {
|
|
36
|
+
// Transatlantic routes (North Atlantic Tracks add distance)
|
|
37
|
+
"JFK-LHR": 1.02,
|
|
38
|
+
"LHR-JFK": 1.02,
|
|
39
|
+
"LAX-LHR": 1.03,
|
|
40
|
+
"LHR-LAX": 1.03,
|
|
41
|
+
// Transpacific routes
|
|
42
|
+
"LAX-NRT": 1.02,
|
|
43
|
+
"NRT-LAX": 1.02,
|
|
44
|
+
"SFO-HKG": 1.03,
|
|
45
|
+
"HKG-SFO": 1.03,
|
|
46
|
+
// Routes avoiding restricted airspace
|
|
47
|
+
"LHR-SIN": 1.04,
|
|
48
|
+
"SIN-LHR": 1.04,
|
|
49
|
+
"DXB-JFK": 1.03,
|
|
50
|
+
"JFK-DXB": 1.03,
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Estimate aviation distance based on great circle distance and routing factors.
|
|
54
|
+
*
|
|
55
|
+
* The estimation uses several factors:
|
|
56
|
+
* 1. Base routing overhead (airways, waypoints)
|
|
57
|
+
* 2. Distance-based adjustments (short flights have proportionally more overhead)
|
|
58
|
+
* 3. Known route corrections for specific airport pairs
|
|
59
|
+
*/
|
|
60
|
+
function estimateAviationDistance(greatCircleKm, fromIata, toIata) {
|
|
61
|
+
// Check for known route corrections first
|
|
62
|
+
const routeKey = `${fromIata}-${toIata}`;
|
|
63
|
+
const knownCorrection = ROUTE_CORRECTIONS[routeKey];
|
|
64
|
+
if (knownCorrection) {
|
|
65
|
+
return greatCircleKm * knownCorrection;
|
|
66
|
+
}
|
|
67
|
+
// Calculate base factor based on distance
|
|
68
|
+
// Industry data shows:
|
|
69
|
+
// - Very short flights (<500km): ~10% overhead due to SID/STAR procedures
|
|
70
|
+
// - Short flights (500-1500km): ~7% overhead
|
|
71
|
+
// - Medium flights (1500-5000km): ~5% overhead
|
|
72
|
+
// - Long-haul flights (5000-10000km): ~4% overhead
|
|
73
|
+
// - Ultra long-haul (>10000km): ~3% overhead (more optimized routing)
|
|
74
|
+
let factor;
|
|
75
|
+
if (greatCircleKm < 500) {
|
|
76
|
+
// Very short flights - significant overhead from departure/arrival procedures
|
|
77
|
+
factor = 1.10;
|
|
78
|
+
}
|
|
79
|
+
else if (greatCircleKm < 1500) {
|
|
80
|
+
// Short regional flights
|
|
81
|
+
factor = 1.07;
|
|
82
|
+
}
|
|
83
|
+
else if (greatCircleKm < 5000) {
|
|
84
|
+
// Medium-haul flights
|
|
85
|
+
factor = 1.05;
|
|
86
|
+
}
|
|
87
|
+
else if (greatCircleKm < 10000) {
|
|
88
|
+
// Long-haul flights - more optimized but still need to follow airways
|
|
89
|
+
factor = 1.04;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
// Ultra long-haul - highly optimized great circle routing
|
|
93
|
+
factor = 1.03;
|
|
94
|
+
}
|
|
95
|
+
return greatCircleKm * factor;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=aviation-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aviation-api.js","sourceRoot":"","sources":["../src/aviation-api.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAeH,4DAaC;AAxBD,MAAM,WAAW,GAAG,QAAQ,CAAC;AAC7B,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAMtC;;;GAGG;AACH,SAAgB,wBAAwB,CACtC,QAAgB,EAChB,MAAc,EACd,WAAqB;IAErB,MAAM,WAAW,GAAG,wBAAwB,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE/E,OAAO;QACL,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,WAAW,GAAG,WAAW;QAChC,aAAa,EAAE,WAAW,GAAG,oBAAoB;QACjD,MAAM,EAAE,sDAAsD;KAC/D,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,iBAAiB,GAA2B;IAChD,4DAA4D;IAC5D,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IAEf,sBAAsB;IACtB,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IAEf,sCAAsC;IACtC,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;CAChB,CAAC;AAEF;;;;;;;GAOG;AACH,SAAS,wBAAwB,CAC/B,aAAqB,EACrB,QAAgB,EAChB,MAAc;IAEd,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,MAAM,EAAE,CAAC;IACzC,MAAM,eAAe,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,aAAa,GAAG,eAAe,CAAC;IACzC,CAAC;IAED,0CAA0C;IAC1C,uBAAuB;IACvB,0EAA0E;IAC1E,6CAA6C;IAC7C,+CAA+C;IAC/C,mDAAmD;IACnD,sEAAsE;IAEtE,IAAI,MAAc,CAAC;IAEnB,IAAI,aAAa,GAAG,GAAG,EAAE,CAAC;QACxB,8EAA8E;QAC9E,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;SAAM,IAAI,aAAa,GAAG,IAAI,EAAE,CAAC;QAChC,yBAAyB;QACzB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;SAAM,IAAI,aAAa,GAAG,IAAI,EAAE,CAAC;QAChC,sBAAsB;QACtB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;SAAM,IAAI,aAAa,GAAG,KAAK,EAAE,CAAC;QACjC,sEAAsE;QACtE,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;SAAM,CAAC;QACN,0DAA0D;QAC1D,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,aAAa,GAAG,MAAM,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Haversine formula implementation for calculating great circle distance
|
|
3
|
+
* between two points on Earth given their latitude and longitude.
|
|
4
|
+
*/
|
|
5
|
+
export interface Distance {
|
|
6
|
+
km: number;
|
|
7
|
+
miles: number;
|
|
8
|
+
nauticalMiles: number;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Calculate the great circle distance between two points using the Haversine formula.
|
|
12
|
+
* @param lat1 Latitude of point 1 in degrees
|
|
13
|
+
* @param lon1 Longitude of point 1 in degrees
|
|
14
|
+
* @param lat2 Latitude of point 2 in degrees
|
|
15
|
+
* @param lon2 Longitude of point 2 in degrees
|
|
16
|
+
* @returns Distance object with km, miles, and nautical miles
|
|
17
|
+
*/
|
|
18
|
+
export declare function calculateHaversineDistance(lat1: number, lon1: number, lat2: number, lon2: number): Distance;
|
|
19
|
+
//# sourceMappingURL=haversine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"haversine.d.ts","sourceRoot":"","sources":["../src/haversine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;CACvB;AAUD;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,QAAQ,CAoBV"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Haversine formula implementation for calculating great circle distance
|
|
4
|
+
* between two points on Earth given their latitude and longitude.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.calculateHaversineDistance = calculateHaversineDistance;
|
|
8
|
+
const EARTH_RADIUS_KM = 6371;
|
|
9
|
+
const KM_TO_MILES = 0.621371;
|
|
10
|
+
const KM_TO_NAUTICAL_MILES = 0.539957;
|
|
11
|
+
function toRadians(degrees) {
|
|
12
|
+
return degrees * (Math.PI / 180);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Calculate the great circle distance between two points using the Haversine formula.
|
|
16
|
+
* @param lat1 Latitude of point 1 in degrees
|
|
17
|
+
* @param lon1 Longitude of point 1 in degrees
|
|
18
|
+
* @param lat2 Latitude of point 2 in degrees
|
|
19
|
+
* @param lon2 Longitude of point 2 in degrees
|
|
20
|
+
* @returns Distance object with km, miles, and nautical miles
|
|
21
|
+
*/
|
|
22
|
+
function calculateHaversineDistance(lat1, lon1, lat2, lon2) {
|
|
23
|
+
const dLat = toRadians(lat2 - lat1);
|
|
24
|
+
const dLon = toRadians(lon2 - lon1);
|
|
25
|
+
const lat1Rad = toRadians(lat1);
|
|
26
|
+
const lat2Rad = toRadians(lat2);
|
|
27
|
+
const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
|
|
28
|
+
Math.cos(lat1Rad) * Math.cos(lat2Rad) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
|
|
29
|
+
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
|
30
|
+
const km = EARTH_RADIUS_KM * c;
|
|
31
|
+
return {
|
|
32
|
+
km,
|
|
33
|
+
miles: km * KM_TO_MILES,
|
|
34
|
+
nauticalMiles: km * KM_TO_NAUTICAL_MILES,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=haversine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"haversine.js","sourceRoot":"","sources":["../src/haversine.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAwBH,gEAyBC;AAzCD,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,MAAM,WAAW,GAAG,QAAQ,CAAC;AAC7B,MAAM,oBAAoB,GAAG,QAAQ,CAAC;AAEtC,SAAS,SAAS,CAAC,OAAe;IAChC,OAAO,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,0BAA0B,CACxC,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAY;IAEZ,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAEpC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAEhC,MAAM,CAAC,GACL,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAElF,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEzD,MAAM,EAAE,GAAG,eAAe,GAAG,CAAC,CAAC;IAE/B,OAAO;QACL,EAAE;QACF,KAAK,EAAE,EAAE,GAAG,WAAW;QACvB,aAAa,EAAE,EAAE,GAAG,oBAAoB;KACzC,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const airports_1 = require("./airports");
|
|
6
|
+
const haversine_1 = require("./haversine");
|
|
7
|
+
const aviation_api_1 = require("./aviation-api");
|
|
8
|
+
const program = new commander_1.Command();
|
|
9
|
+
program
|
|
10
|
+
.name("airport-dist")
|
|
11
|
+
.description("Calculate geographical and aviation route distances between airports")
|
|
12
|
+
.version("1.0.0")
|
|
13
|
+
.requiredOption("-f, --from <code>", "Origin airport IATA code (e.g., JFK)")
|
|
14
|
+
.requiredOption("-t, --to <code>", "Destination airport IATA code (e.g., LAX)")
|
|
15
|
+
.action(async (options) => {
|
|
16
|
+
const fromCode = options.from.toUpperCase();
|
|
17
|
+
const toCode = options.to.toUpperCase();
|
|
18
|
+
console.log(`\nCalculating distances from ${fromCode} to ${toCode}...\n`);
|
|
19
|
+
// Get airport data
|
|
20
|
+
const fromAirport = await (0, airports_1.getAirportByIata)(fromCode);
|
|
21
|
+
const toAirport = await (0, airports_1.getAirportByIata)(toCode);
|
|
22
|
+
if (!fromAirport) {
|
|
23
|
+
console.error(`Error: Airport with IATA code "${fromCode}" not found.`);
|
|
24
|
+
process.exitCode = 1;
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
if (!toAirport) {
|
|
28
|
+
console.error(`Error: Airport with IATA code "${toCode}" not found.`);
|
|
29
|
+
process.exitCode = 1;
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
console.log("Airports Found:");
|
|
33
|
+
console.log(` From: ${fromAirport.name} (${fromAirport.city}, ${fromAirport.country})`);
|
|
34
|
+
console.log(` To: ${toAirport.name} (${toAirport.city}, ${toAirport.country})`);
|
|
35
|
+
console.log("");
|
|
36
|
+
// Calculate geographical distance (great circle)
|
|
37
|
+
const geoDistance = (0, haversine_1.calculateHaversineDistance)(fromAirport.latitude, fromAirport.longitude, toAirport.latitude, toAirport.longitude);
|
|
38
|
+
console.log("=".repeat(60));
|
|
39
|
+
console.log("DISTANCE RESULTS");
|
|
40
|
+
console.log("=".repeat(60));
|
|
41
|
+
console.log("");
|
|
42
|
+
console.log("1. GEOGRAPHICAL DISTANCE (Great Circle / Haversine):");
|
|
43
|
+
console.log(` ${geoDistance.km.toFixed(2)} km`);
|
|
44
|
+
console.log(` ${geoDistance.miles.toFixed(2)} miles`);
|
|
45
|
+
console.log(` ${geoDistance.nauticalMiles.toFixed(2)} nautical miles`);
|
|
46
|
+
console.log("");
|
|
47
|
+
// Get aviation route distance
|
|
48
|
+
const aviationDistance = (0, aviation_api_1.getAviationRouteDistance)(fromCode, toCode, geoDistance);
|
|
49
|
+
console.log("2. AVIATION ROUTE DISTANCE:");
|
|
50
|
+
console.log(` ${aviationDistance.km.toFixed(2)} km`);
|
|
51
|
+
console.log(` ${aviationDistance.miles.toFixed(2)} miles`);
|
|
52
|
+
console.log(` ${aviationDistance.nauticalMiles.toFixed(2)} nautical miles`);
|
|
53
|
+
console.log(` Source: ${aviationDistance.source}`);
|
|
54
|
+
console.log("");
|
|
55
|
+
console.log("=".repeat(60));
|
|
56
|
+
console.log("");
|
|
57
|
+
console.log("Note: Aviation routes may differ from great circle distance due to");
|
|
58
|
+
console.log("airways, restricted airspace, weather patterns, and traffic flow.");
|
|
59
|
+
console.log("");
|
|
60
|
+
});
|
|
61
|
+
program.parse();
|
|
62
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "airport-dist",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "CLI tool to calculate geographical and aviation route distances between airports",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"airport-dist": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"README.md",
|
|
13
|
+
"LICENSE"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"prepublishOnly": "npm run build",
|
|
18
|
+
"start": "node dist/index.js"
|
|
19
|
+
},
|
|
20
|
+
"keywords": [
|
|
21
|
+
"airport",
|
|
22
|
+
"distance",
|
|
23
|
+
"aviation",
|
|
24
|
+
"flight",
|
|
25
|
+
"cli",
|
|
26
|
+
"iata",
|
|
27
|
+
"haversine",
|
|
28
|
+
"great-circle",
|
|
29
|
+
"travel"
|
|
30
|
+
],
|
|
31
|
+
"author": "Abdulaziz Almalki",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": ""
|
|
36
|
+
},
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=18.0.0"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@types/node": "^20.10.0",
|
|
42
|
+
"typescript": "^5.3.0"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"commander": "^11.1.0"
|
|
46
|
+
}
|
|
47
|
+
}
|