欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

用泰森多边形法求子流域气象数据

发布时间:2023/12/29 55 豆豆
生活随笔 收集整理的这篇文章主要介绍了 用泰森多边形法求子流域气象数据 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

用泰森多边形法求子流域气象数据 (matlab)

需要先用Arcgis画泰森多边形并求出各面积占比(权重),然后用该matlab脚本计算。

  • 面积占比所在Excel文件格式:三列,分别为站点编号、子流域编号、权重

  • 把各站点数据放在一个目录里,各文件名需要包含站点编号,把目录作为输入。

  • 按注释确定输入,运行。

%% clc;clear;close all;%此脚本用于通过泰森多边形方法求子流域气象数据,输入数据和格式包括:%% 输入 ThiesenResult = xlsread('D:\气象处理\泰森多边形法结果.xlsx','Sheet1'); %三列,分别为站点编号、子流域编号、权重 stationDir = 'D:\evp\'; %站点数据所在的目录(最后有斜杠) subbasinNum = 224; % 子流域数目 dataColNum = 4; % 站点文件中数据所在的列号(在第几列) outputFile = 'Evp_daily.txt';%% 读取所有气象文件信息,并建立对应键值对 h=waitbar(0,'读取数据中...'); stationDataFiles = dir([stationDir '*.txt']); fileNum = length(stationDataFiles); for i=1:fileNumfileName = stationDataFiles(i).name;thisData = load(strcat(stationDir,fileName));thisData(isnan(thisData))=0; %去除NaNallData{i} = thisData;stcdList{i} = fileName(1:5); %% ! ! ! 记得要调整,需要从文件名中截取站点编号(与excel表对应) ! ! ! %%indexList{i} = i;waitbar(i/fileNum) end map = containers.Map(stcdList,indexList); close(h);%% 开始计算 [timeStpes,cols] = size(allData{1}); [interFeatureNums,cols_Thiesen] = size(ThiesenResult); result = zeros(timeStpes,subbasinNum); h = waitbar(0,'正在逐时计算...'); for t = 1:timeStpesfor n = 1:interFeatureNumsstcd = ThiesenResult(n,1);subbasinID = ThiesenResult(n,2);ratio = ThiesenResult(n,3); st_Index = map(num2str(stcd));result(t,subbasinID) = result(t,subbasinID) + allData{st_Index}(t,dataColNum) * ratio; endwaitbar(t/timeStpes) end close(h);%% 输出 h = waitbar(0,'正在输出结果...'); fid=fopen(outputFile,'w'); for t = 1:timeStpesfor n = 1:subbasinNumfprintf(fid,'%.4f \t',result(t,n));endfprintf(fid,'\n');waitbar(t/timeStpes) end fclose(fid); close(h);

总结

以上是生活随笔为你收集整理的用泰森多边形法求子流域气象数据的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。