{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/microsoft-azure-maps/json-schema/microsoft-azure-maps-storm-locations-result-schema.json",
  "title": "StormLocationsResult",
  "description": "The response returned by the Get Tropical Storm Locations operation,\ngiving the observed track of a single tropical storm identified by\n`basinId`, `govId`, and `year`. Each entry in the `results` array is a\n`StormLocation` reporting the storm's position, classification, sustained\nwind and wind-gust speeds, minimum pressure, movement, and lifecycle\nflags at one observed point in time. When the result set is too large\nto fit in a single response, `nextLink` carries the URL for the next\npage.",
  "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/StormLocationsResult",
  "type": "object",
  "properties": {
    "results": {
      "type": "array",
      "description": "The observed points along the storm's track, in reverse chronological\norder (most recent observation first). Each `StormLocation` reports the\nstorm's position, classification (for example, *Tropical Depression*\nor *Tropical Storm*), sustained wind and wind-gust speeds, minimum\npressure, and movement at one observation time - for example, a\nNorthwest Pacific (*NP*) storm observed at *2021-02-22T00:00:00+00:00*\nat (latitude *10.4*, longitude *125.7*) with a sustained wind of\n*46.3 km/h* and a wind gust of *64.8 km/h*.",
      "items": {
        "$ref": "#/$defs/StormLocation"
      }
    },
    "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."
        }
      }
    },
    "StormLocation": {
      "type": "object",
      "description": "A single observed location fix along a tropical storm's track, returned as\none entry in `StormLocationsResult.results`. Each entry captures where the\nstorm's center was at a specific point in time and the conditions observed\nthere - position (latitude/longitude), sustained wind and peak wind gust,\nminimum central pressure, the storm's direction and forward speed of motion,\nand its lifecycle classification (for example, *Tropical Depression* or\n*Tropical Storm*). Together, the sequence of entries forms the storm's\nobserved track and is used to follow how its position, intensity, and\nstructure evolved.",
      "properties": {
        "dateTime": {
          "type": "string",
          "description": "The date and time of the observation, 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, *2021-02-22T00:00:00+00:00*.\nSuccessive entries in `StormLocationsResult.results` typically step\nbackward in time at a fixed cadence (for example, every 6 hours)."
        },
        "location": {
          "$ref": "#/$defs/LatLongPair",
          "description": "Latitude and longitude coordinates of the storm's center at this\nobservation time. For example, latitude *10.4* and longitude *125.7*."
        },
        "maxWindGust": {
          "$ref": "#/$defs/WeatherValue",
          "description": "The peak wind gust observed near the storm's center at this time, in\nkilometers per hour (km/h) or miles per hour (mph) depending on the unit\nspecified in the request - for example, *64.8 km/h*. Wind gusts are short,\nsudden bursts of wind that exceed the sustained wind reported in\n`sustainedWind`. May be NULL when no gust observation is available."
        },
        "sustainedWind": {
          "$ref": "#/$defs/WeatherValue",
          "description": "The maximum 1-minute sustained wind associated with the storm at this\nobservation time, in kilometers per hour (km/h) or miles per hour (mph)\ndepending on the unit specified in the request - for example, *46.3 km/h*\nfor a tropical depression up to *83.3 km/h* once the system has reached\ntropical-storm strength. Sustained wind, together with `status`, is the\nprimary measure of the storm's current intensity."
        },
        "minimumPressure": {
          "$ref": "#/$defs/WeatherValue",
          "description": "The lowest atmospheric pressure measured at the storm's center at this\ntime, in millibars (mb) or inches of mercury (inHg) depending on the unit\nspecified in the request. Lower central pressure generally indicates a\nstronger storm. May be NULL when no pressure observation is available."
        },
        "movement": {
          "$ref": "#/$defs/WindDetails",
          "description": "The direction the storm is moving and how fast it is moving in that\ndirection at this observation time. The direction is given in azimuth\ndegrees, measured clockwise from true North (0° = N, 90° = E, 180° = S,\n270° = W) - for example, **305°** with a localized description of *NW*, or\n**270°** with a localized description of *W*. The forward speed is in\nkilometers per hour (km/h) or miles per hour (mph) depending on the unit\nspecified in the request - for example, *9.3 km/h*."
        },
        "status": {
          "type": "string",
          "description": "The storm's lifecycle classification at this observation time, in English.\nTypical values include *Tropical Depression* (sustained winds below tropical-storm strength), *Tropical Storm*, and *Hurricane* / *Typhoon*\n(depending on basin), and may also reflect subtropical or post-tropical\nstages indicated by `isSubtropical` and `isPostTropical`."
        },
        "isSubtropical": {
          "type": "boolean",
          "description": "`true` if at this observation time the storm is classified as a\nsubtropical cyclone - a hybrid system with characteristics of both\ntropical and extratropical cyclones. `false` otherwise."
        },
        "hasTropicalPotential": {
          "type": "boolean",
          "description": "`true` if at this observation time the system has the potential to develop\ninto a tropical cyclone, used to flag pre-genesis disturbances. `false`\notherwise."
        },
        "isPostTropical": {
          "type": "boolean",
          "description": "`true` if at this observation time the storm has transitioned from a\ntropical cyclone to a post-tropical cyclone (for example, an\nextratropical or remnant low). `false` otherwise."
        },
        "windRadiiSummary": {
          "type": "array",
          "description": "The wind-radii summary observed around the storm's center at this time,\nwith one entry per wind-speed threshold (typically **34**, **50**, and\n**64** knots). Each entry describes how far winds at or above that\nthreshold extended from the center in each compass quadrant (NE, SE, SW,\nNW). 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."
        }
      }
    },
    "WindDetails": {
      "type": "object",
      "description": "Provides the forecasted wind speed, measured in units such as kilometers\nper hour (km/h) or miles per hour (mph), depending on the unit specified\nin the request. Also indicates the wind direction measured in azimuth\ndegrees, starting at true North and moving clockwise. North corresponds\nto 0°, east to 90°, south to 180°, and west to 270°. Possible values range\nfrom 0° to 359°.",
      "properties": {
        "direction": {
          "$ref": "#/$defs/WindDirection",
          "description": "Wind direction is measured in azimuth degrees, starting at true North (0°)\nand moving clockwise. East corresponds to 90°, south to 180°, and west to\n270°. Possible values range from 0° to 359°. This property returns an\ninteger representing the wind direction."
        },
        "speed": {
          "$ref": "#/$defs/WeatherValue",
          "description": "The expected wind speed, measured in kilometers per hour (km/h) or miles\nper hour (mph), depending on the unit specified in the request."
        }
      }
    },
    "WindDirection": {
      "type": "object",
      "description": "Provides details about wind direction, including the direction in azimuth\ndegrees and a localized abbreviation of the wind direction.",
      "properties": {
        "degrees": {
          "type": "integer",
          "format": "int32",
          "description": "Wind direction is measured in azimuth degrees, starting at true North and\nmoving clockwise. North corresponds to 0 degrees, east to 90 degrees, south\nto 180 degrees, and west to 270 degrees. Possible values range from 0 to\n359 degrees."
        },
        "localizedDescription": {
          "type": "string",
          "description": "A localized abbreviation of the wind direction, returned in the language\nspecified in the request. For example, `N` for North, `E` for East, `S` for\nSouth, and `W` for West."
        }
      }
    }
  }
}