批量处理FY3-MERSI L1B数据
在RSD交互平台上能处理的所有数据都可以通过写GeoGeo(下称99)脚本语言代码实现批量处理,当然也包括YF3-MERSI L1B数据。事实上,无论是RSD交互平台还是99脚本批处理,RSD对FY3 数据处理都非常完美。
这里演示通过RSD交互平台的脚本窗口执行99脚本解释代码来批量处理FY3-MERSI的250m数据集。
提到99脚本语言,同学们可能会马上想到是不是又要我学什么新语言?不要担心,不是这样的。99脚本解释器基本上遵循了c语言最基本的部分。相信大多数同学大学期间都考过计算机二级考试,其中c/c++ 的考试内容就已经超出了99脚本对计算机语言部分的要求,如果你考过这个计算机二级就足够了。
99脚本没有别出心裁搞自己的一套语法主要是考虑了同学们的接受感受,对繁杂的卫星数据大多是通过函数来实现的,你要做的只是使用基本的程序控制来调用这些函数。所以了解为处理这些复杂数据提供的这些函数的功能才是主要工作,而不是学习一些为了刷存在感的符号。
当然99脚本不是完全和c一致(如果是那样我就没必要再写一套解释程序了),99有好多自有的特点,比方大数据支持能申请几百个G甚至上T的数组,这些数组可以部署在计算机集群上,通过数据的配置回收机制实现大规模运算。99的线程函数可以通过一个简单的thread关键字在本地创建新线程,还可以通过一个process关键字在任意节点机上创建部署进程。99的事件和消息机制可以任意触发和响应来自节点机/主机的控制信息。类似的新概念和技术还有很多。我已经发布了一些参考文档,请参阅****博客https://blog.****.net/gordon3000/article/details/39336569和一些连续的相关博文(2014年的,多年没更新可能个别有出入)。
1 打开脚本窗口
右击主窗口上方工具条空白部分打开“脚本编辑窗口”。同样打开输出窗口,用于输出程序执行结果(如果有)。
2 编辑代码
代码可以直接在脚本编辑窗口编辑输入和保存,也可以用其它字处理软件编辑。如果需要保存就保存文一个扩展名为.c的文件。这样直接就可以在脚本编辑窗口打开。
为批量处理FY3-MERSI数据编辑的99代码如下:
//////////////////////////////////////////////////////////////////////////////////////
// GeoGraph 脚本语言示例代码 ——创建任务
//
// 李国春2012年12月4日
//////////////////////////////////////////////////////////////////////////////////////
main()
{
intb;
intc;
intn;
STRING str;
STRING name;
intnID1 = Open("D:\\MERSI250文件名.txt",1); //待打开文件名的文件
STRING tplname = "G:\\RSDTestData\\LN250M.tpl";
do{
n = Read(nID1,str); //读来一行完整的文件名
if(n != 0)
{
c =CreateMission(tplname);
b =LoadFile(MERSIL1BQKM,str);
b =SwMakeNativeGridLayer(1,"GRID",2);
name = str - '.'; //去掉原来文件名的扩展名+ '.'
name = name + ".tif"; //待保存的新名
GdExportTiffFile(2,name); //将正射校正后的文件保存。表示保存该任务里面的第层
EndMission(c);
}
}while(n); // 循环所有的文件,直至没有更多的文件了。
Close(nID1); //关闭文件名文件
return1;
}
将这部分代码粘贴到脚本编辑窗口。
3 代码意义的解释
第8~12行声明了几个变量,前三个是整型的,后面两个是字符串类型。
第13行打开一个文件,文件名为D:\\MERSI250文件名.txt,这是一个文本文件,里面保存了待打开的FY3-MERSI250m L1B数据集的文件名,99脚本从这个文件逐条读入数据集名称并打开,例如下面的文件内容:
可见第一个文件名为CMA标准的FY3-MERSI 250m L1B数据集,第二个为非CMA标准的数据格式,自有接收机单位(如各省的气象局)有这种数据,RSD对其能够自动识别。
第14行存储了一个框架名称,这里指定的是辽宁省的一个Albers投影的250m框架,数据处理按该框架范围进行。
第15行和27行构成一个循环,将上述文件逐个处理直至完成。
第16行读来一个数据集名。
第19行按框架创建任务。
第20行使用函数LoadFile(MERSIL1BQKM,str)加载FY3-MERRSI 250m L1B数据集。
第21行的SwMakeNativeGridLayer(1,"GRID",2)函数将当前任务的该层(层1)重采样为GRID。函数的第1个参数为层序号,第2个参数是新层名,第3个参数是重采样方式,0为稀疏采样,这里的2为最近邻点法。重采样后自动产生新层(层2)。
第22、23行建立一个待保存数据的新文件名,扩展名为.tif。
第24行GdExportTiffFile(2,name) 函数导出tif文件,第1个参数是待导出层序号。
第25行结束任务,准备下一个文件的处理。
第28行关闭文件名文件。
4 运行代码
点击脚本编辑窗口上方工具栏的小三角即可运行代码。运行结束后可以在文件名指定位置找到导出的.tif文件。
本例导出如下两个文件:
如果你有很多的文件需要批量处理,都写在文件名文件里吧,处理数量是没有什么限制的。
如果需要导出img文件,使用GdExportImgFile函数,并将到处文件的扩展名改为img即可。
5 处理其它数据
99脚本加载数据使用一个称之为数据集识别字的标识符,如第20行的MERSIL1BQKM,表示FY3-MERSI的250mL1B数据集。对于FY3-MERSI 1km L1B数据集,使用标识符 MERSIL1B1KM,同学们可以自行测试。更多的数据集识别字将陆续介绍。
6 更多
99还比较娇嫩,比较难伺候。特意为99设计了断点和单步调试和变量监视功能。
想要设置断点可以点击行号后面位置,出现了一个小方块,这就是一个断点。
看见15行后面的小方块了?如果你点击运行(小三角),运行到这儿就停下了。
15行变成了品红色,程序现在停在这儿了。当然光停这儿没有什么用途,还要看看变量等执行的对不对。
打开监视窗口,右击一个变量,在弹出菜单选择添加监视。
可以看见字符串变量tplname已经被正确赋值了。
程序也可以单步执行,按工具条上的小脚丫。
如果程序需要停下来,或者重置重新开始,请把工具栏上那个鲜红的小方块按灭,再重新执行就可以了。
确认程序调试无误后再完全执行。
在百度云盘https://pan.baidu.com/s/1T-LBvaD_zVCwJsGf_hCyCg下载新版的SetupRsd2.1.4.rar。如果你是第一次安装,参考下软件包里面的安装说明,最好安装相关辅助数据。
详情加企鹅群136965427,在这里解答和讨论有关遥感数据处理和RSD平台的有关技术问题。