streamlit 快速搭建芝加哥雨型应用

目的

通过streamlit快速搭建芝加哥雨型应用,该应用实现以下功能:

  • 内置重庆各区县的暴雨强度计算公式,
  • 支持自定义城市的暴雨公式参数,
  • 支持雨型生成,输出图片和文字
  • 提供降雨历时、汇水面积、径流系数输入,支持径流量计算
  • 在线部署,网页使用。

原型

用 obsidian excalidraw 简单绘制原型。

image.png

主要原理

主要功能实现

雨强计算

def intensity(A, B, C, N, t, P):
    """
    雨强计算。
    参数:
    - a,b,c,n: 参数。
    - p (float): 设计重现期(单位:年)。
    - t (np.ndarray): 分钟数组
    返回:
    - its: 雨强(单位:mm/min)。
    """
    a = A * 0.4 * (1 + C * math.log10(P))
    its = a * ((1 - N) * t + B) / np.power(t + B, N + 1)
    return its
    
q = (A * (1 + C * math.log10(P))) / ((duration_minutes + B) ** N)

雨强分布计算

def rainCalc_single_period(A, B, C, N, T: int, p: float, peak_ratio: float):
    """
    计算单一时段内的降雨强度分布。
    参数:
    - T (int): 降雨持续时间(单位:分钟)。
    - p (float): 设计重现期(单位:年)。
    - peak_ratio (float): 雨强峰值所在时间占总降雨历时的比例。
    返回:
    - np.ndarray: 随时间变化的降雨强度数组(单位:mm/min)。
    内部参数:
    - t (np.ndarray): 分钟数组
    - peak_time (float): 峰值时间
    """
    # ...函数实现代码...
    t = np.arange(0, T)
    peak_time = T * peak_ratio
    itAr = np.zeros(len(t))
    # 计算雨强
    for i in range(len(t)):
        if t[i] < peak_time:
            itAr[i] = intensity(A, B, C, N, (peak_time - t[i]) / peak_ratio, p) / 60
        else:
            itAr[i] = intensity(A, B, C, N, (t[i] - peak_time) / peak_ratio, p) / 60
    return itAr

其余功能实现较为简单,项目所有代码均开源在 GitHub,有兴趣的可以去参观,点个 star 最好了,仓库如下:
maoyu92/Chicago_rain_pattern (github.com)
如果发现代码有不对的地方,也留言提醒我一下。

应用部署

Streamlit 是非常好用的一个应用框架,支持免费部署一个应用,非常方便。

部署 GitHub

应用部署在 GitHub。通过 git 将本地仓库部署在 GitHub 上,具体方法可参考:
在vscode中使用git-新手向_新手vscode git-CSDN博客
这里跳过。

Streamlit 应用发布

登录 Streamlit,登录后点击右上角 create app。
选择 I have an app。
image.png

在连接上自己的 GitHub 后,依次选择仓库地址,分支,主文件,定义 url 名称,点击 depoly。
image.png

稍等片刻,如果一切顺利就成功了,就非常丝滑。

注意事项

  1. 仓库文件需要包括 requirement.txt,为项目运行需要的环境。
  2. 注意代码引用文件需要用相对应用的方式,不要绝对引用。

成果预览

网址:Streamlit (chicagorainpattern-meuiz8zrvbesh32nfm9iv7.streamlit.app)

image.png

关于

微信公众号:环境猫er
个人博客:https://maoyu92.github.io/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

细节处有神明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值