{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/microsoft-azure-maps/json-schema/microsoft-azure-maps-storm-forecast-result-schema.json",
  "title": "StormForecastResult",
  "description": "The response returned by the Get Tropical Storm Forecast operation,\ngiving the official government-issued forecast track for a single\ntropical storm identified by `basinId`, `govId`, and `year`. Each entry\nin the `results` array is a `StormForecast` reporting the storm's\nforecasted position, status, sustained wind and wind-gust speeds, and\nforecast window for one point in time along the predicted track. When\nthe result set is too large to fit in a single response, `nextLink`\ncarries the URL for the next page.",
  "x-generated": "2026-11-12",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/microsoft-azure-maps-weather-api-openapi.yml#/components/schemas/StormForecastResult",
  "type": "object",
  "properties": {
    "results": {
      "type": "array",
      "description": "The forecast points along the storm's predicted track, in chronological\norder. Each `StormForecast` reports the storm's position, classification\n(for example, *Tropical Storm*), sustained wind and wind-gust speeds,\nand the forecast window for one valid time - for example, a Northwest\nPacific (*NP*) storm forecast at *2021-04-25T06:00:00+00:00* at\n(latitude *22*, longitude *137.8*) with a sustained wind of\n*74.1 km/h* and a wind gust of *92.6 km/h*.",
      "items": {
        "$ref": "#/$defs/StormForecast"
      }
    },
    "nextLink": {
      "type": "string",
      "description": "The URL to retrieve the next page of results when the response is\npaginated, suitable for navigating through result sets too large to\nreturn in a single call. Empty when there are no further pages."
    }
  },
  "$defs": {
    "GeoJsonGeometry": {
      "type": "object",
      "description": "A valid `GeoJSON` geometry object. The type must be one of the seven valid\nGeoJSON geometry types - Point, MultiPoint, LineString, MultiLineString,\nPolygon, MultiPolygon and GeometryCollection. Please refer to [RFC\n7946](https://tools.ietf.org/html/rfc7946#section-3.1) for details.",
      "properties": {
        "type": {
          "$ref": "#/$defs/GeoJsonObjectType",
          "description": "Specifies the `GeoJSON` type. Must be one of the nine valid GeoJSON object\ntypes - Point, MultiPoint, LineString, MultiLineString, Polygon, MultiPolygon,\nGeometryCollection, Feature and FeatureCollection."
        }
      },
      "required": [
        "type"
      ]
    },
    "GeoJsonObjectType": {
      "type": "string",
      "description": "Specifies the `GeoJSON` type. Must be one of the nine valid GeoJSON object\ntypes - Point, MultiPoint, LineString, MultiLineString, Polygon, MultiPolygon,\nGeometryCollection, Feature and FeatureCollection.",
      "enum": [
        "Point",
        "MultiPoint",
        "LineString",
        "MultiLineString",
        "Polygon",
        "MultiPolygon",
        "GeometryCollection",
        "Feature",
        "FeatureCollection"
      ],
      "x-ms-enum": {
        "name": "GeoJsonObjectType",
        "modelAsString": false,
        "values": [
          {
            "name": "GeoJsonPoint",
            "value": "Point",
            "description": "`GeoJSON Point` geometry."
          },
          {
            "name": "GeoJsonMultiPoint",
            "value": "MultiPoint",
            "description": "`GeoJSON MultiPoint` geometry."
          },
          {
            "name": "GeoJsonLineString",
            "value": "LineString",
            "description": "`GeoJSON LineString` geometry."
          },
          {
            "name": "GeoJsonMultiLineString",
            "value": "MultiLineString",
            "description": "`GeoJSON MultiLineString` geometry."
          },
          {
            "name": "GeoJsonPolygon",
            "value": "Polygon",
            "description": "`GeoJSON Polygon` geometry."
          },
          {
            "name": "GeoJsonMultiPolygon",
            "value": "MultiPolygon",
            "description": "`GeoJSON MultiPolygon` geometry."
          },
          {
            "name": "GeoJsonGeometryCollection",
            "value": "GeometryCollection",
            "description": "`GeoJSON GeometryCollection` geometry."
          },
          {
            "name": "GeoJsonFeature",
            "value": "Feature",
            "description": "`GeoJSON Feature` object."
          },
          {
            "name": "GeoJsonFeatureCollection",
            "value": "FeatureCollection",
            "description": "`GeoJSON FeatureCollection` object."
          }
        ]
      }
    },
    "LatLongPair": {
      "type": "object",
      "description": "A location represented as a latitude and longitude.",
      "properties": {
        "latitude": {
          "type": "number",
          "format": "double",
          "description": "Latitude property"
        },
        "longitude": {
          "type": "number",
          "format": "double",
          "description": "Longitude property"
        }
      }
    },
    "RadiusSector": {
      "type": "object",
      "description": "One quadrant of a tropical storm's wind radii, returned as one entry in\n`StormWindRadiiSummary.radiusSectorData`. Each sector is bracketed in\ndirection by `beginBearing` and `endBearing` (azimuth degrees clockwise\nfrom true North) and in distance by `range` (nautical miles), recording\nhow far winds at or above the parent summary's `windSpeed` threshold\nextend in that quadrant. The four sectors on a `StormWindRadiiSummary`\ntypically span **0°-90°** (NE), **90°-180°** (SE), **180°-270°** (SW),\nand **270°-360°** (NW).",
      "properties": {
        "beginBearing": {
          "type": "number",
          "format": "double",
          "description": "The starting angle of the sector, in azimuth degrees clockwise from\ntrue North (0° = N, 90° = E, 180° = S, 270° = W). For example, **0**\nfor the NE quadrant."
        },
        "endBearing": {
          "type": "number",
          "format": "double",
          "description": "The ending angle of the sector, using the same azimuth convention as\n`beginBearing`. For example, **90** for the NE quadrant. Together with\n`beginBearing`, this defines the sector's angular span."
        },
        "range": {
          "type": "number",
          "format": "double",
          "description": "The maximum distance from the storm's center, in nautical miles (NM),\nat which winds at or above the parent\n`StormWindRadiiSummary.windSpeed` threshold are expected within this\nsector."
        }
      }
    },
    "StormForecast": {
      "type": "object",
      "description": "A single forecast point along a tropical storm's predicted track,\nreturned as one entry in `StormForecastResult.results`. Each entry\nreports the storm's forecasted position, sustained wind and wind-gust\nspeeds, the storm's classification at the forecast time (for example,\n*Tropical Storm*), and the forecast window for that valid time. When\nthe request asks for wind-radii detail, the entry also carries a\n`windRadiiSummary` array describing the wind distribution around the\nstorm's center.",
      "properties": {
        "dateTime": {
          "type": "string",
          "description": "The valid time of this forecast point - the future moment the\nforecasted position and conditions apply to - in [ISO\n8601](https://www.iso.org/iso-8601-date-and-time-format.html) format\n(yyyy-mm-ddThh:mm:ss-hh:mm). For example,\n*2021-04-25T06:00:00+00:00*."
        },
        "initializedDateTime": {
          "type": "string",
          "description": "The time at which the forecast was issued, in [ISO\n8601](https://www.iso.org/iso-8601-date-and-time-format.html) format\n(yyyy-mm-ddThh:mm:ss-hh:mm). For example,\n*2021-04-24T18:00:00+00:00*. Typically earlier than `dateTime`,\nsince a single forecast run predicts conditions at several future\nvalid times."
        },
        "location": {
          "$ref": "#/$defs/LatLongPair",
          "description": "The storm's forecasted position at this point on the track, given as\nlatitude and longitude - for example, latitude *22*, longitude\n*137.8*."
        },
        "maxWindGust": {
          "$ref": "#/$defs/WeatherValue",
          "description": "The expected maximum short-burst wind-gust speed and direction at this\nforecast point, measured in kilometers per hour (km/h) or miles per\nhour (mph) depending on the unit specified in the request - for\nexample, *92.6 km/h*. Wind direction is in azimuth degrees, measured\nclockwise from true North (0° = N, 90° = E, 180° = S, 270° = W). May\nbe NULL."
        },
        "sustainedWind": {
          "$ref": "#/$defs/WeatherValue",
          "description": "The maximum sustained wind speed expected at this forecast point,\nmeasured in kilometers per hour (km/h) or miles per hour (mph)\ndepending on the unit specified in the request - for example,\n*74.1 km/h*."
        },
        "status": {
          "type": "string",
          "description": "The storm's classification at this forecast point, in English - for\nexample, *Tropical Storm*. Possible values:\n\n- Cyclonic storm\n- Deep depression\n- Depression\n- Extremely severe cyclonic storm\n- Hurricane category (1-5)\n- Intense tropical cyclone\n- Moderate tropical storm\n- Post-tropical cyclone\n- Potential tropical cyclone\n- Severe cyclonic storm\n- Severe tropical storm\n- Subtropical\n- Super cyclonic storm\n- Tropical cyclone\n- Tropical cyclone category (1-5)\n- Tropical depression\n- Tropical disturbance\n- Tropical storm\n- Typhoon\n- Very intense tropical cyclone\n- Very severe cyclonic storm\n- Very strong typhoon\n- Violent typhoon"
        },
        "window": {
          "$ref": "#/$defs/WeatherWindow",
          "description": "The forecast window covering this point on the track - the time range\nthe forecast applies to, the storm's classification at the start and\nend of that range, and the left and right edges of the storm's\nprojected path. When the request asks for the window geometry,\n`WeatherWindow.geometry` carries a GeoJSON representation of the\naffected area."
        },
        "windRadiiSummary": {
          "type": "array",
          "description": "Wind radii summaries describing the wind distribution around the\nstorm's center at this forecast point - one entry per wind-speed\nthreshold (such as the 34-, 50-, and 64-knot radii), each enumerating\nhow far winds at or above that speed extend in the NE, SE, SW, and NW\nquadrants. Returned only when the request asks for wind-radii detail.",
          "items": {
            "$ref": "#/$defs/StormWindRadiiSummary"
          }
        }
      }
    },
    "StormWindRadiiSummary": {
      "type": "object",
      "description": "A wind radii summary describing the wind distribution around a tropical\nstorm's center for a single wind-speed threshold (typically the 34-,\n50-, or 64-knot radii). Returned as one entry per threshold in\n`StormForecast.windRadiiSummary` (forecast track) or\n`StormLocation.windRadiiSummary` (observed track) when the request asks\nfor wind-radii detail. Combines the threshold itself (`windSpeed`) with\na `radiusSectorData` array carrying one sector per quadrant (NE, SE,\nSW, NW) that records how far winds at or above that speed extend from\nthe storm's center. When the request also asks for the radii geometry,\n`radiiGeometry` carries a GeoJSON representation of the affected area.",
      "properties": {
        "dateTime": {
          "type": "string",
          "description": "The valid time the wind-radii data applies to, in [ISO\n8601](https://www.iso.org/iso-8601-date-and-time-format.html) format\n(yyyy-mm-ddThh:mm:ss-hh:mm). For example, *2025-04-29T07:00:00-07:00*."
        },
        "windSpeed": {
          "$ref": "#/$defs/WeatherValue",
          "description": "The wind-speed threshold this entry describes (typically **34**, **50**,\nor **64** knots). All four sectors in `radiusSectorData` describe the\nextent of winds at or above this speed in their respective quadrants.\nReported in kilometers per hour (km/h) or miles per hour (mph)\ndepending on the unit specified in the request."
        },
        "radiusSectorData": {
          "type": "array",
          "description": "One `RadiusSector` per compass quadrant - NE (0°-90°), SE (90°-180°),\nSW (180°-270°), and NW (270°-360°) - giving the maximum distance from\nthe storm's center at which winds at or above `windSpeed` are expected\nin that quadrant.",
          "items": {
            "$ref": "#/$defs/RadiusSector"
          }
        },
        "radiiGeometry": {
          "$ref": "#/$defs/GeoJsonGeometry",
          "description": "A GeoJSON representation of the area around the storm's center where\nwinds at or above `windSpeed` are expected, suitable for rendering the\nwind radii on a map. Returned only when the request asks for the radii\ngeometry."
        }
      }
    },
    "UnitType": {
      "type": "number",
      "description": "An integer value associated with the type of unit being displayed.\nFor example, 17 for Celsius, 18 for Fahrenheit. Can be used for unit\ntranslation. For more information, see [Weather services in\nAzure Maps](/azure/azure-maps/weather-services-concepts#unit-types).",
      "enum": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        31
      ],
      "x-ms-enum": {
        "name": "UnitType",
        "modelAsString": true,
        "values": [
          {
            "name": "Feet",
            "value": 0,
            "description": "feet"
          },
          {
            "name": "Inches",
            "value": 1,
            "description": "inches"
          },
          {
            "name": "Miles",
            "value": 2,
            "description": "miles"
          },
          {
            "name": "Millimeter",
            "value": 3,
            "description": "millimeter"
          },
          {
            "name": "Centimeter",
            "value": 4,
            "description": "centimeter"
          },
          {
            "name": "Meter",
            "value": 5,
            "description": "meter"
          },
          {
            "name": "Kilometer",
            "value": 6,
            "description": "kilometer"
          },
          {
            "name": "KilometersPerHour",
            "value": 7,
            "description": "kilometersPerHour"
          },
          {
            "name": "Knots",
            "value": 8,
            "description": "knots"
          },
          {
            "name": "MilesPerHour",
            "value": 9,
            "description": "milesPerHour"
          },
          {
            "name": "MetersPerSecond",
            "value": 10,
            "description": "metersPerSecond"
          },
          {
            "name": "HectoPascals",
            "value": 11,
            "description": "hectoPascals"
          },
          {
            "name": "InchesOfMercury",
            "value": 12,
            "description": "inchesOfMercury"
          },
          {
            "name": "KiloPascals",
            "value": 13,
            "description": "kiloPascals"
          },
          {
            "name": "Millibars",
            "value": 14,
            "description": "millibars"
          },
          {
            "name": "MillimetersOfMercury",
            "value": 15,
            "description": "millimetersOfMercury"
          },
          {
            "name": "PoundsPerSquareInch",
            "value": 16,
            "description": "poundsPerSquareInch"
          },
          {
            "name": "Celsius",
            "value": 17,
            "description": "Celsius"
          },
          {
            "name": "Fahrenheit",
            "value": 18,
            "description": "Fahrenheit"
          },
          {
            "name": "Kelvin",
            "value": 19,
            "description": "kelvin"
          },
          {
            "name": "Percent",
            "value": 20,
            "description": "percent"
          },
          {
            "name": "Float",
            "value": 21,
            "description": "float"
          },
          {
            "name": "Integer",
            "value": 22,
            "description": "integer"
          },
          {
            "name": "MicrogramsPerCubicMeterOfAir",
            "value": 31,
            "description": "MicrogramsPerCubicMeterOfAir"
          }
        ]
      }
    },
    "WeatherValue": {
      "type": "object",
      "description": "Values for weather-related metrics such as temperature, dew point, and wind\nspeed, presented in either metric or imperial units, as specified in the unit\nURI parameter. For more information, see [Unit\ntypes](/azure/azure-maps/weather-services-concepts#unit-types) in the article\nWeather services in Azure Maps.",
      "properties": {
        "value": {
          "type": "number",
          "format": "float",
          "description": "The measured value expressed in the specified unit."
        },
        "unit": {
          "type": "string",
          "description": "The unit of measurement used in the return value, such as \"C\" for Celsius,\n\"F\" for Fahrenheit."
        },
        "unitType": {
          "$ref": "#/$defs/UnitType",
          "description": "An integer representing the type of unit. For example, 0 for feet, 1 for\ninches, 2 for miles. For a complete list, see [Unit\ntypes](/azure/azure-maps/weather-services-concepts#unit-types) in the\narticle Weather services in Azure Maps."
        }
      }
    },
    "WeatherWindow": {
      "type": "object",
      "description": "The forecast window covering one segment of a tropical storm's predicted\ntrack, returned as `StormForecast.window`. Each window represents the\narea of uncertainty around the storm's projected path - bounded in time\nby `beginDateTime` and `endDateTime` and laterally by the `left` and\n`right` points marking the left and right edges of the path relative to\nthe storm's direction of travel - and reports the storm's classification\nat the start and end of the segment (`beginStatus`, `endStatus`). When\nthe request asks for the window geometry, `geometry` carries a GeoJSON\nrepresentation of the affected area.",
      "properties": {
        "left": {
          "$ref": "#/$defs/LatLongPair",
          "description": "The point at the left edge of the storm's projected path for this\nsegment - left relative to the storm's direction of travel - given as\nlatitude and longitude. For example, latitude *22.56387*, longitude\n*137.739517*."
        },
        "right": {
          "$ref": "#/$defs/LatLongPair",
          "description": "The point at the right edge of the storm's projected path for this\nsegment - opposite `left`, right of the storm's direction of travel -\ngiven as latitude and longitude. For example, latitude *21.4361*,\nlongitude *137.860489*."
        },
        "beginDateTime": {
          "type": "string",
          "format": "date-time",
          "description": "The date and time at which this segment of the forecast window begins,\nin [ISO\n8601](https://www.iso.org/iso-8601-date-and-time-format.html) format\n(yyyy-mm-ddThh:mm:ss-hh:mm). For example, *2025-04-29T07:00:00-07:00*."
        },
        "endDateTime": {
          "type": "string",
          "format": "date-time",
          "description": "The date and time at which this segment of the forecast window ends,\nin [ISO\n8601](https://www.iso.org/iso-8601-date-and-time-format.html) format\n(yyyy-mm-ddThh:mm:ss-hh:mm). For example, *2025-04-29T07:00:00-07:00*."
        },
        "beginStatus": {
          "type": "string",
          "description": "The storm's classification at the start of this window segment - for\nexample, *Tropical Storm*. Uses the same set of values as\n`StormForecast.status`."
        },
        "endStatus": {
          "type": "string",
          "description": "The storm's classification at the end of this window segment - for\nexample, *Tropical Storm*. Uses the same set of values as\n`StormForecast.status`."
        },
        "geometry": {
          "$ref": "#/$defs/GeoJsonGeometry",
          "description": "A GeoJSON representation of the area affected by the storm across this\nwindow segment, suitable for rendering the projected path on a map.\nReturned only when the request asks for the window geometry."
        }
      }
    }
  }
}