2025-02-21 14:24:05 +08:00

89 lines
2.8 KiB
Python

from io import BytesIO
from quart import Blueprint, request, send_file
from matplotlib import pyplot as plt
from modules.cosmic.gravityw_multiday import GravityMultidayPlot
from modules.cosmic.gravityw_perday import CosmicGravitywPlot
from modules.cosmic.planetw_daily import cosmic_planetw_daily_plot
from quart.utils import run_sync
cosmic_module = Blueprint("Cosmic", __name__)
@cosmic_module.route('/metadata')
def get_meta():
return []
@cosmic_module.route('/render/planet_wave/daily')
@cosmic_module.route('/temp_render')
async def render():
T = request.args.get("T", 16)
k = request.args.get("k", 1)
await run_sync(cosmic_planetw_daily_plot)(T=int(T), k=int(k))
buf = BytesIO()
plt.savefig(buf, format="png")
buf.seek(0)
return await send_file(buf, mimetype="image/png")
@cosmic_module.route('/render/gravity_wave/perday')
@cosmic_module.route('/render/single')
async def single_render():
year = request.args.get("year", 2008)
day = request.args.get("day", 1)
mode = request.args.get("mode", "mean_ktemp_Nz")
lat_range = request.args.get("lat_range", "30.0 ~ 40.0")
lat_range = tuple(map(float, lat_range.split("~")))
p: CosmicGravitywPlot = await run_sync(CosmicGravitywPlot)(
year=int(year), day=int(day), lat_range=lat_range)
if mode == "mean_ktemp_Nz":
await run_sync(p.plot_results_mean_ktemp_Nz)()
elif mode == "mean_ktemp_Ptz":
await run_sync(p.plot_results_mean_ktemp_Ptz)()
else:
raise ValueError("Invalid mode")
buf = BytesIO()
plt.savefig(buf, format="png")
buf.seek(0)
return await send_file(buf, mimetype="image/png")
@cosmic_module.route("/render/gravity_wave/multiday")
async def multiday_render():
year = request.args.get("year", 2008)
start_day = request.args.get("start_day", 1)
end_day = request.args.get("end_day", 204)
mode = request.args.get("mode", "位温分布")
lat_range = request.args.get("lat_range", "30.0 ~ 40.0")
lat_range = tuple(map(float, lat_range.split("~")))
p: GravityMultidayPlot = await run_sync(GravityMultidayPlot)(
year=int(year),
day_range=(start_day, end_day),
lat_range=lat_range
)
if mode == "浮力频率均值":
await run_sync(p.plot_heatmap_tempNz)()
elif mode == "不同高度下的逐日统计分析":
await run_sync(p.plot_heatmap_tempPtz)()
elif mode == "每月浮力频率变化趋势":
await run_sync(p.plot_floatage_trend)()
elif mode == "每月平均重力势能的折线图":
await run_sync(p.plot_monthly_energy)()
elif mode == "每月平均N^2的折线图":
await run_sync(p.plot_monthly_tempNz)()
else:
raise ValueError("Invalid mode")
buf = BytesIO()
plt.savefig(buf, format="png")
buf.seek(0)
return await send_file(buf, mimetype="image/png")