- 积分
- 3799
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2015-7-6
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 Lighting 于 2017-3-3 16:00 编辑
自从之前在一个求闪电数据处理程序的帖子中回复了之后就陆续有人给我发消息索要此程序,因此为了节省大家的时间,特把程序开贴共享。
当然,如果只是单纯的分享这个程序的话是有点小题大做了。由于我经常接触闪电数据,需要处理的数据也挺多,然而闪电数据的格式也有多种,因此这一个程序只适用于一种格式的闪电数据。为了方便大家,也为了以后自己遇到其他格式闪电数据时不再临时编写程序,打算继续编写其它格式的数据处理程序(打算写一个小的函数包),但是有些格式的数据我并没有!
因此,如果你需要处理闪电数据,而且有不同的需求,那么你可以把你的闪电数据的一小部分(只需每月数据的2-5个文件即可,当然你也可以只发两个文件给我)发给我,我来写程序,然后共享给大家。
==================================================
邮箱:lybravo@126.com
==================================================
附件是此次共享的程序。需要说明的一点是:由于程序编写时间较长,而且是刚学matlab的时候写的,因此程序可能有些繁琐,一致以来也没有进行优化(是我比较懒),借着这次机会,会抽时间优化程序,并继续编写其它的程序。
此程序处理的闪电数据格式: 符合国家气象局ICS 07.060行业标准的闪电数据,即ADTD数据。
当然,你也可以不使用matlab。surfer版中程贤甫老师共享了闪电数据处理的小程序及其使用说明。见下面链接:
http://bbs.06climate.com/forum.php?mod=viewthread&tid=28854&extra=page%3D1%26filter%3Dtypeid%26typeid%3D22
surfer作图辅助程序
==================== 2016.3.7 ======================================
最近把之前上传的程序重新写了一下,现在上传部分程序,还有一些数据的没完善好。
建议在处理数据之前先运行chedata程序,进行数据完整性的检测,以防运行到一半因为一些文件错误导致程序终止(已被闪电数据的各种错误折腾的不行了)。
目前支持两种类型的闪电数据,支持的格式在getdata程序中已经给了示例。
comall程序用于把处理之后的多个文件合并为一个,当然这些都可以更改。理论上来说这个程序适合合并任意文件,不仅是闪电数据文件。
如果你不想让getdata程序一个个文件的输出结果,你也可以更改为一次性输出到一个文件中。
gridize程序用于在画图之前统计每个格点发生了多少次闪电。
大家如果在使用过程中遇到了什么问题,欢迎反馈。当然,如果你想更改源程序的话,也是很欢迎的,也欢迎你把更改之后的程序共享出来。
绘图的程序暂时就不写了。
====================2016.4.11=====================================
添加了部分程序(其中给出了两个绘图程序和计算闪电频率的函数),并对其中的部分程序进行了优化。感谢进行测试并提供了反馈的朋友。后期会继续对其中的函数进行一定的优化并添加部分功能。
PS:考虑到很多人可能对MATLAB并不是非常了解,打算设计个GUI(surfer版的程贤甫老师已经提供了一个小工具,大家可以去找一下相应的帖子),当然,目前也只是打算,不知什么时候才能成为现实(主要还是有点懒散了=_=)。
==================================================================
写在最后:可能有些人要处理的只是国内闪电定位系统的数据,并不会牵扯到卫星数据,当然,有些人会涉及到卫星闪电数据的处理(想必涉及到处理卫星数据的应该都是大神级的了)。如果你要处理的闪电的卫星数据,可以在此提出,如果时间精力允许的话,可以进一步编写卫星闪电数据处理的程序。
==================2016.7.14=================
很久没有更新这个程序了,近来发现又有人需要这个程序,重新整理了一下其中的部分代码(运行部分变化不大,主要是把注释改了)。如果你之前下载了,使用中没有发现问题的话,可以不用重复下载。之前的程序已经删除,修改之后的已上传。
==================2016.11.23================
更新了chedata程序,添加了检测经纬度缺失时的情况,建议在处理ADTD格式数据时先进行数据完整性检查。getflash程序可将processData中部分程序部分为以下语句。同时感谢@gumblear 的反馈。
- if proll
- proexpr = '省:\w+';
- lonexpr = '纬度=\d+';
- latexpr = '经度=\d+';
- fid = fopen([filepath,files(i,1).name]);
- filine = fgetl(fid);
- tf1 = regexp(filine, proexpr, 'match');
- tf2 = regexp(filine, lonexpr, 'match');
- tf3 = regexp(filine, latexpr, 'match');
- if isempty(tf1) || isempty(tf2) || isempty(tf3)
- error('请检查数据完整性!运行chedata程序检查具体错误!')
- end
- end
复制代码
======================2017.3.3=====================
鉴于ADTD数据并不没有统一的格式规范,下面提及一点,对于ADTD闪电定位数据,只要不是数据记录出错的问题,对于不同的格式,比如有些没有给定省份,区县等信息的,或是缺少一些其他信息的,只要更改 getflash 主程序的其中几行进行适应即可。
下面说一下可以根据数据不同进行更改的部分:
下面这部分代码是 getflash 程序中的 processData函数中的部分
- for i = 1:file_num
- fid = fopen([filepath,files(i,1).name]);
- if fid
- if proll
- proexpr = '省:\w+';
- lonexpr = '纬度=\d+';
- latexpr = '经度=\d+';
- fid = fopen([filepath,files(i,1).name]);
- filine = fgetl(fid);
- tf1 = regexp(filine, proexpr, 'match');
- tf2 = regexp(filine, lonexpr, 'match');
- tf3 = regexp(filine, latexpr, 'match');
- if isempty(tf1) || isempty(tf2) || isempty(tf3)
- error('请检查数据完整性!运行chedata程序检查具体错误!')
- end
- end
- if proll
- file_data = textscan(fid,'%d %s %s 纬度=%f 经度=%f 强度=%f %s 误差=%f %s 省:%s %s %s');
- else
- file_data = textscan(fid,'%d %s %s 纬度=%f 经度=%f 强度=%f %s 误差=%f %s');
- end
- len = length(file_data{:,1}); % 文件数据行数
- datestr = cell(len,1); % 原始日期
- oritime = datestr; % 原始时间
- for j = 1: len
- if (proll && strcmp(file_data{1,10}{j,1},p.Results.provinces)) || (~proll)
- datestr{j,1} = file_data{1,2}{j,1}; %日期字符串
- [Y,M,D] = datevec(datestr{j,1}); %转换后的日期向量
- data.datedata(n,:) = [Y,M,D];
- oritime{j,1} = file_data{1,3}{j,1};
- [~,~,~,H,~,~] = datevec(oritime{j,1});
- data.timedata(n,1) = H;
- data.latd(n,1) = file_data{1,4}(j,1); %纬度
- data.lond(n,1) = file_data{1,5}(j,1); %经度
- data.strong(n,1) = file_data{1,6}(j,1); %强度
- data.err{n,1} = file_data{1,7}(j,1); %误差
- if proll
- data.county{n,1} = file_data{1,11}{j,1}; %区县
- end
- n = n+1;
- end
- end
- fclose(fid);
- if ~mod(i,1)
- fprintf('Now, %d file(s) have processed!\n',i);
- end
- else
- error('Fail to open!');
- end
- end
复制代码
根据数据缺失成分的不同,适当的修改 textscan 命令行格式化部分即可,然后根据读取到 file_data 中的数据修改存储到 data 结构体中的变量即可。
以上部分需要熟悉 textscan 命令。其余的部分暂时没有影响。
|
评分
-
查看全部评分
|