Радионавигационные средства
Готовые к запуску примеры запросов радионавигационных средств через эндпоинт Navaids: наложение на аэронавигационную карту района вокруг аэропорта и фильтрация заходов по ILS.
| # | Вопрос | Используемые данные |
|---|---|---|
| 1 | Список всех радионавигационных средств рядом с KJFK для наложения на аэронавигационную карту | /navaids |
| 2 | Найти все заходы по ILS в аэропорту | /navaids |
Требования
x-api-key в каждом запросе (прямая подписка). Подробнее →Установка
Приведённые ниже скрипты используют requests для вызовов API и rich для вывода в терминал. Установите один раз:
pip install requests rich1. Радионавигационные средства рядом с аэропортом для наложения на карту
Вопрос: Перечислить все радионавигационные средства рядом с KJFK для наложения на аэронавигационную карту.
Для ОВЧ-средств (VOR, VOR-DME, VORDME, ILS, LOC) возвращается frequency_khz — разделите значение на 1000, чтобы получить частоту в MHz, указываемую на картах. Частоты NDB остаются в kHz. Результаты сгруппированы по типу средства.
import os
from collections import defaultdict
import requests
from rich.console import Console
from rich.table import Table
console = Console()
HEADERS = {
"X-RapidAPI-Key": os.getenv("RAPIDAPI_KEY", "YOUR_RAPIDAPI_KEY"),
"X-RapidAPI-Host": "skylink-api.p.rapidapi.com",
}
BASE = "https://skylink-api.p.rapidapi.com"
VHF_TYPES = {"VOR", "VOR-DME", "VORDME", "ILS", "LOC", "DME", "TACAN"}
def fetch_navaids(airport: str) -> list[dict]:
r = requests.get(
f"{BASE}/navaids",
headers=HEADERS,
params={"airport": airport},
timeout=(10, 15),
)
if r.status_code == 404:
return []
r.raise_for_status()
return r.json().get("navaids") or []
def format_freq(navaid: dict) -> str:
freq_khz = navaid.get("frequency_khz")
if freq_khz is None:
return "—"
nav_type = navaid.get("type", "").upper()
if nav_type in VHF_TYPES:
return f"{freq_khz / 1000:.3f} MHz"
return f"{freq_khz:.0f} kHz"
def main() -> None:
navaids = fetch_navaids("KJFK")
if not navaids:
console.print("[yellow]No navaids found near KJFK.[/]")
return
grouped: dict[str, list[dict]] = defaultdict(list)
for nav in navaids:
grouped[nav.get("type", "UNKNOWN")].append(nav)
for nav_type in sorted(grouped):
table = Table(title=f"{nav_type} Navaids")
table.add_column("Ident", style="cyan", no_wrap=True)
table.add_column("Name")
table.add_column("Frequency")
table.add_column("Lat", justify="right")
table.add_column("Lon", justify="right")
for nav in grouped[nav_type]:
table.add_row(
nav.get("ident", "—"),
nav.get("name", "—"),
format_freq(nav),
f"{nav.get('latitude_deg', '—')}",
f"{nav.get('longitude_deg', '—')}",
)
console.print(table)
if __name__ == "__main__":
main()Результат: По одной таблице на каждый тип средства (VOR, NDB, ILS и т. д.) с идентификатором, названием, частотой (MHz для ОВЧ-типов, kHz для NDB) и координатами всех радионавигационных средств рядом с KJFK.
2. Заходы по ILS в аэропорту
Вопрос: Найти все заходы по ILS в аэропорту (фильтр по типу ILS).
Фильтр type=[ILS](https://en.wikipedia.org/wiki/Instrument_landing_system) возвращает только средства системы посадки по приборам. В небольших и региональных аэропортах ILS часто нет — скрипт явно обрабатывает этот случай.
import os
import requests
from rich.console import Console
from rich.table import Table
console = Console()
HEADERS = {
"X-RapidAPI-Key": os.getenv("RAPIDAPI_KEY", "YOUR_RAPIDAPI_KEY"),
"X-RapidAPI-Host": "skylink-api.p.rapidapi.com",
}
BASE = "https://skylink-api.p.rapidapi.com"
def fetch_ils(airport: str) -> list[dict]:
r = requests.get(
f"{BASE}/navaids",
headers=HEADERS,
params={"airport": airport, "type": "ILS"},
timeout=(10, 15),
)
if r.status_code == 404:
return []
r.raise_for_status()
return r.json().get("navaids") or []
def main() -> None:
icao = "EGLL"
ils_list = fetch_ils(icao)
if not ils_list:
console.print(
f"[yellow]No ILS approaches found at {icao}. "
"Small and regional airports often rely on RNAV/GPS approaches only.[/]"
)
return
table = Table(title=f"ILS Approaches — {icao}")
table.add_column("Ident", style="cyan", no_wrap=True)
table.add_column("Name")
table.add_column("Frequency (MHz)", justify="right")
table.add_column("Associated Airport")
for ils in ils_list:
freq_khz = ils.get("frequency_khz")
freq_str = f"{freq_khz / 1000:.2f}" if freq_khz is not None else "—"
table.add_row(
ils.get("ident", "—"),
ils.get("name", "—"),
freq_str,
ils.get("associated_airport", "—"),
)
console.print(table)
console.print(
f"\n[dim]{len(ils_list)} ILS approach(es) found. "
"Ident typically encodes the runway (e.g. I-27L → Runway 27L).[/]"
)
if __name__ == "__main__":
main()Результат: Таблица заходов по ILS в EGLL с идентификатором, названием, частотой курсового радиомаяка в MHz и связанным аэропортом. Внизу выводятся количество найденных заходов и подсказка о том, как по идентификатору определить ВПП.