1. 程式人生 > >批量處理FY3-MERSI L1B資料

批量處理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的事件和訊息機制可以任意觸發和響應來自節點機/主機的控制資訊。類似的新概念和技術還有很多。我已經發布了一些參考文件,請參閱CSDN部落格https://blog.csdn.net/gordon3000/article/details/39336569和一些連續的相關博文(2014年的,多年沒更新可能個別有出入)。

1 開啟指令碼視窗

右擊主視窗上方工具條空白部分開啟“指令碼編輯視窗”。同樣開啟輸出視窗,用於輸出程式執行結果(如果有)。


2 編輯程式碼

程式碼可以直接在指令碼編輯視窗編輯輸入和儲存,也可以用其它字處理軟體編輯。如果需要儲存就儲存文一個副檔名為.c的檔案。這樣直接就可以在指令碼編輯視窗開啟。

為批量處理FY3-MERSI資料編輯的99程式碼如下:

//////////////////////////////////////////////////////////////////////////////////////

//   GeoGraph 指令碼語言示例程式碼 ——建立任務

//  

//   李國春2012年12月4日

//////////////////////////////////////////////////////////////////////////////////////

main()

{

     int

b;

     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平臺的有關技術問題。