Радионавигационные средства
Поиск по инфраструктуре радионавигации — VOR (всенаправленный азимутальный радиомаяк ОВЧ-диапазона, основное радионавигационное средство на маршруте), NDB (ненаправленный радиомаяк), ILS (система посадки по приборам), DME (дальномерное оборудование), TACAN (тактическая аэронавигационная система) и комбинированные объекты, такие как VORTAC (совмещённые VOR и TACAN). Используйте этот эндпоинт для наложения маршрутов, панелей с контекстом захода на посадку или слоёв карты, где нужны радионавигационные средства сверх того набора, который встроен в Аэропорты.
Требуется хотя бы один фильтр (ident, airport, type, country или bbox). Глобальная выгрузка без фильтров заблокирована.
Запрос
Требования
x-api-key в каждом запросе (прямая подписка). Подробнее →https://data.skylinkapi.com/v3.1/navaids| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
ident | string | Нужен хотя бы один фильтр | - | Идентификатор радионавигационного средства, например JFK |
airport | string | Нужен хотя бы один фильтр | - | Код аэропорта ICAO для связанных радионавигационных средств |
type | string | Нужен хотя бы один фильтр | - | Тип радионавигационного средства, например VOR, NDB, VORTAC, ILS, DME |
country | string | Нужен хотя бы один фильтр | - | Код страны ISO 3166-1 alpha-2 |
bbox | string | Нужен хотя бы один фильтр | - | Ограничивающий прямоугольник (bounding box): lat1,lon1,lat2,lon2 — сначала юго-западный угол, затем северо-восточный. Пример: 40,-74,41,-73 |
limit | integer | Нет | 100 | Максимальное число возвращаемых записей (не более 500) |
Комбинируйте фильтры (например, country=US&type=[VOR](https://en.wikipedia.org/wiki/VHF_omnidirectional_range)), чтобы сузить большие наборы результатов.
Ответ
{
"navaids": [
{
"id": 89475,
"ident": "JFK",
"name": "Kennedy",
"type": "VOR-DME",
"frequency_khz": 115900.0,
"latitude_deg": 40.63290023803711,
"longitude_deg": -73.77140045166016,
"elevation_ft": 11.0,
"iso_country": "US",
"dme_frequency_khz": 115900.0,
"dme_channel": "106X",
"slaved_variation_deg": -12.001,
"magnetic_variation_deg": -13.182,
"usageType": "BOTH",
"power": "HIGH",
"associated_airport": "KJFK"
}
],
"total": 1,
"filters_applied": {
"ident": "JFK"
}
}Поля верхнего уровня
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
navaids | array | Да | Найденные записи радионавигационных средств (может быть []) |
total | integer | Да | Количество возвращённых записей |
filters_applied | object | Да | Повтор принятых фильтров |
Элемент радионавигационного средства (navaids[])
| Поле | Тип | Обязательный | Может быть null? | Описание |
|---|---|---|---|---|
id | integer | Да | Никогда | Числовой идентификатор записи |
ident | string | Да | Никогда | Идентификатор радионавигационного средства |
name | string | Да | Никогда | Название радионавигационного средства |
type | string | Да | Никогда | Тип объекта (VOR-DME, NDB и т. д.) |
frequency_khz | number | null | Нет | Да | Основная частота в кГц |
latitude_deg | number | Да | Никогда | Широта WGS-84 |
longitude_deg | number | Да | Никогда | Долгота WGS-84 |
elevation_ft | number | null | Нет | Да | Превышение в футах над MSL |
iso_country | string | null | Нет | Да | Код страны |
dme_frequency_khz | number | null | Нет | Да | Частота DME, если применимо |
dme_channel | string | null | Нет | Да | Канал DME, например 106X |
slaved_variation_deg | number | null | Нет | Да | Магнитное склонение, на которое выставлен радиомаяк (slaved variation) |
magnetic_variation_deg | number | null | Нет | Да | Местное магнитное склонение (угол между истинным и магнитным севером в точке установки радионавигационного средства) |
usageType | string | null | Нет | Да | Класс использования (например, BOTH) |
power | string | null | Нет | Да | Класс мощности передатчика |
associated_airport | string | null | Нет | Да | Код аэропорта ICAO, если средство привязано к аэропорту |
Необязательные поля авионики (допустимость null)Развернуть раздел
dme_frequency_khz, dme_channel, slaved_variation_deg и magnetic_variation_deg в зависимости от типа объекта часто равны null. associated_airport может быть null для радионавигационных средств на маршруте. Рассматривайте type радионавигационного средства как открытую строку — не прерывайте обработку с ошибкой при неизвестных значениях.
Клиентские типы
"""Navaid search response models for GET /navaids."""from __future__ import annotationsfrom dataclasses import dataclass@dataclassclass NavaidsSearchRequest: ident: str | None = None airport: str | None = None type: str | None = None country: str | None = None bbox: str | None = None limit: int | None = None@dataclassclass NavaidRecord: id: int ident: str name: str type: str frequency_khz: float | None latitude_deg: float longitude_deg: float elevation_ft: float | None iso_country: str | None dme_frequency_khz: float | None dme_channel: str | None slaved_variation_deg: float | None magnetic_variation_deg: float | None usageType: str | None power: str | None associated_airport: str | None@dataclassclass NavaidsResponse: navaids: list[NavaidRecord] total: int filters_applied: dict[str, str]Интеграция
Получите радионавигационные средства в районе аэропорта и верните готовые для карты объекты для наложения маршрутов.
Пример ниже кэширует результаты запросов на 6 часов и использует явные таймауты, чтобы отрисовка карты не зависала из-за медленного ответа.
import osimport timefrom dataclasses import dataclassimport requestsHEADERS = { "x-api-key": os.getenv("SKYLINK_API_KEY", "YOUR_API_KEY")}BASE = "https://data.skylinkapi.com/v3.1"CACHE: dict[str, tuple[dict, float]] = {}NAVAID_TTL = 21_600 # 6 h@dataclassclass NavaidPoint: ident: str name: str navaid_type: str latitude: float longitude: float frequency_khz: float | None associated_airport: str | Nonedef fetch_navaids(*, airport: str) -> list[dict]: airport = airport.upper() key = f"navaids:airport:{airport}" cached = CACHE.get(key) if cached and time.time() < cached[1]: return cached[0]["navaids"] try: r = requests.get( f"{BASE}/navaids", headers=HEADERS, params={"airport": airport}, timeout=(10, 15), ) except requests.Timeout as exc: raise RuntimeError(f"SkyLink timeout fetching navaids for {airport}") from exc r.raise_for_status() data = r.json() CACHE[key] = (data, time.time() + NAVAID_TTL) return data.get("navaids", [])def navaid_points_for_map(airport: str) -> list[NavaidPoint]: return [ NavaidPoint( ident=item["ident"], name=item["name"], navaid_type=item["type"], latitude=item["latitude_deg"], longitude=item["longitude_deg"], frequency_khz=item.get("frequency_khz"), associated_airport=item.get("associated_airport"), ) for item in fetch_navaids(airport=airport) ]if __name__ == "__main__": import json from dataclasses import asdict points = navaid_points_for_map("KJFK") print(json.dumps([asdict(p) for p in points[:8]], indent=2))Примечания по реализации
Фильтруйте как можно раньше. Комбинируйте фильтры country, type или airport, чтобы уменьшить объём ответа и не перегружать карту.
Формат BBox. Используйте lat1,lon1,lat2,lon2 (юго-запад → северо-восток), как в Ветер на высотах, PIREP и AIRMET/SIGMET, — а не minLon,minLat,maxLon,maxLat.
Радионавигационные средства аэропорта. Аэропорты встраивают для каждого аэродрома лишь часть средств. Используйте этот эндпоинт для запросов по bbox, фильтров по типу и стране или наложений, выходящих за рамки запроса по одному аэропорту.
Ответы с ошибками
Общие ошибки: Обработка ошибок. Ошибки, специфичные для эндпоинта:
400 - не передано ни одного фильтра
{
"detail": "At least one filter is required: ident, airport, type, country, or bbox. Returning the full navaid dataset unfiltered is not supported."
}400 - недопустимый bbox
{
"detail": "Invalid bbox: could not convert string to float: 'bad'"
}Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Query Parameters
Navaid identifier — partial, case-insensitive (e.g. JFK, VOR)
Associated airport ICAO code — exact match (e.g. KJFK)
Navaid type — exact, case-insensitive (e.g. VOR, NDB, ILS, DME, TACAN)
ISO country code — exact match (e.g. US, GB)
Bounding box as lat1,lon1,lat2,lon2 (SW corner to NE corner)
Maximum number of results to return (default 100, max 500)
1001 <= value <= 500Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/navaids"{
"navaids": [
{
"id": 0,
"ident": "string",
"name": "string",
"type": "string",
"frequency_khz": 0,
"latitude_deg": 0,
"longitude_deg": 0,
"elevation_ft": 0,
"iso_country": "string",
"dme_frequency_khz": 0,
"dme_channel": "string",
"slaved_variation_deg": 0,
"magnetic_variation_deg": 0,
"usageType": "string",
"power": "string",
"associated_airport": "string"
}
],
"total": 0,
"filters_applied": {}
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Руководства по интеграции
| Руководство | Охватывает |
|---|---|
| Аэропорты | Поиск, частоты, сравнение ВПП |
| Поиск аэропортов | Автодополнение и поиск ближайших по GPS |
| Радионавигационные средства | Наложение на карту и фильтр ILS |
| Обработка ошибок | 404, пустой поиск, валидация |
| Кэширование и мониторинг | TTL и логирование квоты |
См. также: Аэропорты · Поиск аэропортов · Аэронавигационные карты