◎ 黃選威
廣西地圖院,廣西 南寧 530023
目前,多時相柵格數據已廣泛應用于生態環境和氣候變化領域。時間分辨率為小時或天的柵格數據往往需要處理成月均或年均柵格數據,才能實現進一步分析。對于跨度數十年的單時或日均數據,單項數據處理的工作量大、耗時多、效率低。此次研究筆者針對IMERG全球2001 年—2020 年約7 300 幅降水量單日NetCDF 文件展開數據研究,利用ArcGIS ModelBuilder 可視化編程開發語言進行集成開發處理,獲取廣西2001 年—2020 年月均降水量和年均降水量柵格數據集,從而實現快速獲取降水量基礎研究數據。
NetCDF(Network Common Data Form)網絡通用數據格式是一種面向數組型并適于網絡共享數據的描述和編碼標準[1]。在ArcGIS 中,可以通過NetCDF 文件創建TIF柵格數據集,用一個維度來顯示所有柵格數據的單元值。對于具有相同屬性的多個柵格數據,要合成一個更大時間分辨率的柵格數據集,通常采用鑲嵌至新柵格的方法,求取單個柵格像元上的平均值來實現,公式可以表示為:

式(1)中,Vmean為更大時間分辨率柵格數據集的像元值;Vij表示第i行第j列的像元位置的數值;n表示鑲嵌原始柵格的數量。
ArcGIS ModelBuilder 是一種可視化的編程語言,用于構建地理處理工作流。ArcGIS ModelBuilder 能夠將一系列ArcToolbox 現有工具和ArcPy 語言通過輸入輸出的方式串聯起來進行數據處理[2]。這種處理方式節省人機交互的中間過程,并且能夠迭代具有相同屬性樣式的數據,實現數據的自動化或半自動化批量處理。趙強等人通過MATLAB 等程序語言進行NetCDF 數據的批量讀寫操作,但該讀寫方式設計需要在特定環境下進行,且MATLAB 可視化表達效果較為單一[3]。溫樹棟、昝建春等人基于ArcGIS ModelBuilder 單一計算和解析路徑的方式來實現地理數據庫按區域自動批量的裁剪輸出,但輸入輸出位置是固定的,不具有遷移重復使用的靈活性[4-5]。
常用的ModelBuilder 由變量、工具和連接符組成(見圖1)。

圖1 ArcGIS ModelBuilder 工作流程示意圖
常用的ArcGIS ModelBuilder 結構單元主要組成部分如表1 所示。

表1 ArcGIS ModelBuilder 結構單元主要組成部分表
此次研究的數據源自2001 年1 月1 日至2020 年12 月31 日約7 300 幅全球降水量GPM IMERG 數據。通過訪問美國NASA 地球科學數據和信息服務中心(Goddard Earth Sciences Data and InformationServices Center,GES DISC)的網站(https://disc.gsfc.nasa.gov)可以下載到數據格式為NetCDF 的全球日均降水量數據。該數據的空間分辨率為0.1°,單個NetCDF 數據大小約30 M。
筆者針對數據量巨大的NetCDF 日均降水量數據,此次研究首先使用ArcGIS ModelBuilder中的柵格數據迭代器進行循環讀取,獲得的文件名通過ArcPy 中的截取函數截取特定字段,用于創建特定文件夾,使用工具將NetCDF 數據轉換為TIF 數據,生成的TIF 文件放入特定文件夾中。然后,將單個文件夾內的數據以收集多值的方式作為單一數據整體輸入,在迭代循環文件夾的基礎上,迭代文件夾內部的TIF數據。最后,通過鑲嵌至新柵格的方式生成某一時間段月均降水量或年均降水量柵格數據。數據處理過程如圖2 所示。

圖2 數據處理過程示意圖
(1)字段獲取與匹配。獲取的原始日均降水量數據的文件名稱較長,如3B—DAY.MS.MRG.3IMERG.20200101—S000000—E235959.V06.nc4。此次研究通過ArcPy 中的ArcPy.Split()函數進行日期字符的獲取,再利用獲取的特定字段創建文件夾和TIF 數據文件名,通過“\%文件名%\%柵格數據%.tif”地址組合的方式進行數據特定文件夾下的自動保存。其中,“%文件名%”和“%柵格數據%”為自定義變量,通過連接的方式組合地址路徑,便于靈活選擇輸出地址。
(2)循環迭代和嵌套。將NetCDF 文件轉化為按月保存的TIF 文件,要先迭代文件夾內的日均柵格數據作為收集值整體輸入,再迭代該文件夾進行多年數據處理,這里需要對文件夾和文件夾內的數據都進行迭代讀取。由于ModelBuilder 同一模型下不能出現2 個或2 個以上的迭代器,因此需要把其中一個迭代模型作為新工具嵌入到另一個模型中進行2 次以上的迭代計算。這種模型嵌套的方式能夠有效解決多個迭代器在同一個模型進程中共同計算的問題。
(3)多值合一輸入輸出。由于迭代器每次只能讀取1 個數據,但計算數據平均值要讀取多個數據,因此需要通過迭代的方式讀取所有柵格數據,直到讀完文件夾內所有數據為止,之后將其作為一個數據整體進行輸入。這種方式可以避免迭代一個數據就進行鑲嵌,或者迭代未完成就計算的問題。
(4)遷移重復使用。模型中的輸入輸出變量可分為帶固定參數變量和不帶參數變量2種。帶參數的變量通過輸入固定的路徑、數據直接進行計算,每次計算都要重新設置新的參數,不利于遷移多次使用。對于不帶參數的變量,將其設為空值,并作為開源變量,可以由使用者自行輸入,進行參數調整。此次研究筆者將必要參數作為不帶參數的變量,均做開放處理,便于計算模型重復使用和調整。圖3 中的所有變量右上角帶p 標志的均為不帶參數的變量。
以日均數據生成月均數據為例,模型設計主要包括按月創建文件夾、NetCDF 數據轉換為TIF、按月鑲嵌平均計算3 部分(見圖3)。
(1)按月創建文件夾。考慮到原始數據的文件名讀取、存儲不方便,需要生成月份的文件夾來存儲對應月份的單日數據。在圖3(a)中,“原始數據文件夾”用于輸入原始日均數據位置,“文件夾位置”用于輸出生成月份文件夾的位置。此次研究筆者使用計算值工具,利用截取函數ArcPy.Split()按照關鍵字符位置進行讀取月份如“202001”6 位,其他字符舍去,即可生成名稱為“202001”的文件夾。
(2)NetCDF 數據轉換為TIF。由于NetCDF數據格式不是GIS 常用數據類型,因此需要先進行數據轉換。此次研究筆者通過ArcGIS 工具箱中的創建NetCDF 柵格圖層、復制柵格、按掩膜裁剪的工具進行處理。將對應轉換后的日均TIF 柵格數據存入到相應月份文件夾中。在圖3(b)中,“文件夾”為原始數據位置;“通配符”和“文件擴展名”分別對應文件名的關鍵字和文件類型;NetCDF 數據的變量參數HQprecipitation、Lon、Lat 可以自行輸入,也可以作為默認變量填入參數;“裁剪矢量數據”為進行掩膜裁剪的研究區范圍;“輸出文件位置”為月份文件夾所在的上一層文件夾。
(3)迭代按月鑲嵌計算。將圖3(b)過程生成的TIF 柵格數據作為一個整體輸入,再進行鑲嵌計算。需要注意的是,不能只把收集值作為一個簡單的變量放入模型中,需要將其設置為帶p 標志的參數變量,否則就會以下面這種方式進行計算:

式(2)顯然與式(1)的計算結果不同,這不是此次研究需要的結果。
(4)迭代文件夾進行月均計算。將圖3(c)的模型作為一個整體嵌套到圖3(d)中,圖3(c)是迭代循環月份文件夾中的日均TIF 柵格數據,圖3(d)是迭代循環不同的文件夾,嵌套的方式可以進行多次循環。圖3(d)中,“中間數據文件夾”為月份文件夾所在的上一層文件夾位置,“輸出位置”為生成月均數據的存放位置。

圖3 月均降水量數據批量處理模型圖
批量處理模型設計完成之后,選取2020 年12 個月366 份的全年NetCDF 日均數據,分別通過常規人工方法和批量處理模型工具法進行處理,比較數據處理花費的時間(見圖4)。

圖4 常規人工方法和批量處理模型工具法耗時對比圖
實驗結果表明,將日均降水量數據處理成月均降水量柵格數據,批量處理模型工具法用時約為5 min/月,常規人工方法用時約為48 min/月,批量處理模型工具法在數據處理時間上較常規人工方法縮短8 了倍以上。由此可見,批量處理模型工具法能大幅提高多時相柵格數據處理的效率,能有效克服常規人工方法效率低、用時長、容易出錯等問題,并且可以使用ArcGIS 中的地理處理結果,將其作為計算包整體運算,減少設置參數的時間。
與MATLAB 方法相比,此次研究不需要進行復雜的編程計算,使用模塊化的封裝工具即可實現搭積木式計算處理,并且ArcGIS 支持二次開發,可不依靠環境進行運行計算,對于零基礎的使用者來說較為友好。通常情況下,在數據輸入輸出路徑上,很多模型工具往往都是固定的,即輸入數據的路徑也是輸出路徑,不能自行設置,不具有靈活性。此次研究筆者將輸入輸出位置作為不帶路徑參數的變量開放出來,提供給使用者自行輸入,大大增強了批量處理模型工具的遷徙性和提高了重復使用水平。同時,批量處理模型工具法不局限于單一的裁剪計算,而是把名稱修改、數據轉換、裁剪提取、加權計算、數據生成等柵格數據處理的常見流程進行綜合設計,對于其他具有不同需求的柵格數據處理來說,具有很強的借鑒和指導意義。
此次研究中,筆者基于ArcGIS Model-Builder 可視化編程開發環境,集成ArcToolbox 現有工具和ArcPy 語言處理,開發實現多時相柵格數據批量處理模型工具。研究中,對于輸入輸出變量,采用空參數的形式,能滿足和實現批量處理模型工具的可遷移性和重復使用。同時,使用ArcGIS 臨時數據庫ScratchGDB,避免了大量中間數據的出現,節省了內存。下一步,應對不常使用的輸入輸出變量直接填充相應參數,減少批量處理模型工具使用過程中變量交互的次數;擴展模型工具的數量和模塊選項,使用者在做修改調整后,即可對其他相似類型的柵格數據進行批量處理。