精华内容
下载资源
问答
  • 但是,由于系统误差或者人为因素,原始的降雨数据常常包含许多误差和不一致性,因此在使用降雨量数据进行分析前,必须对其可靠性进行严格验证。 在2020年11月27日QGIS开放日直播视频中,Ujaval Gandhi演示了使用...

    降雨量是最常见的水文气象变量,是许多水文应用(例如径流计算、洪水预报以及结构工程设计)不可或缺的基础数据。但是,由于系统误差或者人为因素,原始的降雨数据常常包含许多误差和不一致性,因此在使用降雨量数据进行分析前,必须对其可靠性进行严格验证。

     

    在2020年11月27日QGIS开放日直播视频中,Ujaval Gandhi演示了使用QGIS表达式,通过与邻近站点进行比较来识别可疑降雨量观测值的空间方法验证降雨数据空间同质性,所讲解的方法和解决问题的思路使我收获颇丰,特整理出来与大家分享。

     

     

     01 降雨量观测数据检测

     

     

    • 降雨数据的空间相关性

     

    降雨表现出一定程度的空间一致性。降雨测量的空间相关性取决于以下因素:

     

    • 持续时间(较短持续时间的相关性较小);

    • 距离(与距离增加的相关性较小);

    • 降水类型(对流降水的相关性较小);

    • 地形(与丘陵地形的相关性较小)。

     

    • 最近邻算法

     

    假设降雨数据在较长的时间内进行汇总后,在较短距离内显示出一定的空间相关性。因此,可以对检测站点的降雨量测量值与相邻站点测量值做同质性验证,这是最近邻算法验证降雨量数据的基础,具体描述如下:

     

     

    根据周围站点观测到的降雨量加权平均值,计算得出待检测站点降雨量的估算。如果观测值和估计值之间的误差超过预设的阈值,则认为该待检测站点的观测值可疑,将其标记以进一步调查其误差产生的可能原因。

    ——印度NHP降雨数据验证手册

     

     

    • QGIS实现最近邻算法

     

    在QGIS中,最近邻算法可按以下步骤进行:

     

    • 识别邻近站点;

    • 计算待检测站点到邻近站点的距离;

    • 根据降雨量估算值标识可疑观察站点;

       

     02 操作步骤

     

    • 获取示范数据

     

    本文中使用2020年6月佛罗里达州的降水数据为示范,来自全球历史气候学网络(GHCN)。

     

    示范数据的下载地址:

     

    链接:https://pan.baidu.com/s/1ufEwdqtmK0vMz9G1EFbZ-g

    提取码:of8q

     

     

    • 识别和选择邻近观测站

     

    选择邻近观测站必须满足以下条件:

     

    • 待测站点与相邻站点之间的距离必须小于指定的最大相关距离,例如Rmax为10(km);

    • 最多考虑8个邻近观测站;

    • 为了减少选择中的空间偏差,以待测试站的为中心,每个象限内最多选择两个邻近观测站点。

     

     

    在示范数据中,点图层ghcn_stations包含佛罗里达州降雨量观测站的位置,使用aggregate()函数,查找10km(Rmax)范围内的相邻8个站点。

     

    具体操作如下:图层面板中选中ghcn_stations,点击工具栏的【字段计算器】按钮,新建字符型字段“neighbors”,输入表达式:

     

    array_to_string(array_slice(array_remove_all(aggregate(layer:= 'ghcn_stations',aggregate:='array_agg',expression:="NAME",filter:=distance($geometry, geometry(@parent)) < 10000,order_by:=distance($geometry, geometry(@parent))), "NAME"), 0, 7))

     

     

    上面表达式将查找距离待检测站点10公里以内最多8个邻近站点。

     

     

    为了保证每个象限最多选择2个站点,在属性表中增加4个新字段:Q1、Q2、Q3、Q4,分别存储第一、第二、第三和第四象限站点名称,使用字段计算器更新,其计算表达式如下:

     

    Q1

     

    array_to_string(array_slice(array_remove_all(aggregate(layer:= 'ghcn_stations',aggregate:='array_agg',expression:="NAME",concatenator:=',',filter:=distance($geometry, geometry(@parent)) < 10000 andangle_at_vertex(make_line(geometry(@parent), $geometry), 0) >=0 andangle_at_vertex(make_line(geometry(@parent), $geometry), 0) < 90,order_by:=distance($geometry, geometry(@parent))), "NAME"), 0, 1))

     

     

    用相同方法依次更新Q2、Q3、Q4,其对应的表达式如下:

    Q2

     

    array_to_string(array_slice(array_remove_all(aggregate(layer:= 'ghcn_stations',aggregate:='array_agg',expression:="NAME",concatenator:=',',filter:=distance($geometry, geometry(@parent)) < 10000 andangle_at_vertex(make_line(geometry(@parent), $geometry), 0) >=270 andangle_at_vertex(make_line(geometry(@parent), $geometry), 0) < 360,order_by:=distance($geometry, geometry(@parent))), "NAME"), 0, 1))

     

    Q3

     

    array_to_string(array_slice(array_remove_all(aggregate(layer:= 'ghcn_stations',aggregate:='array_agg',expression:="NAME",concatenator:=',',filter:=distance($geometry, geometry(@parent)) < 10000 andangle_at_vertex(make_line(geometry(@parent), $geometry), 0) >=180 andangle_at_vertex(make_line(geometry(@parent), $geometry), 0) < 270,order_by:=distance($geometry, geometry(@parent))), "NAME"), 0, 1))

     

    Q4

     

    array_to_string(array_slice(array_remove_all(aggregate(layer:= 'ghcn_stations',aggregate:='array_agg',expression:="NAME",concatenator:=',',filter:=distance($geometry, geometry(@parent)) < 10000 andangle_at_vertex(make_line(geometry(@parent), $geometry), 0) >=90 andangle_at_vertex(make_line(geometry(@parent), $geometry), 0) < 180,order_by:=distance($geometry, geometry(@parent))), "NAME"), 0, 1))

     

    验证一下四个象限数据的计算结果:

     

     

    使用字段计算器输入下列表达式将四个象限的字段合并,得到最终的邻近站点名称字符串,更新到“neighbors”字段,并将结果保存到图层stations_with_neighbors中。

     

    neighbors

     

    array_to_string(array_remove_all(array_cat(coalesce(string_to_array(Q1), array()),coalesce(string_to_array(Q2), array()),coalesce(string_to_array(Q3), array()),coalesce(string_to_array(Q4), array())), "NAME"))

     

     

    其中,coalesce() 函数确保在任何象限具有空(NULL)值的情况下表达式能返回正确的结果。

     

    • 计算待测站点与相邻站点的距离

     

    要进行空间均质性检测,需要计算待测站点到每个邻近站点的距离,属性表中新建“distances”字段,使用字段计算器输入表达式如下:

     

    distances

     

     array_to_string(array_foreach(string_to_array("neighbors"), round(distance($geometry, geometry(get_feature('stations_with_neighbors', 'NAME', @element)))/1000, 2)))

     

     

    上面表达式中,array_foreach()函数遍历neighbors字段中每个相邻站点,计算其与待测站点之间的距离,并将计算结果转换为公里为单位,保存到字段“distances”中,将计算距离后的图层保存为station_with_distances。至此,我们得到了进行降雨量观测数据空间均质性分析所需的数据。

     

     

    • 使用QGIS识别可疑观测数据

     

    使用QGIS识别可疑观测数据,需要动态构建统计表达式,并用eval()函数对表达式求值。

     

    首先,打开字段计算器,新增整型“N”字段用于保存邻近点的数量,使用array_length函数求出邻近站点数量:

     

    N

     

    array_length(string_to_array( "neighbors" ))

     

     

    接下来,使用邻近站点的降雨量观测值,结合它们到待检测站点的距离计算反距离加权平均值,得到估计的降水量Pest,表达式如下:

     

    Pest

     

    eval(array_to_string(array_foreach(string_to_array("neighbors"),(1/(distance($geometry,geometry(get_feature('station_with_distances', 'NAME', @element)))/1000)^2)*attributes(get_feature('station_with_distances', 'NAME', @element))['PRCP']),'+'))/eval(array_to_string(array_foreach(string_to_array("neighbors"),(1/(distance($geometry,geometry(get_feature('station_with_distances', 'NAME', @element)))/1000)^2)),'+'))

     

     

    上述表达式创建一个由+字符分隔的字符串,并将其传递给eval(),eval()函数接收字符串,并以表达式执行该字符串,返回计算结果。

     

    用同样方法,计算邻近站点降雨量观测值的均值mean和标准差standard deviation,表达式如下:

     

    mean

     

    eval(array_to_string(array_foreach( string_to_array( "neighbors" ), attributes(get_feature('station_with_distances', 'NAME', @element))['PRCP']), '+')) / "N"

     

    stddev

     

    sqrt(eval(array_to_string(array_foreach( string_to_array( "neighbors" ), (attributes(get_feature('station_with_distances', 'NAME', @element))['PRCP'] - "mean" )^2), '+')) / "N" )

     

     

    我们需要的最终变量是absolute difference,即观测值和估计值之间的差:

     

    absdiff

     

    abs("PRCP" - "Pest")

     

     

    确认降雨量观测数据正常的条件是:

     

    • 观测值与估计值之间的差小于等于75且观测值与估计值之间的差小于等于2个标准差;

    • 或者相邻站点的数量小于2;

    • 或者观测值与估计值之间的差计算结果为空值(NULL)。

     

    运行空间均质性检测并标记降雨观测数据可疑站点:

     

    suspect

     

    CASE WHEN      ("absdiff" <= 75 and "absdiff" <= 2* "stddev")  or "N" <= 2 or "absdiff" is NULLTHEN  'No'  ELSE  'Yes' END

     

     

     03 验证结果

     

    如下图,经过计算,站点ORLANDO 6.8 W反距离加权估计值是170.4,而实测值为98.3,差异过大,被标识为可疑数据,需要具体查找数据异常的原因。

     

     

    版权声明

     

    本文欢迎转载,转载时请注明出处。

     

     

    展开全文
  • 4.计算月降雨量,原始数据为mm/h计算为mm/month。 class ReadAndWrite_Hdf2Tif: def __init__(self,readFilename=None): self.readFilename=readFilename self.hdf = SD(self.readFilename) # 查看HDF文件属性 ...

    下面展示 读取TRMM 3B43类,实现
    1.查看HDF文件属性
    2.查看数据集的属性
    3.读取数据集
    4.计算月降雨量,原始数据为mm/h计算为mm/month。

    class ReadAndWrite_Hdf2Tif:
        def __init__(self,readFilename=None):
            self.readFilename=readFilename
            self.hdf = SD(self.readFilename)
    
    # 查看HDF文件属性
        def read_HDFAttribute(self):
    
            attr = self.hdf.attributes(full=1)
            attrNames = attr.keys()
            attributesList=[]
            for name in attrNames:
                dict={}
                t = attr[name]
                dict={name:t[0]}
                attributesList.append(dict)
            print(attributesList)
            self.hdf.end()
            return attributesList
    
    # 查看数据集的属性
        def read_HDFDatasetAttribute(self):
            #hdf=SD(self.readFilename)
            dSets=self.hdf.datasets()   #以字典形式显示数据集的文件名,行列号
            dsName=dSets.keys()    #为SD.SDS对象
            for name in dsName:
                ds=self.hdf.select(name)
                t=dSets[name]
            print(dSets)
            self.hdf.end()
            return dSets
    
    # 读取HDF数据集
    #     def readHDFData(self,datasetName):
    #         hdf = SD(self.readFilename)
    #         dataset=self.hdf.select(datasetName).get()
    #         return dataset
    
    # 以月降雨量读取TRMM数据
        def readTRMMData(self):
            #hdf = SD(self.readFilename)
            TRMMdataset = self.hdf.select(datasetName).get()
            monthArray=[31,28,31,30,31,30,31,31,30,31,30,31]
            year=int(self.readFilename[self.readFilename.find('.')+1:self.readFilename.find('.')+5])
            month=int(self.readFilename[self.readFilename.find('.')+5:self.readFilename.find('.')+7])
            if year==2008:
                monthArray[1]=29
            im_data=TRMMdataset*monthArray[month-1]*24            #数据单位为mm/hour将数据转为每月降水量
            im_data=np.fliplr(im_data).T                         #数据原点为西南,需要进行数据翻转
            np.putmask(im_data, im_data < 0, None)  # 将小于0数据置为None
            del TRMMdataset
            self.hdf.end()
            return im_data
    
    展开全文
  • 为便于说明,在尼日利亚哈科特港测量的月降雨量由 (5, 1, 0)x(0, 1, 1)12 季节性 ARIMA 模型建模。 时间图没有显示出明显的趋势。 从图中可以清楚地看出已知和预期的季节性。 对数据进行季节性(即 12 点)差分,...
  • 接口官网 ...功能: 基于lbs获取当前位置的降雨概率和降水量数据 如果是个人/学生使用, 可以申请测试量和半价优惠 接口调用简单, 一个URL, GET一下就可以得到json数据了 点击查看返回结果 API地址 ...

    接口官网

    功能: 基于lbs获取当前位置的降雨概率和降水量数据

    如果是个人/学生使用, 可以申请测试量和半价优惠

    接口调用简单, 一个URL, GET一下就可以得到json数据了

    点击查看返回结果

    API地址

    https://www.tianqiapi.com/api/

    GET参数

    参数类型必填备注
    appidString账户ID (点击注册)
    appsecretString账户密钥
    versionString接口标识, 固定值: v11
    lngString经度, 如: 119.545023
    latString纬度, 如: 36.044254
    pointString坐标体系, 默认百度坐标, 如使用高德坐标, 请传参: gaode
    callbackStringjsonp参数, 如: jQuery.Callbacks

    返回JSON结果参考

    {
        "errcode":0,
        "time":"2019-05-31 09:28:00",
        "update_time":"2019-05-31 09:10:00",
        "msg":"雨渐大,60分钟转为中雨,但75分钟后会减弱为小雨",
        "data":[
            {
                "time":"2019-05-31 09:25:00",
                "level":"小雨"
            },
            {
                "time":"2019-05-31 09:30:00",
                "level":"小雨"
            },
            {
                "time":"2019-05-31 09:35:00",
                "level":"小雨"
            },
            {
                "time":"2019-05-31 09:40:00",
                "level":"小雨"
            }
        ]
    }
    

    返回数据说明 (json编码无问题, 可到json.cn里转换查看, 各语言解析方法)

    参数名说明
    errcode接口状态, 0: 正常 100: 雷达数据更新中
    time接口调用时间
    update_time天气预报更新时间
    msg预报信息, 如: 5分钟后开始下小雨
    data详细数值列表
    ┗ time预报时间, 如: 2019-05-31 09:35:00
    ┗ level等级, 如: 大雨

    价格

    使用周期接口价格限制
    按量每次消耗1云豆无  30元=20万次
    一年260元日调用10万次
    永久588元日调用10万次

    对接问题请联系qq 445899710 

    展开全文
  • ERA-Interim数据的API下载请参考:https://blog.csdn.net/weixin_42924891/article/details/85225062 import linecache from ecmwfapi import ECMWFDataServer a = [31,28,31,30,31,30,31,31,30,31,30,31] for i ...

    ERA-Interim数据的API下载请参考:https://blog.csdn.net/weixin_42924891/article/details/85225062

    import linecache
    from ecmwfapi import ECMWFDataServer
    a = [31,28,31,30,31,30,31,31,30,31,30,31]
    for i in range(2018,2019):#年份
        if i%4==0: # 判断闰年
            m=29
        else:
            m=28
        for j in range(1,13):#月份1到12月
            if j==2:
                b = m
            else:
                b = a[j-1]
            if j<10:
                y1 = "0"+str(j)
            else:
                y1 = str(j)
            date = str(i)+"-"+y1+"-01/to/"+str(i)+"-"+y1+"-"+str(b) # 构造日期字符串
            print(date)
            server = ECMWFDataServer()
            try:
                server.retrieve({
                "class": "ei",
                "dataset": "interim",
                "area" : "26/99/24/100", # 下载区域
                "date": date,
                "expver": "1",
                "grid": "0.25/0.25", # 原始数据0.75°×0.75°,插值到了2.5°-0.125°此处选择0.25°×0.25°
                "levtype": "sfc",
                "param": "228.128", # Total precipitation的参数编号228
                "step": "12", # 设置步长(step)
                "stream": "oper",
                "time": "00:00:00/12:00:00", #设置起始时间点 (time)
                "type": "fc", # 累积降雨是预报数据
                "format": "netcdf",        # 数据格式
                "target": "D:/down/"+str(i)+y1+".nc"  #输出位置(左斜线)及文件名
                })
            except Exception as e:
                print(e)
    print("all have done!")

    此处注意,下载的数据为time-time+step这个时间段的累计降雨量,0:00-12:00和12:00-24:00降雨量。刚好是一天的降雨,下面两个时段的降雨量进行求和。涉及到多维数组直接转化为Dataframe数据结构。

    # 导入模块
    from netCDF4 import Dataset
    
    import itertools
    import pandas as pd
    
    from datetime import datetime 
    from datetime import timedelta
    
    df = None
    for i in ['20180%d'%i if i<10 else '2018%d'%i for i in range(1,13)]:
        # 获取数据集中所有变量名
        filename = r'D:\down\%s.nc'%i
        data = Dataset(filename)
    #     variables_name = list(data.variables.keys())
    #     print(variables_name)
        # 注意此处的减去3没有具体含义,为了让数据重采样落入同一天便于统计
        time = [datetime(1900, 1, 1,0,0,0) + timedelta(hours=int(i)-3) for i in data['time'][:]] 
        latitude = data['latitude'][:]
        longitude = data['longitude'][:]
        # 涉及到dataframe的MultiIndex
        data = pd.DataFrame(data['tp'][:].flatten(),index=pd.MultiIndex.from_product([time,latitude,longitude]))
        data = data.mean(level=[0]).resample('D').sum() # 整个45个经纬度点直接求均值,然后日内重采样求和,此处经纬度可以根据需要采用更为精细化的插值方式
        data = data
        if df is None :
            df = data
        else:
            df = pd.concat([df,data],axis=0)
    
    df2 = df*1e3 # 原单位是metre 化为mm

     

    展开全文
  • 使用全国站点的年降雨量数据进行邻近插值后的GIS图
  • 聚类回归分析在降雨量统计数据中的应用.pdf
  • 使用python爬取天气网的数据,并将数据打印出来,主要数据为各个省会城市的降雨量,可以根据具体需求更改。本资源适合新手小白和在校学生,使用前请务必查看说明文档 #资源达人分享计划#
  • 降雨量

    2016-08-11 20:28:00
    我们常常会说这样的话:“X年是自Y年以来降雨量最多的。”,它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年。例如2002、2003、2004和2005年的降雨量分别为4920、5901、2832和3890...
  • 我选择广州2019年降雨量数据进行分析。其中本人不是天文地理专业,不知道"Tr"是什么意思,所以我设置为0。 本人因为年纪较大,学历没有本科。现在在广州做辅警。希望找一份工资较高的工作。 网站因为是西班语,所以...
  • 使用arcgis制作降雨量分布图,根据站点降雨量数据进行差值分析,生成等值线,制作热度图,裁剪栅格步骤,图例横向标注,arcgis制图,标注,教程
  • 数据类型:Excel文件,为12个月的降雨量数据 计算代码:使用pandas模块读取excel文件,进行排序 /* * 版权声明: 暂无 * 文件名称 : Rainfall_Calculate.py * 创建者 : LiaoChaoming * 创建日期: 2019/10/19 * ...
  • 作者:小小明 最近遇到一个有点烧脑的需求,其实也不算烧脑,主要是判断条件过多,对于我这种记忆力差,内存小的人来说容易出现内存溢出导致大脑宕机。...df = pd.read_csv("11月份数据.csv", encodin.
  • 降雨数据 从LCRA显示德克萨斯州中部的降雨量数据 来自数据
  • 降雨量色斑图程序

    2015-01-05 11:52:16
    非常专业的降雨量色斑图程序,值得拥有和收藏
  • 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如...Python数据分析实战:降雨量统计分析报告分析 主要就是要根据左侧的表格自动生成右侧的Word统计报告,实际的各种可能性情况远比图中展示的要更
  • 使用BP神经网络对样本数据(某水库年降雨量监测数据 + 中国铁矿石年进口量监测数据)进行操作,生成需要的训练数据和测试数据。并使用这些数据进行训练处误差小于指定要求的网络,之后可根据界面获取需要预测的年限...
  • 该库包含来自卫星和地面观测系统的关于飓风玛丽亚期间波多黎各降雨量数据和代码。 玛利亚飓风影响波多黎各的全天都有降雨数据代码。 截至2020年3月3日,此存储库仅包含此项目中使用的某些观测系统的数据
  • 2439 降雨量

    2016-08-11 20:26:00
    2439 降雨量 2007年省队选拔赛四川 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 大师 Master 题解 查看运行结果 题目描述Description 我们常常会说这样的话:“X...
  • 先看看需求: ...df = pd.read_csv("11月份数据.csv", encoding='gbk') # 当前统计月份 month = 11 df = df.query('月份==@month') df.head(10) 预览数据: 2.异常数据过滤 查看缺失值数量: p...
  • scoi2007降雨量

    千次阅读 2013-05-05 09:54:59
    1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 1096 Solved: 241 [Submit][Status][Discuss] Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”。它的含义是X...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,991
精华内容 1,596
关键字:

降雨量数据