AIRMET/SIGMET
AIRMETs und SIGMETs sind offizielle Flugwetterwarnungen für gefährliche Bedingungen auf der Strecke. AIRMET (Airmen's Meteorological Information) umfasst mäßige Gefahren; SIGMET (Significant Meteorological advisory) umfasst Ereignisse höherer Intensität. Dieser Endpoint liefert jede aktive Warnmeldung, deren betroffenes Gebiet Ihren Begrenzungsrahmen (Bounding Box) schneidet — verwenden Sie ihn für Overlays mit Gefahren auf der Strecke in Karten und für Briefings vor dem Flug. Filtern Sie mit type=airmet oder type=sigmet, wenn Sie nur eine Intensitätsklasse benötigen. Leere Ergebnisse (keine aktiven Warnmeldungen) sind normal und bei gutem Wetter sehr häufig.
Anfrage
Voraussetzungen
x-api-key bei jeder Anfrage (Direktabonnement). Mehr erfahren →Senden Sie eine GET-Anfrage mit einem geografischen Begrenzungsrahmen und einem optionalen Typfilter.
https://data.skylinkapi.com/v3.1/weather/airsigmet| Parameter | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
bbox | string | Ja | - | Begrenzungsrahmen als lat1,lon1,lat2,lon2 — südwestliche Ecke zuerst. Beispiel: 38,-90,45,-80 (Korridor im Mittleren Westen) |
type | string | Nein | all | Filter: airmet oder sigmet. Weglassen, um beide zu erhalten |
Tipps zum Begrenzungsrahmen. Halten Sie die Rahmen in Routengröße — sehr große bboxes können die vorgelagerte Verarbeitung belasten. Ein leeres reports-Array bedeutet, dass keine aktiven Warnmeldungen das Gebiet schneiden (häufig bei schönem Wetter).
Antwort
{
"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
}Wenn keine Warnmeldungen die bbox schneiden, liefert die API "reports": [] und "total": 0.
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
bbox | string | Ja | Echo des abgefragten Begrenzungsrahmens |
reports | array | Ja | Passende Warnmeldungen (kann leer sein) |
total | integer | Ja | Anzahl der Einträge in reports |
filter_type | string | null | Ja (Schlüssel immer vorhanden) | Angewendeter Filter: "airmet", "sigmet" oder null ohne Filter |
Meldung
JSON-Pfad: reports[]. Nur raw ist garantiert nicht null. Alle dekodierten Felder sind null, wenn sie nicht aus der Warnmeldung geparst wurden.
| Feld | Typ | Erforderlich | Null? | Beschreibung |
|---|---|---|---|---|
raw | string | Ja | Nie | Vollständiger Text der Warnmeldung wie herausgegeben |
bulletin_type | string | null | Ja (Schlüssel immer vorhanden) | Ja | "AIRMET" oder "SIGMET" |
report_type | string | null | Ja (Schlüssel immer vorhanden) | Ja | Art der Warnmeldung, z. B. "AIRMET", "SIGMET", "CONVECTIVE SIGMET" |
country | string | null | Ja (Schlüssel immer vorhanden) | Ja | Ländercode des herausgebenden Landes, z. B. "US" |
issuer | string | null | Ja (Schlüssel immer vorhanden) | Ja | Kennung der herausgebenden Stelle, z. B. "KKCI" |
area | string | null | Ja (Schlüssel immer vorhanden) | Ja | Kennung des betroffenen Gebiets, z. B. "S" (Sierra) |
region | string | null | Ja (Schlüssel immer vorhanden) | Ja | Fluginformationsgebiet (FIR) oder Regionscode, z. B. "KZAU" |
start_time | string | null | Ja (Schlüssel immer vorhanden) | Ja | Gültig ab (UTC, ISO 8601) |
end_time | string | null | Ja (Schlüssel immer vorhanden) | Ja | Gültig bis (UTC, ISO 8601) |
body | string | null | Ja (Schlüssel immer vorhanden) | Ja | Menschenlesbarer Text der Warnmeldung |
observation | object | null | Ja (Schlüssel immer vorhanden) | Ja | Details zur beobachteten Gefahr — siehe Beobachtung und Vorhersage |
forecast | object | null | Ja (Schlüssel immer vorhanden) | Ja | Details zur vorhergesagten Gefahr — gleiche Struktur wie observation. null, wenn nicht vorhanden |
Objektschemas und Nullbarkeit
Jeder Schlüssel in einem Meldungsobjekt ist immer vorhanden — nichts wird weggelassen, wenn ein Abschnitt nicht dekodiert wird. Die Objekte observation und forecast selbst können null sein, aber wenn sie vorhanden sind, ist jeder Schlüssel darin immer enthalten.
| Situation | Was Sie erhalten | Nicht dies |
|---|---|---|
| Kein Gefahrenpolygon dekodiert | observation.coords: [] | null, fehlender Schlüssel |
| Kein Vorhersageabschnitt | forecast: null | fehlender Schlüssel |
| Kein Beobachtungsabschnitt | observation: null | fehlender Schlüssel |
| Warnmeldung ohne Höhenuntergrenze | observation.floor: null | fehlender Schlüssel oder "0" |
| Keine Angaben zur Verlagerung | observation.movement: null | {}, fehlender Schlüssel |
| Keine aktiven Warnmeldungen | reports: [], total: 0 | null, HTTP-Fehler |
| Anfrage ohne Filter | filter_type: null | fehlender Schlüssel |
AIRMET-Familien
| Familie | Abgedeckte Gefahren |
|---|---|
| SIERRA | IFR-Bedingungen, Verdeckung von Bergen |
| TANGO | Mäßige Turbulenz, starke Bodenwinde |
| ZULU | Mäßige Vereisung, Nullgradgrenzen |
SIGMETs umfassen Gefahren höherer Intensität auf der Strecke. Konvektive SIGMETs werden für schwere Gewitter, Hagel und Tornados über den zusammenhängenden USA herausgegeben.
Schemas für Beobachtung und VorhersageAbschnitt aufklappen
JSON-Pfad: reports[].observation und reports[].forecast (gleiche Struktur). Vorhanden, wenn aus der Warnmeldung dekodiert; andernfalls null.
| Feld | Typ | Erforderlich | Null? | Beschreibung |
|---|---|---|---|---|
type | string | null | Ja (Schlüssel immer vorhanden) | Ja | Art des Phänomens — IFR (Instrumentenbedingungen), TURB (Turbulenz), ICE (Vereisung), VA (Vulkanasche) |
intensity | string | null | Ja (Schlüssel immer vorhanden) | Ja | Intensitätskennung, z. B. "MOD", "SEV" |
floor | string | null | Ja (Schlüssel immer vorhanden) | Ja | Untere Höhengrenze, z. B. "SFC", "FL100" |
ceiling | string | null | Ja (Schlüssel immer vorhanden) | Ja | Obere Höhengrenze, z. B. "FL180", "FL450" |
coords | array | Ja | Nie | Polygoneckpunkte für die Kartendarstellung. [], wenn keine Begrenzung dekodiert wurde |
coords[].lat | number | Ja (pro Element) | Nie | Breitengrad des Eckpunkts |
coords[].lon | number | Ja (pro Element) | Nie | Längengrad des Eckpunkts |
movement | object | null | Ja (Schlüssel immer vorhanden) | Ja | Verlagerung der Warnmeldung — Strings direction und speed, falls vorhanden; null, wenn stationär oder nicht gemeldet |
Client-Typen
"""AIRMET/SIGMET response types - matches airsigmet field tables."""from dataclasses import dataclass, field@dataclassclass AirSigmetCoord: lat: float lon: float@dataclassclass AirSigmetObservation: type: str | None = None intensity: str | None = None floor: str | None = None ceiling: str | None = None coords: list[AirSigmetCoord] = field(default_factory=list) movement: dict | None = None@dataclassclass AirSigmetReport: raw: str bulletin_type: str | None = None report_type: str | None = None start_time: str | None = None end_time: str | None = None body: str | None = None observation: AirSigmetObservation | None = None forecast: AirSigmetObservation | None = None@dataclassclass AirSigmetResponse: bbox: str reports: list[AirSigmetReport] total: int filter_type: str | None = NoneIntegration
Rufen Sie aktive Warnmeldungen für die bbox einer Route ab und erstellen Sie Polygon-Overlays.
Das Beispiel fragt die bbox eines Korridors ab, speichert das Ergebnis 15 Minuten im Cache (Warnmeldungen werden nach einem festen Zeitplan aktualisiert) und extrahiert Polygone der Warnmeldungen mit ihren Gültigkeitszeitfenstern für die Kartendarstellung. Leere Ergebnisse sind bei VFR-Bedingungen zu erwarten — zeigen Sie „keine aktiven Warnmeldungen“ an, keinen Fehler.
import osimport timeimport 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]] = {}AIRSIG_TTL = 900 # 15 mindef fetch_airsigmets(bbox: str, advisory_type: str | None = None) -> dict: cache_key = f"airsig:{bbox}:{advisory_type or 'all'}" cached = CACHE.get(cache_key) if cached and time.time() < cached[1]: return cached[0] params: dict[str, str] = {"bbox": bbox} if advisory_type: params["type"] = advisory_type r = requests.get( f"{BASE}/weather/airsigmet", headers=HEADERS, params=params, timeout=(10, 25), ) r.raise_for_status() data = r.json() CACHE[cache_key] = (data, time.time() + AIRSIG_TTL) return datadef active_polygons(bbox: str) -> list[list[tuple[float, float]]]: """Return coord rings for map overlays (may be empty).""" payload = fetch_airsigmets(bbox, advisory_type="airmet") rings: list[list[tuple[float, float]]] = [] for report in payload.get("reports", []): obs = report.get("observation") or {} coords = obs.get("coords") or [] if coords: rings.append([(c["lat"], c["lon"]) for c in coords]) return ringsif __name__ == "__main__": import json bbox = "-74.5,40.3,-73.5,41.0" payload = fetch_airsigmets(bbox, "airmet") print(json.dumps(payload, indent=2, default=str)[:3000])Hinweise zur Implementierung
Leer ist normal. Routen bei schönem Wetter liefern oft total: 0. Ihre Kartenebene kann Overlays ausblenden, wenn das Ergebnis leer ist.
Gültigkeitszeitfenster. Verwenden Sie start_time und end_time, um Polygone clientseitig ablaufen zu lassen. Zeigen Sie Warnmeldungen nach end_time nicht mehr an, auch wenn sie im Cache liegen. Ist end_time gleich null, behandeln Sie die Warnmeldung bis zur nächsten Abfrage als aktiv.
Polygondarstellung. Zeichnen Sie observation.coords (oder forecast.coords) als geschlossene Polygone. Wenn coords gleich [] ist, zeigen Sie den Text aus body in einer Listenansicht statt in einem Karten-Overlay an. Schließen Sie den Polygonring immer (letzter Eckpunkt → erster Eckpunkt), bevor Sie ihn an eine Kartenbibliothek übergeben.
Gezielt filtern. Oberflächen für Briefings vor dem Flug rufen häufig type=airmet für die Flugdisposition und type=sigmet für Overlays höherer Intensität ab. Lassen Sie type weg, wenn Sie das Gesamtbild benötigen.
Große bboxes. Bemessen Sie die Abfrage auf Ihre Route plus einen moderaten Puffer (etwa 1–2° Breite/Länge) und teilen Sie lange Routen bei Bedarf in Segmente auf.
Fehlerantworten
Nur endpoint-spezifische Fehler. Zu Authentifizierung, Validierung, Rate Limits und Serverfehlern siehe Fehlerbehandlung.
400 — ungültiges bbox-Format
{
"detail": "Invalid bounding box format. Expected 'lat1,lon1,lat2,lon2'"
}503 — vorgelagerter Dienst nicht verfügbar
Wird zurückgegeben, wenn der Feed mit den Warnmeldungen vorübergehend nicht erreichbar ist oder die bbox für die vorgelagerte Verarbeitung zu groß ist. Wiederholen Sie die Anfrage mit exponentiellem Backoff und einer kleineren bbox.
{
"detail": "Upstream AIRMET/SIGMET service unavailable"
}Your SkyLink licence key, for keys bought direct from skylinkapi.com.
In: header
Query Parameters
Bounding box as 'lat1,lon1,lat2,lon2' (SW corner → NE corner)
Filter by type: 'airmet' or 'sigmet'
Response Body
application/json
application/json
curl -X GET "https://data.skylinkapi.com/v3.1/weather/airsigmet?bbox=string"{
"bbox": "38,-90,45,-80",
"reports": [
{
"raw": "WAUS46 KKCI 151445 WA6S AIRMET SIERRA ...",
"bulletin_type": "AIRMET",
"report_type": "AIRMET",
"area": "S",
"body": "AIRMET IFR...",
"observation": {
"type": "IFR",
"floor": "SFC",
"ceiling": "FL180"
}
}
],
"total": 1
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}Siehe auch: Wetter-Übersicht · PIREPs · METAR · Anwendungsfall AIRMET auf der Route
PIREPs (Pilotenmeldungen)
Pilotenmeldungen (PIREPs) in einer Bounding Box – von Piloten gemeldete Turbulenz, Vereisung und Wetter im Flug innerhalb eines Rückblickzeitraums.
Am Flughafen
Integrationsbeispiele für METAR und TAF am Flughafen — Flugwetterkategorien, Dichtehöhe, Abflugvorhersagen und Ausweichflughäfen.