airport-data-js
Version:
A comprehensive library providing easy retrieval of airport data based on IATA, ICAO, city codes, country codes, and continents.
288 lines (223 loc) • 9.04 kB
Markdown
# Airport Data JS
A comprehensive JavaScript library for retrieving airport information by IATA codes, ICAO codes, and various other criteria. This library provides easy access to a large dataset of airports worldwide with detailed information including coordinates, timezone, type, and external links.
## Installation
```bash
npm install airport-data-js
```
## Features
- 🌍 Comprehensive airport database with worldwide coverage
- 🔍 Search by IATA codes, ICAO codes, country, continent, and more
- 📍 Geographic proximity search with customizable radius
- 🔗 External links to Wikipedia, airport websites, and flight tracking services
- 📏 Distance calculation between airports
- 🏷️ Filter by airport type (large_airport, medium_airport, small_airport, heliport, seaplane_base)
- 🕒 Timezone-based airport lookup
- 💡 Autocomplete suggestions for search interfaces
- 🎯 Advanced multi-criteria filtering
## Airport Data Structure
Each airport object contains the following fields:
```javascript
{
iata: "SIN", // 3-letter IATA code
icao: "WSSS", // 4-letter ICAO code
time: "Asia/Singapore", // Timezone identifier
country_code: "SG", // 2-letter country code
continent: "AS", // 2-letter continent code (AS, EU, NA, SA, AF, OC, AN)
airport: "Singapore Changi Airport", // Airport name
latitude: "1.35019", // Latitude coordinate
longitude: "103.994003", // Longitude coordinate
elevation: "22", // Elevation in feet
type: "large_airport", // Airport type
scheduled_service: true, // Has scheduled commercial service
wikipedia: "https://en.wikipedia.org/wiki/Singapore_Changi_Airport",
website: "https://www.changiairport.com",
runway_length: "13200", // Longest runway in feet
flightradar24_url: "https://www.flightradar24.com/airport/SIN",
radarbox_url: "https://www.radarbox.com/airport/WSSS",
flightaware_url: "https://www.flightaware.com/live/airport/WSSS"
}
```
## Basic Usage
```javascript
const {
getAirportByIata,
getAirportByIcao,
searchByName,
findNearbyAirports
} = require('airport-data-js');
// Get airport by IATA code
const [airport] = await getAirportByIata('SIN');
console.log(airport.airport); // "Singapore Changi Airport"
// Get airport by ICAO code
const [airport] = await getAirportByIcao('WSSS');
console.log(airport.country_code); // "SG"
// Search airports by name
const airports = await searchByName('Singapore');
console.log(airports.length); // Multiple airports matching "Singapore"
// Find nearby airports (within 50km of coordinates)
const nearby = await findNearbyAirports(1.35019, 103.994003, 50);
console.log(nearby); // Airports near Singapore Changi
```
## API Reference
### Core Search Functions
#### `getAirportByIata(iataCode)`
Finds airports by their 3-letter IATA code.
```javascript
const airports = await getAirportByIata('LHR');
// Returns array of airports with IATA code 'LHR'
```
#### `getAirportByIcao(icaoCode)`
Finds airports by their 4-character ICAO code.
```javascript
const airports = await getAirportByIcao('EGLL');
// Returns array of airports with ICAO code 'EGLL'
```
#### `searchByName(query)`
Searches for airports by name (case-insensitive, minimum 2 characters).
```javascript
const airports = await searchByName('Heathrow');
// Returns airports with 'Heathrow' in their name
```
### Geographic Functions
#### `findNearbyAirports(lat, lon, radiusKm)`
Finds airports within a specified radius of given coordinates.
```javascript
const nearby = await findNearbyAirports(51.5074, -0.1278, 100);
// Returns airports within 100km of London coordinates
```
#### `calculateDistance(code1, code2)`
Calculates the great-circle distance between two airports using IATA or ICAO codes.
```javascript
const distance = await calculateDistance('LHR', 'JFK');
// Returns distance in kilometers (approximately 5540)
```
### Filtering Functions
#### `getAirportByCountryCode(countryCode)`
Finds all airports in a specific country.
```javascript
const usAirports = await getAirportByCountryCode('US');
// Returns all airports in the United States
```
#### `getAirportByContinent(continentCode)`
Finds all airports on a specific continent.
```javascript
const asianAirports = await getAirportByContinent('AS');
// Returns all airports in Asia
// Continent codes: AS, EU, NA, SA, AF, OC, AN
```
#### `getAirportsByType(type)`
Finds airports by their type.
```javascript
const largeAirports = await getAirportsByType('large_airport');
// Available types: large_airport, medium_airport, small_airport, heliport, seaplane_base
// Convenience search for all airports
const allAirports = await getAirportsByType('airport');
// Returns large_airport, medium_airport, and small_airport
```
#### `getAirportsByTimezone(timezone)`
Finds all airports within a specific timezone.
```javascript
const londonAirports = await getAirportsByTimezone('Europe/London');
// Returns airports in London timezone
```
### Advanced Functions
#### `findAirports(filters)`
Finds airports matching multiple criteria.
```javascript
// Find large airports in Great Britain with scheduled service
const airports = await findAirports({
country_code: 'GB',
type: 'large_airport',
has_scheduled_service: true
});
// Find airports with minimum runway length
const longRunwayAirports = await findAirports({
min_runway_ft: 10000
});
```
#### `getAutocompleteSuggestions(query)`
Provides autocomplete suggestions for search interfaces (returns max 10 results).
```javascript
const suggestions = await getAutocompleteSuggestions('Lon');
// Returns up to 10 airports matching 'Lon' in name or IATA code
```
#### `getAirportLinks(code)`
Gets external links for an airport using IATA or ICAO code.
```javascript
const links = await getAirportLinks('SIN');
// Returns:
// {
// website: "https://www.changiairport.com",
// wikipedia: "https://en.wikipedia.org/wiki/Singapore_Changi_Airport",
// flightradar24: "https://www.flightradar24.com/airport/SIN",
// radarbox: "https://www.radarbox.com/airport/WSSS",
// flightaware: "https://www.flightaware.com/live/airport/WSSS"
// }
```
## Error Handling
All functions return promises and may throw errors for invalid input or when no data is found.
```javascript
try {
const airport = await getAirportByIata('XYZ');
} catch (error) {
console.error(error.message); // "No data found for IATA code: XYZ"
}
```
## Examples
### Find airports near a city
```javascript
// Find airports within 100km of Paris
const parisAirports = await findNearbyAirports(48.8566, 2.3522, 100);
console.log(`Found ${parisAirports.length} airports near Paris`);
```
### Get flight distance
```javascript
// Calculate distance between Singapore and London
const distance = await calculateDistance('SIN', 'LHR');
console.log(`Distance: ${Math.round(distance)} km`);
```
### Build an airport search interface
```javascript
// Get autocomplete suggestions
const suggestions = await getAutocompleteSuggestions('New York');
suggestions.forEach(airport => {
console.log(`${airport.iata} - ${airport.airport}`);
});
```
### Filter airports by multiple criteria
```javascript
// Find large airports in Asia with scheduled service
const asianHubs = await findAirports({
continent: 'AS',
type: 'large_airport',
has_scheduled_service: true
});
```
## Changelog
### Version 2.0.0 (Latest)
#### 🆕 New Features
- **`getAirportsByTimezone(timezone)`** - Find airports by timezone
- **`getAirportLinks(code)`** - Get external links for airports
- **`findAirports(filters)`** - Advanced multi-criteria filtering
- **`getAutocompleteSuggestions(query)`** - Autocomplete functionality
- **Enhanced `getAirportsByType(type)`** - Now supports convenience search for "airport" type
- **External links support** - Wikipedia, websites, and flight tracking URLs
- **Timezone information** - Complete timezone data for all airports
- **Runway length data** - Airport runway information included
- **Scheduled service indicator** - Whether airports have commercial scheduled service
#### 🔄 Improvements
- Better error handling and validation
- More comprehensive airport data structure
- Improved type filtering with partial matching
- Enhanced geographic calculations
- Case-insensitive search improvements
#### ❌ Removed from v1.x
- Legacy data format support
- Simplified airport objects (expanded to include more fields)
- Basic filtering (replaced with advanced `findAirports` function)
## Data Source
This library uses a comprehensive dataset of worldwide airports with regular updates to ensure accuracy and completeness.
## License
This project is licensed under the Creative Commons Attribution 4.0 International (CC BY 4.0) - see the [LICENSE](LICENSE) file for details.
## Contributing
Contributions, issues, and feature requests are welcome! Feel free to check the [issues page](https://github.com/aashishvanand/airport-data-js/issues).