Sylph
1.0.0
Sylph 是一个 ASP.NET Web 服务,它解析来自 NOAA IBTrACS 的热带气旋 CSV 数据,将其存储在 MongoDB 数据库中,并提供 RESTful API 来访问它。 Sylph 具有高度可配置性,但不提供实时数据,因为 IBTrACS 每周更新两次。
Sylph 是根据 AGPL-3.0 或更高版本授权的免费软件。
目前在制品
汇编
用法
.NET 5 SDK
克隆此存储库后,在项目根文件夹中创建一个appsettings.json
文件,其中包含以下内容:
{
"HurricaneDatabaseSettings" : {
"HurricaneCollectionName" : " " ,
"DatabaseName" : " " ,
"ConnectionString" : " "
}
}
填写 MongoDB 详细信息。数据库和集合必须手动创建。 Sylph 不会创建它们,如果它们不存在就会失败。
请参阅:在 MongoDB 中创建数据库
只需使用 IDE(Visual Studio、Rider)或 dotnet 进行构建即可。如果包含的启动配置文件不起作用,您必须创建自己的启动配置文件以进行本地测试。
需要以下 NuGet 包:
MongoDB.Driver
2.11.3+Quartz
3.2.2+Quartz.AspNetCore
3.2.2+这些应该会自动安装。
您的部署环境必须支持 ASP.NET Core 5.0,例如 Azure。如果您进行配置,您也许可以使用旧版本。
解析的数据足够小,可以放入免费的 MongoDB Atlas 实例中。
https://{host}/hurricane/api
范围 | 类型 | 默认 | 描述 | 单元 |
---|---|---|---|---|
开始日期 | 长/int64 | 0 | 对热带气旋的限制在指定时间后开始。 有效 datapoints.0.time >= startdate | UNIX 秒 |
结束日期 | 长/int64 | Int64.MaxValue | 限制热带气旋在指定时间之前开始。 有效 datapoints.0.time <= enddate | UNIX 秒 |
最大速度 | ushort/int32 | Int32.MaxValue | 限制最大速度未超过此值的热带气旋 | 结 |
积极的 | 短/int16 | 2 | 仅限于活跃、不活跃或两者兼而有之的热带气旋。active=1 返回活跃的热带气旋, active=0 返回不活跃的热带气旋。任何其他值都会返回活动和非活动状态。 | |
姓名 | 细绳 | 空的 | 限制name 字段包含指定字符串的热带气旋。 | |
种类 | 细绳 | 描述 | 根据热带气旋 ID(有效开始时间)按升序 ( asc ) 或降序 ( desc ) 对热带气旋进行排序 |
https://{host}/hurricane/api?startdate=1604447200&enddate=1608847400&active=1
[
{
"id" : " 2020360S16057 " ,
"name" : " CHALANE " ,
"active" : true ,
"maxSpeed" : 18 ,
"firstActive" : 1608847200 ,
"lastActive" : 1609279200 ,
"datapoints" : [
{
"lat" : -15.8 ,
"lon" : 56.5 ,
"time" : 1608847200 ,
"stormSpeed" : 9 ,
"windSpeed" : 35 ,
"cat" : 0 ,
"dist2land" : 492
},
{
"lat" : -15.8703 ,
"lon" : 56.0302 ,
"time" : 1608858000 ,
"stormSpeed" : 9 ,
"windSpeed" : 35 ,
"cat" : 0 ,
"dist2land" : 495
},
{
"lat" : -15.9 ,
"lon" : 55.6 ,
"time" : 1608868800 ,
"stormSpeed" : 8 ,
"windSpeed" : 35 ,
"cat" : 0 ,
"dist2land" : 511
},
{
"lat" : -15.8772 ,
"lon" : 55.2222 ,
"time" : 1608879600 ,
"stormSpeed" : 8 ,
"windSpeed" : 35 ,
"cat" : 0 ,
"dist2land" : 506
},
{
"lat" : -15.9 ,
"lon" : 54.8 ,
"time" : 1608890400 ,
"stormSpeed" : 10 ,
"windSpeed" : 35 ,
"cat" : 0 ,
"dist2land" : 463
},
{
"lat" : -16.1229 ,
"lon" : 54.1781 ,
"time" : 1608901200 ,
"stormSpeed" : 12 ,
"windSpeed" : 35 ,
"cat" : 0 ,
"dist2land" : 403
},
{
"lat" : -16.3 ,
"lon" : 53.6 ,
"time" : 1608912000 ,
"stormSpeed" : 8 ,
"windSpeed" : 35 ,
"cat" : 0 ,
"dist2land" : 346
},
{
"lat" : -16.1721 ,
"lon" : 53.3122 ,
"time" : 1608922800 ,
"stormSpeed" : 6 ,
"windSpeed" : 35 ,
"cat" : 0 ,
"dist2land" : 312
},
{
"lat" : -16 ,
"lon" : 53.1 ,
"time" : 1608933600 ,
"stormSpeed" : 5 ,
"windSpeed" : 35 ,
"cat" : 0 ,
"dist2land" : 286
},
{
"lat" : -15.9896 ,
"lon" : 52.8247 ,
"time" : 1608944400 ,
"stormSpeed" : 7 ,
"windSpeed" : 35 ,
"cat" : 0 ,
"dist2land" : 255
},
{
"lat" : -16.1 ,
"lon" : 52.4 ,
"time" : 1608955200 ,
"stormSpeed" : 11 ,
"windSpeed" : 35 ,
"cat" : 0 ,
"dist2land" : 217
},
{
"lat" : -16.298 ,
"lon" : 51.6876 ,
"time" : 1608966000 ,
"stormSpeed" : 15 ,
"windSpeed" : 35 ,
"cat" : 0 ,
"dist2land" : 159
},
{
"lat" : -16.6 ,
"lon" : 50.9 ,
"time" : 1608976800 ,
"stormSpeed" : 15 ,
"windSpeed" : 35 ,
"cat" : 0 ,
"dist2land" : 100
},
{
"lat" : -16.9997 ,
"lon" : 50.2627 ,
"time" : 1608987600 ,
"stormSpeed" : 14 ,
"windSpeed" : 35 ,
"cat" : 0 ,
"dist2land" : 57
},
{
"lat" : -17.4 ,
"lon" : 49.7 ,
"time" : 1608998400 ,
"stormSpeed" : 12 ,
"windSpeed" : 35 ,
"cat" : 0 ,
"dist2land" : 31
},
{
"lat" : -17.6947 ,
"lon" : 49.1923 ,
"time" : 1609009200 ,
"stormSpeed" : 11 ,
"windSpeed" : 32 ,
"cat" : -1 ,
"dist2land" : 0
},
{
"lat" : -17.9 ,
"lon" : 48.7 ,
"time" : 1609020000 ,
"stormSpeed" : 10 ,
"windSpeed" : 29 ,
"cat" : -1 ,
"dist2land" : 0
},
{
"lat" : -18.015 ,
"lon" : 48.1497 ,
"time" : 1609030800 ,
"stormSpeed" : 11 ,
"windSpeed" : 27 ,
"cat" : -1 ,
"dist2land" : 0
},
{
"lat" : -18.1 ,
"lon" : 47.6 ,
"time" : 1609041600 ,
"stormSpeed" : 10 ,
"windSpeed" : 25 ,
"cat" : -1 ,
"dist2land" : 0
},
{
"lat" : -18.2048 ,
"lon" : 47.0921 ,
"time" : 1609052400 ,
"stormSpeed" : 10 ,
"windSpeed" : 25 ,
"cat" : -1 ,
"dist2land" : 0
},
{
"lat" : -18.4 ,
"lon" : 46.6 ,
"time" : 1609063200 ,
"stormSpeed" : 11 ,
"windSpeed" : 25 ,
"cat" : -1 ,
"dist2land" : 0
},
{
"lat" : -18.8 ,
"lon" : 46.078 ,
"time" : 1609074000 ,
"stormSpeed" : 12 ,
"windSpeed" : 27 ,
"cat" : -1 ,
"dist2land" : 0
},
{
"lat" : -19.2 ,
"lon" : 45.6 ,
"time" : 1609084800 ,
"stormSpeed" : 10 ,
"windSpeed" : 29 ,
"cat" : -1 ,
"dist2land" : 0
},
{
"lat" : -19.372 ,
"lon" : 45.2643 ,
"time" : 1609095600 ,
"stormSpeed" : 7 ,
"windSpeed" : 29 ,
"cat" : -1 ,
"dist2land" : 0
},
{
"lat" : -19.5 ,
"lon" : 44.9 ,
"time" : 1609106400 ,
"stormSpeed" : 10 ,
"windSpeed" : 29 ,
"cat" : -1 ,
"dist2land" : 0
},
{
"lat" : -19.7627 ,
"lon" : 44.3436 ,
"time" : 1609117200 ,
"stormSpeed" : 12 ,
"windSpeed" : 32 ,
"cat" : -1 ,
"dist2land" : 10
},
{
"lat" : -20 ,
"lon" : 43.7 ,
"time" : 1609128000 ,
"stormSpeed" : 13 ,
"windSpeed" : 35 ,
"cat" : 0 ,
"dist2land" : 69
},
{
"lat" : -20.1136 ,
"lon" : 43.0336 ,
"time" : 1609138800 ,
"stormSpeed" : 12 ,
"windSpeed" : 36 ,
"cat" : 0 ,
"dist2land" : 122
},
{
"lat" : -20.1321 ,
"lon" : 42.4238 ,
"time" : 1609149600 ,
"stormSpeed" : 10 ,
"windSpeed" : 37 ,
"cat" : 0 ,
"dist2land" : 174
},
{
"lat" : -20.0883 ,
"lon" : 41.9322 ,
"time" : 1609160400 ,
"stormSpeed" : 8 ,
"windSpeed" : 38 ,
"cat" : 0 ,
"dist2land" : 220
},
{
"lat" : -20 ,
"lon" : 41.6 ,
"time" : 1609171200 ,
"stormSpeed" : 3 ,
"windSpeed" : 39 ,
"cat" : 0 ,
"dist2land" : 252
},
{
"lat" : -19.9043 ,
"lon" : 41.666 ,
"time" : 1609182000 ,
"stormSpeed" : 2 ,
"windSpeed" : 42 ,
"cat" : 0 ,
"dist2land" : 250
},
{
"lat" : -19.8 ,
"lon" : 41.6 ,
"time" : 1609192800 ,
"stormSpeed" : 8 ,
"windSpeed" : 45 ,
"cat" : 0 ,
"dist2land" : 264
},
{
"lat" : -19.6861 ,
"lon" : 40.8546 ,
"time" : 1609203600 ,
"stormSpeed" : 16 ,
"windSpeed" : 45 ,
"cat" : 0 ,
"dist2land" : 330
},
{
"lat" : -19.6 ,
"lon" : 39.9 ,
"time" : 1609214400 ,
"stormSpeed" : 16 ,
"windSpeed" : 45 ,
"cat" : 0 ,
"dist2land" : 302
},
{
"lat" : -19.5774 ,
"lon" : 39.1327 ,
"time" : 1609225200 ,
"stormSpeed" : 13 ,
"windSpeed" : 49 ,
"cat" : 0 ,
"dist2land" : 277
},
{
"lat" : -19.6 ,
"lon" : 38.5 ,
"time" : 1609236000 ,
"stormSpeed" : 10 ,
"windSpeed" : 54 ,
"cat" : 0 ,
"dist2land" : 229
},
{
"lat" : -19.6865 ,
"lon" : 38.1155 ,
"time" : 1609246800 ,
"stormSpeed" : 8 ,
"windSpeed" : 57 ,
"cat" : 0 ,
"dist2land" : 208
},
{
"lat" : -19.7 ,
"lon" : 37.7 ,
"time" : 1609257600 ,
"stormSpeed" : 11 ,
"windSpeed" : 60 ,
"cat" : 0 ,
"dist2land" : 172
},
{
"lat" : -19.514 ,
"lon" : 36.9938 ,
"time" : 1609268400 ,
"stormSpeed" : 16 ,
"windSpeed" : 60 ,
"cat" : 0 ,
"dist2land" : 99
},
{
"lat" : -19.2 ,
"lon" : 36.1 ,
"time" : 1609279200 ,
"stormSpeed" : 18 ,
"windSpeed" : 60 ,
"cat" : 0 ,
"dist2land" : 30
}
]
}
]
财产 | 类型 | 单元 | IBTrACS 专栏 | 描述 |
---|---|---|---|---|
ID | 细绳 | 不适用 | 安全识别码 | 风暴标识符 |
姓名 | 细绳 | 不适用 | 姓名 | 机构提供的名称。这些可能会随着时间的推移而改变。 |
积极的 | 布尔值 | 不适用 | 不适用 | 风暴当前是否活跃。 |
最大速度 | 整数 | 结 | 不适用 | 风暴在其生命周期中达到的最大速度。 |
第一次活跃 | 长的 | UNIX 秒 | ISO_TIME | 这是第一次观察到这场风暴活跃。 |
最后活跃 | 长的 | UNIX 秒 | ISO_TIME | 上次观察到这场风暴活跃的时间。 |
数据点 | 大批 | 不适用 | 不适用 | 保存不同时间点的一些风暴数据的数组 |
财产 | 类型 | 单元 | IBTrACS 专栏 | 描述 |
---|---|---|---|---|
拉特 | 漂浮 | 北纬度 | 拉特 | 此时间戳的纬度。 |
长 | 漂浮 | 东度 | 朗 | 此时间戳的经度。 |
时间 | 长的 | UNIX 秒 | ISO_TIME | 该数据点的 UNIX 时间戳。 |
风暴速度 | 整数 | 结 | 风暴速度 | 此时间戳的风暴速度。 |
风速 | 整数 | 结 | 美国_WIND | 该时间戳的风速。 |
猫 | 整数 | 结 | 风暴速度 | 该风暴在此时间戳的萨菲尔-辛普森规模类别。 -5 = 未知 [XX] -4 = 后热带气旋 [EX、ET、PT] -3 = 杂项干扰 [WV、LO、DB、DS、IN、MD] -2 = 亚热带 [SS, SD] 根据风速分类的热带系统 [TD、TS、HU、TY、TC、ST、HR] -1 = 热带低压 (W<34) 0 = 热带风暴 [34 2 = 类别 2 [83<=W<96] 3 = 类别 3 [96<=W<113] 4 = 类别 4 [113<=W<137] 5 = 类别 5 [W >= 137] |
距离之地 | 整数 | 公里 | 迪斯特兰 | 从当前位置到着陆的距离。包括面积超过 1400 km^2 的所有大陆和岛屿。 |
(1 节 = 1.852 公里/小时 | 1.151 英里/小时)
有关 IBTrACS 列的信息,请单击此处。