概要设计
1. 架构设计
系统架构设计如下图:
2. 数据库设计
参照需求,需要如下表来存储对应的台风路径信息。
- 台风信息表,用以存储台风的基本信息;
- 台风实况表,用以存储台风的实况点信息;
- 台风预报表,用以存储台风的预报点信息;
- 台风登陆点信息表,用以存储台风的登录点的信息;
- 预报机构表,用以存储台风预报机构的信息;
- 台风图例表,用以存储台风强度在地图上展示的颜色,同时也是生成图例的数据源。
2.1 台风基本信息表
sql
CREATE TABLE public.typhoon_list
(
id serial NOT NULL,
name character varying(32) NOT NULL,
name_en character varying(32) NOT NULL,
tfbh character varying(12) NOT NULL,
year bigint NOT NULL,
is_current boolean NOT NULL,
land_points character varying(64),
start_time timestamp without time zone,
end_time timestamp without time zone,
PRIMARY KEY (id)
)
2.2 台风实况表
sql
CREATE TABLE public.typhoon_live_info
(
id serial NOT NULL,
tfbh character varying(12),
lon numeric NOT NULL,
lat numeric NOT NULL,
wind_speed numeric,
power numeric,
wind_level numeric,
move_speed numeric,
move_dir character varying(12),
pass_time time without time zone,
circle7 character varying(128),
circle10 character varying(128),
circle12 character varying(128),
strong character varying(32),
PRIMARY KEY (id)
)
2.3 台风预报表
sql
CREATE TABLE public.typhoon_forc_info
(
id serial NOT NULL,
live_id integer NOT NULL,
lon numeric NOT NULL,
lat numeric NOT NULL,
wind_speed numeric,
power numeric,
wind_level numeric,
move_speed numeric,
move_dir character varying(12),
pass_time time without time zone,
circle7 character varying(128),
circle10 character varying(128),
chircle12 character varying(128),
strong character varying(32),
sets character varying(32),
PRIMARY KEY (id)
)
2.4 台风登陆点信息
sql
CREATE TABLE public.typhoon_lands
(
id serial NOT NULL,
tfbh character varying(12) NOT NULL,
lon numeric NOT NULL,
lat numeric NOT NULL,
land_pos character varying(64),
land_time character varying(32),
PRIMARY KEY (id)
)
2.5 预报机构信息
sql
CREATE TABLE public.typhoon_forecast_org
(
id serial NOT NULL,
name character varying(32) NOT NULL,
color character varying(32) NOT NULL,
PRIMARY KEY (id)
)
2.6 图例
sql
CREATE TABLE public.typhoon_legends
(
id serial NOT NULL,
label character varying(64),
value character varying(64),
color character varying(32),
PRIMARY KEY (id)
);
3. 接口设计
需要设计如下接口方可完成需求所涉及功能。
- 根据年份查询台风列表
- 根据台风编号查询路径数据
- 预报机构列表
- 台风图例
- 城市测距列表
3.1 根据年份查询台风列表
根据年份(默认为今年)查询对应年份的台风列表,返回数据格式参考如下:
json
{
"tfbh": "202225",
"ident": "202225",
"name": "帕卡",
"ename": "Pakhar",
"is_current": 0,
"begin_time": "2022-12-11T20:00:00",
"end_time": "2022-12-12T17:00:00",
"land": []
}
3.2 根据台风编号查询路径数据
根据台风编号(必填参数)查询台风实况数据,每一个实况点应包含:实况基本信息、该点预报信息。格式参考如下:
json
[
{
"tfbh": "202203",
"ident": "202203",
"name": "暹芭",
"ename": "Chaba",
"is_current": 0,
"begin_time": "2022-06-30T08:00:00",
"end_time": "2022-07-04T05:00:00",
"land": [
{
"position": "广东电白沿海",
"land_time": "2022-07-02T15:00:00",
"lng": 111.1,
"lat": 21.5
}
],
"points": [
{
"time": "2022-06-29T08:00:00",
"lng": 116.1,
"lat": 15.3,
"strong": "热带低压(TD)",
"power": 7,
"speed": 15,
"move_dir": "北西北",
"move_speed": 10,
"pressure": 1000,
"radius7": 0,
"radius10": 0,
"radius12": 0,
"radius7_quad": {
"ne": 0,
"se": 0,
"sw": 0,
"nw": 0
},
"radius10_quad": {
"ne": 0,
"se": 0,
"sw": 0,
"nw": 0
},
"radius12_quad": {
"ne": 0,
"se": 0,
"sw": 0,
"nw": 0
},
"remark": "",
"forecast": null
}
]
}
]
3.3 预报机构列表
返回预报机构列表,接口返回数据格式如下:
json
[
{color: '#30fc31', label:'中国'},
{color: '#307efa', label:'中国香港'},
]
3.4 台风图例
返回图例列表,接口返回数据格式如下:
json
[
{
"color": "#30fc31",
"label": "热带低压",
"ranges": [
6,
7
]
},
{
"color": "#307efa",
"label": "热带风暴",
"ranges": [
8,
9
]
},
{
"color": "#fffc00",
"label": "强热带风暴",
"ranges": [
10,
11
]
},
{
"color": "#ff9c00",
"label": "台风",
"ranges": [
12,
13
]
},
{
"color": "#fb7cff",
"label": "强台风",
"ranges": [
14,
15
]
},
{
"color": "#fa3030",
"label": "超强台风",
"ranges": [
16,
20
]
}
]
3.5 城市测距列表
入参为实况点经纬度,返回距离实况点最近的前10个城市及距离。返回数据格式如下:
json
[
{"city":"舟山","dis":"1326"},
{"city":"上海","dis":"1339"},
{"city":"南通","dis":"1366"},
{"city":"宁波","dis":"1383"},
{"city":"盐城","dis":"1402"}
]