NASA’s Global Hydrometeorology Resource Center Distributed Active Archive Center (GHRC DAAC) offers two public services: a storms service and a satellite service. The storm service provides information about tropical storms for Atlantic, Eastern, and Central Pacific storms. GHRC DAAC gathers these data from the HURDAT files annually and also updates the database with information provided by the National Hurricane Center (NHC) during storm season.
Two services are provided: The search service finds storms meeting the user's criteria. The track service provides detailed information about a storm's track. These services are invoked using a REST interface, obtaining all of their parameters via the GET (or POST) data and returning an XML-formatted response.
The Storm Services REST Interface
The caller can use a representational state transfer (REST) interface to retrieve information about storms using the "storms" interface. There are a number of optional parameters that can be provided to narrow the search by name (possibly wildcarded), from/thru date, area-of-interest bounding box, min/max pressure, min/max wind speeds, min/max category, and basin (Atlantic or Pacific). The result is XML containing a list of storms with specific values for all of the parameters.
- Interface description: https://ghrc.nsstc.nasa.gov/home/resources/public-services/storms
- Service address:
https://ghrc.nsstc.nasa.gov/services/storms/search.pl
- Service address:
https://ghrc.nsstc.nasa.gov/services/storms/track.pl
The NHC tracks tropical storms (hurricanes) and makes these data available to the general public via their website.
GHRC DAAC's ongoing processing detects new storm data as it occurs and enters it into their local database. The NHC reprocesses all the storm data annually, at which time GHRC DAAC replaces the data for the previous year with the reprocessed data. This can result in storms being deleted, changed, or added.
It must be noted that the NHC currently only provides storm tracking information at six-hour intervals, specifically at 00Z, 06Z, 12Z, and 18Z.
The Search Service
The search service searches for storms meeting the user's criteria.
The Request
The service is invoked using the following syntax:
https://ghrc.nsstc.nasa.gov/services/storms/search.pl[?options]
When invoked without any options, all of the storms in the database are returned. There are several thousand of them, so this is not recommended. The options are as follows:
- name=string
- A possibly wildcarded name of a storm. Unix wildcards ? (match a single character) and * (match zero or more characters) may be used. This parameter is optional.
- from=yyyy[-mm-dd]
- The earliest date of interest. This parameter is optional.
- thru=yyyy[-mm-dd]
- The latest date of interest. This parameter is optional.
- north=float
- The north bound of the area-of-interest in decimal degrees. Northern latitudes are positive, southern latitudes are negative. This parameter is optional.
- south=float
- The south bound of the area-of-interest in decimal degrees. Northern latitudes are positive, southern latitudes are negative. This parameter is optional.
- west=float
- The west bound of the area-of-interest in decimal degrees. Western hemisphere longitudes are native, eastern hemisphere longitudes are positive. This parameter is optional.
- east=float
- The east bound of the area-of-interest in decimal degrees. Western hemisphere longitudes are native, eastern hemisphere longitudes are positive. This parameter is optional.
- minpressure=integer
- The minimum pressure of interest in millibars. This parameter is optional.
- maxpressure=integer
- The maximum pressure of interest in millibars. This parameter is optional.
- minwinds=integer
- The minimum wind speed in knots. This parameter is optional.
- maxwinds=integer
- The maximum wind speed in knots. This parameter is optional.
- mincategory=cat
- The minimum storm category. See below for "cat" values. This parameter is optional.
- maxcategory=cat
- The maximum storm category. See below for "cat" values. This parameter is optional.
- basin={AT|CP|EP}
- The storm basin, Atlantic (AP), Central Pacific (CP), or Eastern Pacific (EP). This parameter is optional.
- The storm basin, Atlantic (AP), Central Pacific (CP), or Eastern Pacific (EP). This parameter is optional.
The "from" and "thru" values may indicate simply a year (yyyy) or a year, month, and day (yyyy-mm-dd). If "from" is specified and "thru" is not, all storms for the given date and after will be returned. Similarly, if "thru" is specified, and "from" is not, all storms up to the the given date will be returned.
The "north", "south", "east", "and "west" values specify a bounding box of interest. The box specifies only the center of the storms, not the storms' extents. If omitted, "north" defaults to 90, "south" defaults to "-90", "east" defaults to 180, and "west" defaults to -180. The "north" value must exceed the "south" value. If the "west" value exceeds the "east" value, then the area-of-interest crosses the Date Line.
"minpressure" must not exceed "maxpressure", if both are specified. Similarly, "minwinds" must not exceed "maxwinds" if both are specified.
"mincategory" and "maxcategory" use a shorthand form for the categories:
- "L" for "not available", "disturbance", "wave", and "low pressure"
- "D" for any kind of depression
- "S" for any kind of storm
- "1" through "5" for category 1 through 5 hurricanes
- "L" is the minimum category and "5" is the maximum category. "mincategory" must not exceed "maxcategory" if both are specified.
If "basin" is specified, it must only specify one basin. Sorry, there is no mechanism for searching two of the basins and not the third in one query.
The Response
The response is always in XML. It has the following format:
<StormSearchResponse>
{<Error msg="string"> |
[<Storm
stormid="integer"
hnumber="integer"
name="string"
from="datetime"
thru="datetime"
north="float"
south="float"
west="float"
east="float"
maxwind="integer"
minpressure="integer"
maxcategory="string"
basin="string"/>...]}
</StormSearchResponse>
If the request was invalid for some reason, a single "Error" tag will be returned and the "msg" attribute will describe the reason for the error.
If the request was successful, zero or more "Storm" tags will be returned. Note that finding no storms matching the search criteria is not an error; it will simply result in an empty response.
The "stormid" is our internal storm identifier. It is formatted as "yyyynnb" where "yyyy" is the year, "nn" is the storm within the year (01-99), and "b" is an encoded value identifying the basin: "1" for Atlantic, "2" for Eastern Pacific, and "3" for Central Pacific". You will need this value to use the "track" interface, described below.
The "hnumber" is the identification assigned to the storm by the NHC.
The "from" and "thru" values are expressed as ISO date/time strings: yyyy-mm-ddThh:mm:ssZ. All times are UTC.
The "north", "south", "east", and "west" values are the maximum extent of the center of the storm. This does not represent the full extent of the storm's winds.
The "maxwind" value indicates the maximum wind speed of the storm in knots. The "minpressure" value indicates the minimum barometric pressure of the storm in millibars. And the "maxcategory" value indicates the maximum category of the storm expressed in NHC codes:
- LP - Low pressure
- SD - Subtropical depression
- TD - Tropical depression
- ES - Extratropical storm
- SS - Subtropical storm
- TS - Tropical storm
- H1 - Category 1 hurricane
- H2 - Category 2 hurricane
- H3 - Category 3 hurricane
- H4 - Category 4 hurricane
- H5 - Category 5 hurricane
Search Service Request Examples
Search for all storms named "KATRINA":
https://ghrc.nsstc.nasa.gov/services/storms/search.pl?name=KATRINA
Search for KATRINA in 2005:
https://ghrc.nsstc.nasa.gov/services/storms/search.pl?name=KATRINA&from=2005&thru=2005
Search for all category-5 hurricanes in the 21st century:
https://ghrc.nsstc.nasa.gov/services/storms/search.pl?mincategory=5&maxcategory=5&from=2001
Search for all storms with three-letter names in the 20th century in the Atlantic basin
https://ghrc.nsstc.nasa.gov/services/storms/search.pl?name=???&from=1901&thru=2000&basin=AT
Note that the "???" string in the last example should have been encoded using "%" syntax. Many interfaces allow this form and will fix the command for you.
The first example above results in the following response:
<StormSearchResponse
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://ghrc.nsstc.nasa.gov/services/storms/search.xsd">
<Storm stormid="1967102" hnumber="196710" name="KATRINA" from="1967-08-30T00:00:00Z" thru="1967-09-03T00:00:00Z"
north="33.2" south="17.8" west="-114.6" east="-107.2" maxwind="75" minpressure="0" maxcategory="H1" basin="EP"/>
<Storm stormid="1971112" hnumber="197111" name="KATRINA" from="1971-08-08T12:00:00Z" thru="1971-08-13T00:00:00Z"
north="26.4" south="14.4" west="-109" east="-97.4" maxwind="55" minpressure="0" maxcategory="TS" basin="EP"/>
<Storm stormid="1975112" hnumber="197511" name="KATRINA" from="1975-08-29T00:00:00Z" thru="1975-09-07T00:00:00Z"
north="21.8" south="10.5" west="-128.9" east="-101" maxwind="115" minpressure="0" maxcategory="H4" basin="EP"/>
<Storm stormid="1981211" hnumber="198121" name="KATRINA" from="1981-11-03T00:00:00Z" thru="1981-11-07T18:00:00Z"
north="26.8" south="16.9" west="-81.4" east="-64.5" maxwind="75" minpressure="980" maxcategory="H1" basin="AT"/>
<Storm stormid="1999151" hnumber="199915" name="KATRINA" from="1999-10-28T18:00:00Z" thru="1999-11-01T12:00:00Z"
north="21.2" south="11.4" west="-89.8" east="-80.9" maxwind="35" minpressure="999" maxcategory="TS" basin="AT"/>
<Storm stormid="2005121" hnumber="200512" name="KATRINA" from="2005-08-23T18:00:00Z" thru="2005-08-31T06:00:00Z"
north="40.1" south="23.1" west="-89.6" east="-75.1" maxwind="150" minpressure="902" maxcategory="H5" basin="AT"/>
</StormSearchResponse>
The Track Service
The track service provides all of the track records for a single storm.
The Request
The service is invoked using the following syntax:
https://ghrc.nsstc.nasa.gov/services/storms/track.pl?stormid=yyyynnb
where "yyyynnb" is the storm-id returned by a "search" request. Note that this is not the NHC-supplied storm number.
The Response
The response is returned in XML as follows:
If an error was encountered processing the request, the following is returned:
<StormTrackResponse>
<Error msg="string"/>
</StormTrackResponse>
The "Error" tag's "msg" attribute will provide an explanation of the error.
If the request was successful, the following is returned:
<StormTrackResponse
stormid="integer"
name="string"
hnumber="string"
from="datetime"
thru="datetime"
minlat="float"
maxlat="float"
minlon="float"
maxlon="float"
maxwind="integer"
minpress="integer"
maxcat="xx"
basin="xx">
<Track
date="datetime"
[flag="x"]
category="xx"
latitude="float"
longitude="float"
windspeed="integer"
pressure="integer"
[r34kt="float,float,float,float"]
[r50kt="float,float,float,float"]
[r64kt="float,float,float,float"]
/>...
<StormTrackResponse>
The "StormTrackResponse" tag will contain the same information about the storm as returned by the "search" command (see above). There will be one or more "Track" tags within the "StormTrackResponse" tag, each indicating the characteristics of the storm at that date and time.
The "flag" attribute, if present, indicates additional information about the track record:
"L" - The storm made landfall
"W" - Maximum sustained wind
"P" - Minimum central pressure
"I" - Pressure/wind intensity peak
"C" - Closest approach without landfall
"S" - Change of system status
"G" - Genesis
"T" - Additional detail on track
Note that the latitude and longitude values indicate the center of the storm only.
The "r3rkt", "r50kt", and "464kt" attributes will be present in only a handfull of track records for storms from a previous year, never for the ongoing season. They indicate the 34 knot, 50 knot, and 64 knot wind radii in nautical miles from the storm's center in the northeast, southeast, southwest, and northwest directions, respectively.
Track Service Request Example
Return the track information for 2005 KATRINA:
https://ghrc.nsstc.nasa.gov/services/storms/track.pl?stormid=2005121
which returns:
<StormTrackResponse
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://ghrc.nsstc.nasa.gov/services/storms/track.xsd"
stormid="2005121" name="KATRINA" hnumber="200512" from="2005-08-23T18:00:00Z" thru="2005-08-31T06:00:00Z"
minlat="23.1" maxlat="40.1" minlon="-89.6" maxlon="-75.1" maxwind="150" minpress="902" maxcat="H5" basin="AT">
<Track date="2005-08-23T18:00:00Z" category="TD" latitude="23.1" longitude="-75.1" windspeed="30" pressure="1008"/>
<Track date="2005-08-24T00:00:00Z" category="TD" latitude="23.4" longitude="-75.7" windspeed="30" pressure="1007"/>
<Track date="2005-08-24T06:00:00Z" category="TD" latitude="23.8" longitude="-76.2" windspeed="30" pressure="1007"/>
<Track date="2005-08-24T12:00:00Z" category="TS" latitude="24.5" longitude="-76.5" windspeed="35" pressure="1006"/>
<Track date="2005-08-24T18:00:00Z" category="TS" latitude="25.4" longitude="-76.9" windspeed="40" pressure="1003"/>
<Track date="2005-08-25T00:00:00Z" category="TS" latitude="26" longitude="-77.7" windspeed="45" pressure="1000"/>
<Track date="2005-08-25T06:00:00Z" category="TS" latitude="26.1" longitude="-78.4" windspeed="50" pressure="997"/>
<Track date="2005-08-25T12:00:00Z" category="TS" latitude="26.2" longitude="-79" windspeed="55"
pressure="994" r34kt="60,60,30,50"/>
<Track date="2005-08-25T18:00:00Z" category="TS" latitude="26.2" longitude="-79.6" windspeed="60"
pressure="988" r34kt="70,70,50,60" r50kt="25,25,25,20"/>
<Track date="2005-08-25T22:30:00Z" flag="L" category="H1" latitude="26" longitude="-80.1" windspeed="70" pressure="984"/>
<Track date="2005-08-26T00:00:00Z" category="H1" latitude="25.9" longitude="-80.3" windspeed="70"
pressure="983" r34kt="70,70,50,40" r50kt="20,20,20,20" r64kt="10,10,10,10"/>
<Track date="2005-08-26T06:00:00Z" category="H1" latitude="25.4" longitude="-81.3" windspeed="65"
pressure="987" r34kt="75,75,40,30" r50kt="60,60,60,20" r64kt="10,10,10,10"/>
<Track date="2005-08-26T12:00:00Z" category="H1" latitude="25.1" longitude="-82" windspeed="75"
pressure="979" r34kt="75,75,45,25" r50kt="60,60,60,25" r64kt="10,20,10,10"/>
<Track date="2005-08-26T18:00:00Z" category="H2" latitude="24.9" longitude="-82.6" windspeed="85"
pressure="968" r34kt="75,75,55,35" r50kt="60,60,60,35" r64kt="10,20,15,10"/>
<Track date="2005-08-27T00:00:00Z" category="H2" latitude="24.6" longitude="-83.3" windspeed="90"
pressure="959" r34kt="90,75,75,75" r50kt="60,60,60,40" r64kt="15,25,20,15"/>
<Track date="2005-08-27T06:00:00Z" category="H2" latitude="24.4" longitude="-84" windspeed="95"
pressure="950" r34kt="130,90,90,130" r50kt="60,60,60,45" r64kt="25,30,30,25"/>
<Track date="2005-08-27T12:00:00Z" category="H3" latitude="24.4" longitude="-84.7" windspeed="100"
pressure="942" r34kt="130,90,90,130" r50kt="60,60,60,45" r64kt="25,30,30,25"/>
<Track date="2005-08-27T18:00:00Z" category="H3" latitude="24.5" longitude="-85.3" windspeed="100"
pressure="948" r34kt="140,90,90,130" r50kt="70,70,70,60" r64kt="35,35,35,35"/>
<Track date="2005-08-28T00:00:00Z" category="H3" latitude="24.8" longitude="-85.9" windspeed="100"
pressure="941" r34kt="140,100,100,140" r50kt="80,80,80,65" r64kt="50,45,45,50"/>
<Track date="2005-08-28T06:00:00Z" category="H4" latitude="25.2" longitude="-86.7" windspeed="125"
pressure="930" r34kt="160,160,125,140" r50kt="100,100,100,75" r64kt="75,75,50,75"/>
<Track date="2005-08-28T12:00:00Z" category="H5" latitude="25.7" longitude="-87.7" windspeed="145"
pressure="909" r34kt="180,180,125,140" r50kt="120,120,120,75" r64kt="75,90,50,75"/>
<Track date="2005-08-28T18:00:00Z" category="H5" latitude="26.3" longitude="-88.6" windspeed="150"
pressure="902" r34kt="200,180,125,180" r50kt="120,120,120,75" r64kt="90,90,50,90"/>
<Track date="2005-08-29T00:00:00Z" category="H5" latitude="27.2" longitude="-89.2" windspeed="140"
pressure="905" r34kt="200,200,150,180" r50kt="120,120,120,75" r64kt="80,90,60,80"/>
<Track date="2005-08-29T06:00:00Z" category="H4" latitude="28.2" longitude="-89.6" windspeed="125"
pressure="913" r34kt="200,200,150,150" r50kt="120,120,120,75" r64kt="70,90,60,70"/>
<Track date="2005-08-29T11:10:00Z" flag="L" category="H3" latitude="29.3" longitude="-89.6" windspeed="110" pressure="920"/>
<Track date="2005-08-29T12:00:00Z" category="H3" latitude="29.5" longitude="-89.6" windspeed="110"
pressure="923" r34kt="200,200,150,100" r50kt="120,120,120,75" r64kt="60,90,60,60"/>
<Track date="2005-08-29T14:45:00Z" flag="L" category="H3" latitude="30.2" longitude="-89.6" windspeed="105" pressure="928"/>
<Track date="2005-08-29T18:00:00Z" category="H1" latitude="31.1" longitude="-89.6" windspeed="80"
pressure="948" r34kt="100,180,100,100" r50kt="75,75,100,75" r64kt="30,50,30,30"/>
<Track date="2005-08-30T00:00:00Z" category="TS" latitude="32.6" longitude="-89.1" windspeed="50"
pressure="961" r34kt="75,90,90,50"/>
<Track date="2005-08-30T06:00:00Z" category="TS" latitude="34.1" longitude="-88.6" windspeed="40"
pressure="978" r34kt="75,90,75,50"/>
<Track date="2005-08-30T12:00:00Z" category="TD" latitude="35.6" longitude="-88" windspeed="30" pressure="985"/>
<Track date="2005-08-30T18:00:00Z" category="TD" latitude="37" longitude="-87" windspeed="30" pressure="990"/>
<Track date="2005-08-31T00:00:00Z" category="ES" latitude="38.6" longitude="-85.3" windspeed="30" pressure="994"/>
<Track date="2005-08-31T06:00:00Z" category="ES" latitude="40.1" longitude="-82.9" windspeed="25" pressure="996"/>
</StormTrackResponse>