Sylph é um serviço web ASP.NET que analisa dados CSV de ciclones tropicais do NOAA IBTrACS, armazena-os em um banco de dados MongoDB e fornece uma API RESTful para acessá-los. O Sylph é altamente configurável, mas não fornece dados em tempo real, pois o IBTrACS é atualizado duas vezes por semana.
Sylph é um software livre licenciado sob AGPL-3.0 ou posterior.
Atualmente WIP
Compilação
Uso
SDK do .NET 5
Após clonar este repositório, crie um arquivo appsettings.json
na pasta raiz do projeto com o seguinte:
{
"HurricaneDatabaseSettings" : {
"HurricaneCollectionName" : " " ,
"DatabaseName" : " " ,
"ConnectionString" : " "
}
}
Preencha os detalhes do MongoDB. O banco de dados e a coleção devem ser criados manualmente. Sylph não os cria e falhará se eles não existirem.
Consulte: Crie um banco de dados no MongoDB
Basta construir usando seu IDE (Visual Studio, Rider) ou dotnet. Você deve criar seu próprio perfil de lançamento para testes locais, caso o incluído não funcione.
Os seguintes pacotes NuGet são necessários:
MongoDB.Driver
2.11.3+Quartz
3.2.2+Quartz.AspNetCore
3.2.2+Eles devem ser instalados automaticamente.
Seu ambiente de implantação deve dar suporte ao ASP.NET Core 5.0, como o Azure. Você poderá usar uma versão mais antiga se configurá-la.
Os dados analisados são pequenos o suficiente para caber em uma instância gratuita do MongoDB Atlas.
https://{host}/hurricane/api
parâmetro | tipo | padrão | descrição | unidade |
---|---|---|---|---|
data de início | longo/int64 | 0 | Limite para ciclones tropicais iniciados após o horário especificado. Efetivamente datapoints.0.time >= startdate | Segundos UNIX |
data final | longo/int64 | Int64.MaxValue | Limite para ciclones tropicais iniciados antes do horário especificado. Efetivamente datapoints.0.time <= enddate | Segundos UNIX |
velocidade máxima | ushort/int32 | Int32.MaxValue | Limite a ciclones tropicais cuja velocidade máxima não ultrapasse este valor | Nós |
ativo | curto/int16 | 2 | Limitar-se a ciclones tropicais activos, inactivos ou ambos.active=1 retorna ciclones tropicais ativos, active=0 retorna ciclones inativos.Qualquer outro valor retorna ativo e inativo. | |
nome | corda | vazio | Limite a ciclones tropicais cujo campo name contém a sequência especificada. | |
organizar | corda | desc | classifique os ciclones tropicais em ordem crescente ( asc ) ou decrescente ( desc ) com base em seu ID (hora de início efetiva) |
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
}
]
}
]
propriedade | tipo | unidade | Coluna IBTrACS | descrição |
---|---|---|---|---|
eu ia | corda | n / D | SID | Identificador de Tempestade |
nome | corda | n / D | NOME | Um nome fornecido pela agência. Isso pode mudar com o tempo. |
ativo | booleano | n / D | n / D | Se a tempestade está ativa ou não. |
velocidade máxima | interno | Nós | n / D | A velocidade máxima que a tempestade atingiu durante sua vida. |
primeiro ativo | longo | Segundos UNIX | ISO_TIME | A primeira vez que esta tempestade foi observada ativa. |
últimoAtivo | longo | Segundos UNIX | ISO_TIME | A última vez que esta tempestade foi observada ativa. |
pontos de dados | variedade | n / D | n / D | Uma matriz que contém alguns dados da tempestade em diferentes momentos |
propriedade | tipo | unidade | Coluna IBTrACS | descrição |
---|---|---|---|---|
lat | flutuador | graus norte | LAT | A latitude neste carimbo de data/hora. |
muito | flutuador | graus leste | LONGO | A longitude neste carimbo de data/hora. |
tempo | longo | Segundos UNIX | ISO_TIME | O carimbo de data/hora UNIX deste ponto de dados. |
tempestadeVelocidade | interno | Nós | TEMPESTADE_VELOCIDADE | A velocidade da tempestade neste carimbo de data/hora. |
velocidade do vento | interno | Nós | EUA_WIND | A velocidade do vento neste carimbo de data/hora. |
gato | interno | Nós | TEMPESTADE_VELOCIDADE | A categoria da escala Saffir-Simpson desta tempestade neste carimbo de data/hora. -5 = Desconhecido [XX] -4 = Pós-tropical [EX, ET, PT] -3 = Distúrbios diversos [WV, LO, DB, DS, IN, MD] -2 = Subtropical [SS, SD] Sistemas tropicais classificados com base na velocidade do vento [TD, TS, HU, TY,, TC, ST, HR] -1 = Depressão tropical (W<34) 0 = Tempestade tropical [34 2 = Categoria 2 [83<=W<96] 3 = Categoria 3 [96<=W<113] 4 = Categoria 4 [113<=W<137] 5 = Categoria 5 [W >= 137] |
dist2land | interno | quilômetros | DIST2LAND | Distância para pousar a partir da posição atual. Inclui todos os continentes e ilhas com mais de 1.400 km^2. |
(1 nó = 1,852 km/h | 1,151 mph)
Para obter informações sobre as colunas IBTrACS, clique aqui.