matlab SPEI干旱指数计算 nc tif各种 数据多个时间尺度 2000到2023年 1/3/6/12 尺度一、代码整体概述本次整理的MATLAB代码集围绕SPEI标准化降水蒸散指数干旱指数计算与基于游程理论的灾害事件提取展开支持NC、TIF等多种数据格式的输入与输出涵盖多时间尺度如1个月、3个月、12个月等的干旱指数计算以及干旱灾害事件的识别、合并、属性统计等核心功能。代码集分为两大核心模块SPEI指数计算模块与灾害事件提取模块各模块相互独立又可协同工作适用于气象干旱监测、灾害风险评估等相关研究场景。二、核心模块详解一SPEI指数计算模块1. 模块功能定位该模块的核心功能是基于降水Precipitation和潜在蒸散发PET数据通过水分平衡方程降水-潜在蒸散发计算水分亏缺/盈余序列再经概率分布拟合与标准化处理得到SPEI指数用于量化干旱的强度、持续时间等特征。支持全球或区域尺度、多时间尺度的SPEI计算输出结果可保存为NC或TIF格式便于后续空间分析与可视化。2. 关键代码文件说明该模块包含多个功能相似但适配不同数据场景的代码文件核心文件及差异如下表所示代码文件适配数据场景核心特点适用场景Untitled - 副本.m单年NC格式降水tp变量、PETpev变量数据支持闰年处理含区域掩膜功能输出TIF格式区域尺度、短期1-2年SPEI计算Untitled.m多年合并NC格式降水数据、单年NC格式PET数据支持批量读取多源NC文件可调整数据分辨率裁剪多时间序列、中等尺度SPEI计算Untitled1-12.m/Untitled1-12 - 副本.m单年/多年NC数据支持自定义时间尺度scale参数核心优化时间尺度配置支持1-12个月灵活调整多时间尺度对比分析场景gobalSPEI.m/gobalSPEI1.m全球尺度NC数据1801×3600/3600×7200分辨率支持全球范围数据处理优化数据维度转换permute/flipud全球干旱格局分析speiCN.m/speiCN_1012.m单图层TIF格式降水、PET数据直接读取TIF地理信息保持空间参考一致性区域精细化干旱监测如省级、市级尺度spei.m无独立数据输入仅提供SPEI计算核心算法实现SPEI指数计算的数学逻辑为其他文件提供函数支持作为子函数被其他SPEI计算文件调用readAstiff.m/readTmax.mNC格式PET/气温tmax数据将NC数据转换为TIF格式支持批量导出数据格式预处理为TIF输入场景提供数据准备3. 核心计算流程1数据预处理数据读取通过ncread函数读取NC文件中的降水tp/pre变量、潜在蒸散发pev/etp变量数据或通过geotiffread读取TIF格式数据获取经纬度、时间等辅助信息。闰年处理通过判断年份是否为闰年mod(year,4)0mod(year,100)~0或mod(year,400)0确定每月天数数组c用于降水和PET数据的月尺度累积计算。单位转换将降水数据从“m/s”转换为“mm/月”pre1(:,:,k)1000c(k)PET数据同理部分文件含负号调整适配数据存储格式差异。区域掩膜通过inpolygon函数结合矢量边界.shp文件生成掩膜矩阵gz_mask将研究区域外的数据设为NaN实现区域裁剪。数据维度调整通过rot90旋转、permute维度置换、flipud上下翻转等函数统一数据的经纬度排列顺序确保空间一致性。2水分平衡计算通过wb1pre2-pet2计算每月水分平衡序列其中pre2为预处理后的降水数据pet2为预处理后的PET数据水分平衡值为负表示存在水分亏缺潜在干旱。3SPEI指数核心计算调用spei.m函数时间尺度累积根据scale参数如3表示3个月尺度对水分平衡序列进行滑动窗口累积得到scale尺度的水分亏缺/盈余序列newx。概率分布拟合对累积后的序列newx排序计算累积概率Fi并通过Gamma分布拟合得到参数a形状参数、b尺度参数、r位置参数。标准化转换将Gamma分布的累积概率转换为标准正态分布Z分布得到最终的SPEI指数。当f(j)0.5时采用正向标准化公式当f(j)0.5时采用反向标准化公式确保指数符合正态分布特性均值为0标准差为1。4结果输出TIF格式输出通过georasterref创建地理参考对象结合经纬度范围如全球范围Latlim[-90 90], Lonlim[-180 180]使用geotiffwrite将每月SPEI结果保存为TIF文件文件名含年份和月份信息如2000_01.tif。NC格式输出部分文件支持通过nccreate和ncwrite函数创建NC文件将SPEI数据按“经度×纬度×时间”维度存储便于后续大尺度数据共享与分析。4. 关键参数说明参数名含义取值范围/示例作用year1/year2计算起始年/结束年1982、2000-2022等限定数据处理的时间范围location1/location2/location3降水/PET数据路径/结果输出路径F:\SPEI\data\TP\指定数据读取和结果保存位置scaleSPEI计算时间尺度1、3、6、12等单位月控制干旱监测的时间跨度如scale3表示季尺度干旱gz_mask区域掩膜矩阵逻辑矩阵true/false或数值矩阵1/NaN实现研究区域裁剪排除无关区域数据c每月天数数组平年[31 28 31 ... 31]闰年[31 29 31 ... 31]用于月尺度降水和PET数据的累积计算二灾害事件提取模块1. 模块功能定位该模块基于游程理论Run Theory从SPEI指数时间序列中识别干旱灾害事件支持间隔1个时间单位如1个月的灾害事件合并并统计每个灾害事件的开始时间、结束时间、持续时间、严重性、强度等核心属性为干旱灾害风险评估提供量化依据。2. 关键代码文件说明代码文件版本迭代核心功能差异点DisasterEventExtra原始.mVersion 12021.3.11、Version 22021.3.15基础灾害事件提取支持无灾害事件场景处理不支持灾害事件合并仅识别连续干旱事件DisasterEventExtra_Version.mVersion 32022.1.17新增灾害事件合并功能含两个核心函数支持间隔1个时间单位的灾害事件合并功能更完善游程理论提取灾害事件示例.mVersion 12021.3.15测试代码演示灾害事件提取流程提供测试数据和调用示例便于快速上手3. 核心函数详解1Get_Interval_Index(DS_Array, threshold_value)函数功能识别两个干旱灾害事件间隔为1个时间单位的间隔位置索引。输入参数DS_Arrayn×3矩阵存储灾害数据时间序列列1年列2月列3SPEI指数。threshold_value灾害事件识别阈值如-0.5SPEI≤该值判定为干旱状态。输出参数Interval_Index间隔位置索引数组若不存在符合条件的间隔则返回NaN。核心逻辑1. 筛选SPEI指数≤阈值的索引index_ds剔除持续时间为1个月的孤立干旱点。2. 识别连续干旱事件的开始和结束索引计算相邻两个干旱事件的间隔时间。3. 提取间隔时间为1个月的位置索引作为后续事件合并的依据。2DisasterEventExtra(DS_Array, threshold_value, interval_index)函数功能提取干旱灾害事件并统计属性支持间隔1个时间单位的事件合并。输入参数DSArray同GetInterval_Index函数。threshold_value灾害识别阈值。intervalindexGetInterval_Index函数输出的间隔索引。输出参数dseventproperties_table表格形式的灾害事件属性统计结果包含10个字段如下表。字段名含义数据类型示例EventCount灾害事件总数整数5StIndex事件开始位置索引整数2EdIndex事件结束位置索引整数4StYr事件开始年份整数2019StMt事件开始月份整数2EdYr事件结束年份整数2019EdMt事件结束月份整数4Duration事件持续时间月整数3Severity事件严重性SPEI指数累积和浮点数-3.2Intensity事件强度SPEI指数平均值浮点数-1.07核心逻辑1. 若存在间隔1个时间单位的事件将间隔位置的SPEI值重新赋值1000*threshold_value实现事件合并。2. 筛选持续时间≥2个月的干旱事件剔除孤立干旱点识别每个事件的开始和结束索引。3. 计算每个事件的持续时间结束索引-开始索引1、严重性SPEI累积和、强度SPEI平均值。4. 若无干旱事件所有属性字段设为-99缺失值标记。4. 模块使用流程准备输入数据构建n×3的ds_array矩阵包含年、月、SPEI指数信息。设置灾害识别阈值如threshold -0.5可根据研究需求调整阈值越小表示干旱判定越严格。调用GetIntervalIndex函数获取间隔索引IntervalIndex GetIntervalIndex(dsarray, threshold)。调用DisasterEventExtra函数提取灾害事件dseventproperties DisasterEventExtra(dsarray, threshold, IntervalIndex)。查看结果通过disp(dseventproperties)输出灾害事件统计表格。三、数据格式与兼容性说明一输入数据格式NC格式- 降水数据变量名支持tp全球数据常用、pre区域数据常用单位为“m/s”或“mm”。- PET数据变量名支持pev、etp单位为“m/s”或“mm”。- 必备维度经度longitude/lon、纬度latitude/lat、时间time月尺度。TIF格式- 单图层TIF每个文件对应单个月份的降水或PET数据文件名需包含年份和月份信息如pre198201.tif。- 地理信息需包含经纬度范围、投影信息通过geotiffinfo可读取。矩阵格式- 灾害事件提取模块支持n×3矩阵输入列1为年列2为月列3为SPEI指数。二输出数据格式SPEI计算结果- TIF格式每个文件对应单个月份的SPEI数据保留原始地理参考可直接导入ArcGIS、QGIS等软件进行空间分析。- NC格式支持“经度×纬度×时间”三维数据存储适用于大尺度、长时间序列数据共享。灾害事件结果- MATLAB表格table格式便于后续统计分析如计算平均持续时间、最大强度等可通过writetable函数导出为CSV格式。三兼容性说明运行环境MATLAB R2018b及以上版本需支持array2table、georasterref等函数。工具箱依赖需安装“Mapping Toolbox”用于地理参考处理、“NetCDF Toolbox”用于NC文件读写。数据分辨率适配支持从区域尺度如1082×1437像素到全球尺度如3600×7200像素的不同分辨率数据处理可通过调整数据裁剪范围如prepre(1082:1437,735:1352,:)适配不同研究区域。四、版本迭代与功能优化说明一SPEI计算模块版本迭代版本迭代时间核心优化点Version 12021年3月实现基础SPEI计算功能支持NC数据输入和TIF输出Version 22022年1月新增多时间尺度配置scale参数优化数据维度转换逻辑Version 3后续迭代支持全球尺度数据处理新增TIF格式直接输入完善掩膜功能二灾害事件提取模块版本迭代版本迭代时间核心优化点Version 12021年3月11日实现基础灾害事件提取支持事件属性统计Version 22021年3月15日优化无灾害事件场景处理避免程序报错Version 32022年1月17日新增间隔1个时间单位的灾害事件合并功能提升事件识别准确性五、使用注意事项与常见问题解决一使用注意事项数据路径设置所有代码中的location1、location2、location3需根据实际文件存储路径修改路径末尾需保留反斜杠如F:\SPEI\data\TP\避免文件读取失败。阈值选择灾害事件识别阈值threshold需根据研究区域的气候特征调整例如干旱频发区域可设为-0.8湿润区域可设为-0.3。数据质量控制输入数据需提前处理缺失值如将无效值设为NaN避免影响SPEI计算结果的准确性。时间尺度选择scale参数的选择需匹配研究目的如短期干旱监测1-3个月、季节性干旱监测6个月、长期干旱监测12个月。二常见问题解决NC文件读取失败- 检查变量名是否匹配如降水数据变量名是否为tp或pre可通过ncdisp(ncFilePath1)查看NC文件的变量信息。- 确保NC文件的维度顺序经度×纬度×时间与代码一致若不一致需通过permute函数调整。TIF文件地理信息丢失- 读取TIF数据时需同时获取地理参考对象R和信息结构体info输出时通过geotiffwrite(filename1,data, R, GeoKeyDirectoryTag, info.GeoTIFFTags.GeoKeyDirectoryTag)保留地理信息。灾害事件合并失败- 检查GetIntervalIndex函数的输出Interval_Index是否为有效数组若为NaN表示无符合合并条件的事件属正常情况。程序运行缓慢- 全球尺度或高分辨率数据处理时可通过parpool函数开启并行计算部分代码已预留并行计算接口提升运行效率。六、总结本代码集实现了SPEI干旱指数从计算到灾害事件提取的全流程自动化处理支持多数据格式、多时间尺度、多研究区域的灵活适配核心优势如下功能完整性涵盖数据预处理、SPEI计算、结果输出、灾害事件识别与属性统计等全环节。灵活性强支持NC/TIF多种数据格式输入输出可通过参数调整适配不同时间尺度和研究区域。稳定性高优化了无灾害事件、数据缺失等特殊场景的处理逻辑避免程序报错。实用性强输出结果可直接用于干旱监测、风险评估等研究支持空间分析与统计分析结合。适用于气象学、地理学、生态学等领域的科研人员开展干旱相关研究也可作为教学案例用于MATLAB数据处理与灾害监测算法学习。matlab SPEI干旱指数计算 nc tif各种 数据多个时间尺度 2000到2023年 1/3/6/12 尺度