Sylph — это веб-служба ASP.NET, которая анализирует данные CSV о тропических циклонах из NOAA IBTrACS, сохраняет их в базе данных MongoDB и предоставляет RESTful API для доступа к ним. Sylph легко настраивается, но не предоставляет данные в реальном времени, поскольку IBTrACS обновляется два раза в неделю.
Sylph — это бесплатное программное обеспечение под лицензией AGPL-3.0 или более поздней версии.
В настоящее время незавершенное производство
Сборник
Использование
.NET 5 SDK
После клонирования этого репозитория создайте файл appsettings.json
в корневой папке проекта со следующим:
{
"HurricaneDatabaseSettings" : {
"HurricaneCollectionName" : " " ,
"DatabaseName" : " " ,
"ConnectionString" : " "
}
}
Заполните данные MongoDB. Базу данных и коллекцию необходимо создавать вручную. Сильфида не создает их и потерпит неудачу, если они не существуют.
См.: Создание базы данных в MongoDB.
Просто создайте проект с помощью интегрированной среды разработки (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 <= конечная дата | UNIX-секунды |
максимальная скорость | ушорт/int32 | Int32.MaxValue | Ограничение на тропические циклоны, максимальная скорость которых не превысила это значение. | Узлы |
активный | короткий/int16 | 2 | Ограничьтесь тропическими циклонами, которые активны, неактивны или и то, и другое.active=1 возвращает активные тропические циклоны, active=0 возвращает неактивные.Любое другое значение возвращает как активное, так и неактивное значение. | |
имя | нить | пустой | Ограничьтесь тропическими циклонами, поле name которых содержит указанную строку. | |
сортировать | нить | описание | сортировать тропические циклоны по возрастанию ( 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 | описание |
---|---|---|---|---|
идентификатор | нить | н/д | SID | Идентификатор шторма |
имя | нить | н/д | ИМЯ | Имя предоставлено агентством. Они могут меняться со временем. |
активный | логическое значение | н/д | н/д | Активен ли в данный момент шторм или нет. |
максимальная скорость | интервал | Узлы | н/д | Максимальная скорость, которой достиг шторм за всю свою жизнь. |
первый активный | длинный | UNIX-секунды | ISO_TIME | Впервые этот шторм был отмечен как активный. |
последний активный | длинный | UNIX-секунды | ISO_TIME | В последний раз этот шторм наблюдался активным. |
точки данных | множество | н/д | н/д | Массив, в котором хранятся некоторые данные о шторме в разные моменты времени. |
свойство | тип | единица | Колонка IBTrACS | описание |
---|---|---|---|---|
лат. | плавать | градусы северной широты | Латвия | Широта в этой временной метке. |
Лондон | плавать | градусов на восток | ЛОН | Долгота в этой временной метке. |
время | длинный | UNIX-секунды | ISO_TIME | Временная метка UNIX этой точки данных. |
штормСкорость | интервал | Узлы | STORM_SPEED | Скорость шторма в эту временную метку. |
скорость ветра | интервал | Узлы | США_ВИНД | Скорость ветра в эту временную метку. |
кот | интервал | Узлы | STORM_SPEED | Категория этого шторма по шкале Саффира-Симпсона в эту временную метку. -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] |
dist2land | интервал | километры | DIST2LAND | Расстояние до земли от текущей позиции. Включает все континенты и острова площадью более 1400 км^2. |
(1 узел = 1,852 км/ч | 1,151 миль в час)
Для получения информации о столбцах IBTrACS нажмите здесь.