# AIRMET/SIGMET

Активные AIRMET и SIGMET в пределах ограничивающего прямоугольника: IFR, турбулентность, обледенение и конвекция для планирования на маршруте.



[AIRMET](https://www.aviationweather.gov/help/data/#airmet) и [SIGMET](https://www.aviationweather.gov/help/data/#sigmet&#x29; — официальные авиационные метеопредупреждения об опасных условиях на маршруте. &#x2A;*[AIRMET](https://www.aviationweather.gov/help/data/#airmet)*&#x2A; (Airmen's Meteorological Information) охватывает умеренные опасные явления; &#x2A;*[SIGMET](https://www.aviationweather.gov/help/data/#sigmet)** (Significant Meteorological advisory) — явления повышенной интенсивности. Этот эндпоинт возвращает все активные предупреждения, зона действия которых пересекается с вашим ограничивающим прямоугольником (bounding box), — используйте его для наложения опасных явлений на маршруте на карты и для предполётных брифингов. Фильтруйте с помощью `type=airmet` или `type=sigmet`, если нужен только один класс серьёзности. Пустые результаты (нет активных предупреждений) — нормальная и очень частая ситуация в хорошую погоду.

## Запрос [#request]

<DocRequirements>
  <DocRequirementAuth />
</DocRequirements>

Отправьте <HttpMethod>GET</HttpMethod> с географическим ограничивающим прямоугольником и необязательным фильтром по типу.

<DocApiPath method="GET" path="/weather/airsigmet" />

| Параметр | Тип    | Обязательный | По умолчанию | Описание                                                                                                                                        |
| -------- | ------ | ------------ | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| `bbox`   | string | Да           | -            | Ограничивающий прямоугольник в формате `lat1,lon1,lat2,lon2` — сначала юго-западный угол. Пример: `38,-90,45,-80` (коридор над Средним Западом) |
| `type`   | string | Нет          | все          | Фильтр: `airmet` или `sigmet`. Не указывайте, чтобы получить оба типа                                                                           |

**Советы по ограничивающему прямоугольнику.** Подбирайте размер прямоугольника по маршруту — очень большие bbox могут перегружать обработку на стороне источника данных. Пустой массив `reports` означает, что ни одно активное предупреждение не пересекается с областью (обычное дело в ясную погоду).

## Ответ [#response]

```json
{
  "bbox": "38.0,-90.0,45.0,-80.0",
  "filter_type": "airmet",
  "reports": [
    {
      "raw": "WAUS46 KKCI 151445 WA6S AIRMET SIERRA ...",
      "bulletin_type": "AIRMET",
      "report_type": "AIRMET",
      "country": "US",
      "issuer": "KKCI",
      "area": "S",
      "region": "KZAU",
      "start_time": "2025-01-15T14:45:00Z",
      "end_time": "2025-01-15T20:45:00Z",
      "body": "AIRMET IFR...",
      "observation": {
        "type": "IFR",
        "intensity": null,
        "floor": "SFC",
        "ceiling": "FL180",
        "coords": [
          { "lat": 41.5, "lon": -87.5 },
          { "lat": 42.0, "lon": -86.0 }
        ],
        "movement": null
      },
      "forecast": null
    }
  ],
  "total": 1
}
```

Если ни одно предупреждение не пересекается с bbox, API возвращает `"reports": []` и `"total": 0`.

| Поле          | Тип            | Обязательный                      | Описание                                                             |
| ------------- | -------------- | --------------------------------- | -------------------------------------------------------------------- |
| `bbox`        | string         | **Да**                            | Повтор запрошенного ограничивающего прямоугольника                   |
| `reports`     | array          | **Да**                            | Подходящие предупреждения (может быть пустым)                        |
| `total`       | integer        | **Да**                            | Количество элементов в `reports`                                     |
| `filter_type` | string \| null | **Да** (ключ присутствует всегда) | Применённый фильтр: `"airmet"`, `"sigmet"` или `null` без фильтрации |

### Сводка [#report]

Путь в JSON: `reports[]`. Гарантированно не равно null только поле `raw`. Все декодированные поля равны `null`, если их не удалось извлечь из предупреждения.

| Поле            | Тип            | Обязательный                      | Допускает null | Описание                                                                                                   |
| --------------- | -------------- | --------------------------------- | -------------- | ---------------------------------------------------------------------------------------------------------- |
| `raw`           | string         | **Да**                            | Никогда        | Полный текст предупреждения в исходном виде                                                                |
| `bulletin_type` | string \| null | **Да** (ключ присутствует всегда) | **Да**         | `"AIRMET"` или `"SIGMET"`                                                                                  |
| `report_type`   | string \| null | **Да** (ключ присутствует всегда) | **Да**         | Тип предупреждения, например `"AIRMET"`, `"SIGMET"`, `"CONVECTIVE SIGMET"`                                 |
| `country`       | string \| null | **Да** (ключ присутствует всегда) | **Да**         | Код страны-эмитента, например `"US"`                                                                       |
| `issuer`        | string \| null | **Да** (ключ присутствует всегда) | **Да**         | Идентификатор выпустившего органа, например `"KKCI"`                                                       |
| `area`          | string \| null | **Да** (ключ присутствует всегда) | **Да**         | Идентификатор затронутой зоны, например `"S"` (Sierra)                                                     |
| `region`        | string \| null | **Да** (ключ присутствует всегда) | **Да**         | Район полётной информации (FIR) или код региона, например `"KZAU"`                                         |
| `start_time`    | string \| null | **Да** (ключ присутствует всегда) | **Да**         | Действует с (UTC, ISO 8601)                                                                                |
| `end_time`      | string \| null | **Да** (ключ присутствует всегда) | **Да**         | Действует до (UTC, ISO 8601)                                                                               |
| `body`          | string \| null | **Да** (ключ присутствует всегда) | **Да**         | Удобочитаемый текст предупреждения                                                                         |
| `observation`   | object \| null | **Да** (ключ присутствует всегда) | **Да**         | Сведения о наблюдаемом опасном явлении — см. [Наблюдение и прогноз](#observation-and-forecast)             |
| `forecast`      | object \| null | **Да** (ключ присутствует всегда) | **Да**         | Сведения о прогнозируемом опасном явлении — та же структура, что у `observation`. `null`, если отсутствует |

### Схемы объектов и допустимость null [#object-schemas-and-nullability]

Каждый ключ объекта Report присутствует всегда — ничего не опускается, если раздел не декодирован. Сами объекты `observation` и `forecast` могут быть `null`, но если они есть, все ключи внутри них присутствуют всегда.

| Ситуация                                   | Что вы получите              | Чего не будет                |
| ------------------------------------------ | ---------------------------- | ---------------------------- |
| Полигон опасного явления не декодирован    | `observation.coords: []`     | `null`, отсутствующий ключ   |
| Нет раздела прогноза                       | `forecast: null`             | отсутствующий ключ           |
| Нет раздела наблюдения                     | `observation: null`          | отсутствующий ключ           |
| У предупреждения нет нижней границы высоты | `observation.floor: null`    | отсутствующий ключ или `"0"` |
| Нет информации о перемещении               | `observation.movement: null` | `{}`, отсутствующий ключ     |
| Нет активных предупреждений                | `reports: []`, `total: 0`    | `null`, HTTP-ошибка          |
| Запрос без фильтра                         | `filter_type: null`          | отсутствующий ключ           |

#### Семейства AIRMET [#airmet-families]

| Семейство  | Охватываемые опасные явления                                                 |
| ---------- | ---------------------------------------------------------------------------- |
| **SIERRA** | Условия [IFR](/docs/v31/weather#flight-categories), закрытие гор облачностью |
| **TANGO**  | Умеренная турбулентность, сильный приземный ветер                            |
| **ZULU**   | Умеренное обледенение, высота нулевой изотермы                               |

[SIGMET](https://www.aviationweather.gov/help/data/#sigmet) охватывают опасные явления на маршруте повышенной интенсивности. &#x2A;*Конвективные [SIGMET](https://www.aviationweather.gov/help/data/#sigmet)** выпускаются для сильных гроз, града и торнадо над континентальной частью США.

<DocDetails title="Схемы наблюдения и прогноза">
  <a id="observation-and-forecast" />

  Путь в JSON: `reports[].observation` и `reports[].forecast` (одинаковая структура). Присутствуют, если декодированы из предупреждения; иначе `null`.

  | Поле           | Тип            | Обязательный                      | Допускает null | Описание                                                                                                                             |
  | -------------- | -------------- | --------------------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
  | `type`         | string \| null | **Да** (ключ присутствует всегда) | **Да**         | Тип явления — `IFR` (приборные условия), `TURB` (турбулентность), `ICE` (обледенение), `VA` (вулканический пепел)                    |
  | `intensity`    | string \| null | **Да** (ключ присутствует всегда) | **Да**         | Обозначение интенсивности, например `"MOD"`, `"SEV"`                                                                                 |
  | `floor`        | string \| null | **Да** (ключ присутствует всегда) | **Да**         | Нижняя граница по высоте, например `"SFC"`, `"FL100"`                                                                                |
  | `ceiling`      | string \| null | **Да** (ключ присутствует всегда) | **Да**         | Верхняя граница по высоте, например `"FL180"`, `"FL450"`                                                                             |
  | `coords`       | array          | **Да**                            | Никогда        | Вершины полигона для отрисовки на карте. `[]`, если граница не декодирована                                                          |
  | `coords[].lat` | number         | **Да** (для каждого элемента)     | Никогда        | Широта вершины                                                                                                                       |
  | `coords[].lon` | number         | **Да** (для каждого элемента)     | Никогда        | Долгота вершины                                                                                                                      |
  | `movement`     | object \| null | **Да** (ключ присутствует всегда) | **Да**         | Перемещение зоны предупреждения — строки `direction` и `speed`, если указаны; `null`, если зона стационарна или данные не сообщаются |
</DocDetails>

## Клиентские типы [#client-types]

<DocClientTypes id="v31/weather/airsigmet-types" />

## Интеграция [#integration]

Запросите активные предупреждения для bbox маршрута и постройте наложения полигонов.

Пример запрашивает bbox коридора, кэширует результат на 15 минут (предупреждения обновляются по фиксированному графику) и извлекает полигоны предупреждений со сроками действия для отрисовки на карте. **Пустые результаты ожидаемы в условиях VFR** — отображайте «нет активных предупреждений», а не ошибку.

<DocExample id="v31/weather/airsigmet-fetch" />

### Примечания по реализации [#implementation-notes]

**Пустой результат — это нормально.** Для маршрутов в хорошую погоду часто возвращается `total: 0`. Слой карты может скрывать наложения, когда данных нет.

**Сроки действия.** Используйте `start_time` и `end_time`, чтобы снимать полигоны с отображения на стороне клиента. Не показывайте предупреждения после `end_time`, даже если они закэшированы. Если `end_time` равно `null`, считайте предупреждение активным до следующего опроса.

**Отрисовка полигонов.** Рисуйте `observation.coords` (или `forecast.coords`) как замкнутые полигоны. Если `coords` равно `[]`, показывайте текст `body` в виде списка вместо наложения на карту. Всегда замыкайте контур полигона (последняя вершина → первая вершина) перед передачей в картографическую библиотеку.

**Фильтруйте с умом.** Интерфейсы предполётного брифинга часто запрашивают `type=airmet` для диспетчерской службы и `type=sigmet` для наложений с явлениями повышенной интенсивности. Не указывайте `type`, если нужна полная картина.

**Большие bbox.** Подбирайте область запроса по маршруту с небольшим запасом (примерно 1–2° по широте/долготе) и при необходимости разбивайте длинные маршруты на сегменты.

## Ответы с ошибками [#error-responses]

Здесь описаны только ошибки, специфичные для эндпоинта. Об ошибках аутентификации, валидации, ограничениях частоты запросов и ошибках сервера см. [Обработка ошибок](/docs/errors).

### 400 — некорректный формат bbox [#400--invalid-bbox-format]

```json
{
  "detail": "Invalid bounding box format. Expected 'lat1,lon1,lat2,lon2'"
}
```

### 503 — источник данных недоступен [#503--upstream-unavailable]

Возвращается, когда поток предупреждений временно недоступен или bbox слишком велик для обработки на стороне источника данных. Повторите запрос с экспоненциальной задержкой (backoff) и меньшим bbox.

```json
{
  "detail": "Upstream AIRMET/SIGMET service unavailable"
}
```

<APIPage document="&#x22;https://api.skylinkapi.com/v3.1/openapi.json&#x22;" operations="[{&#x22;path&#x22;:&#x22;/weather/airsigmet&#x22;,&#x22;method&#x22;:&#x22;get&#x22;}]" />

***

См. также: [Раздел «Погода»](/docs/v31/weather) · [PIREP](/docs/v31/pireps) · [METAR](/docs/v31/weather-metar) · [Сценарий: AIRMET на маршруте](/docs/v31/weather-integration-enroute#9-active-airmets-on-the-route)
