數據可視化之風場分布圖
風是由太陽輻射熱引起的一種空氣流動現象,是影響天氣和氣候變化的重要因子,同時也是氣候分析和風電場管理等諸多領域的關鍵因素。因此利用三維可視化實時監測風的變化情況至關重要。
風場,亦是一種向量場,把空間中的每一點指派到一個向量的映射。風場效果圖由兩部分組成,即風場流線圖和風場分布圖,風場流線圖反應風向變化,風場分布圖反應風速大小,此處我們主要以風場分布圖展開介紹。
圖1 向量場示意圖
這里我們將風場分布可視化主要流程分為數據解析、數據編碼、數據解碼、數據渲染四部分。為提高渲染效率及精度,我們將全球風場數據編碼并以紋理方式傳入著色器,再通過紋理采樣,解碼風場數據,并利用雙線性插值算法,計算全球各位置風速,實現全球逐像素著色,從而渲染出高精度、平滑的風場分布圖。
數據解析:本文數據來源于以美國氣象局每隔3個小時以經度/緯度網格的形式,發布的一種全球氣象數據,數據格式大致如下:
數據將全球劃分為361×181網格,其中lo1、la1為網格原點經緯度,lo2、la2為網格終點經緯度,dx、dy為經緯網格步長,nx、ny為經緯網格數,data為對應網格點風場數據,分別表示經度、緯度方向上風速大小。
數據編碼:由于風場數據以361×181經緯網格方式存儲,且數據在-255~255之間,因此本文以361×181像素大小、RGBA顏色數據格式紋理存儲各網格風場數據,RGB通道存儲風場數據數值,A通道存儲風場數據符號位,從而分別將在經緯兩方向上的風場數據編碼轉化為紋理圖片,提高數據精度。
數據解碼:利用構建地球頂點數據,計算各像素對應的經緯坐標,并計算相鄰的4經緯網格坐標,并進行歸一化作為風場數據紋理坐標,通過紋理采樣,提取相鄰風場數據,并利用雙線性插值算法,獲取當前位置風場數據值,并計算當前像素顏色值。
Step1: 計算紋理坐標,通過世界笛卡爾坐標轉化為經緯坐標(i+△i,j+△j),如圖2所示獲取當前位置相鄰的4個經緯網格坐標(i,j)、(i+1,j)、(i,j+1)、(i+1,j+1),則對應紋理坐標分別為(i/361,j/181)、((i+1)/361,j/181)、(i/361,(j+1)/181)、((i+1)/361,(j+1)/181);
圖2 紋理坐標計算示意圖
Step2: 提取數據,通過Step1計算的紋理坐標進行采樣,獲取當前經緯坐標相鄰風場數據值f(i,j)、f(i+1,j)、f(i,j+1)、f(i+1,j+1),如圖3所示,其中u為經緯方向偏移、v為緯度方向偏移;
圖3 風場影響示意圖
Step3:計算像素顏色值,通過Step2獲取的風場值,并利用雙線性插值算法計算該位置風場影響值,如下式所示,再利用風場影響值通過正、余弦計算RGB顏色值,提高風場變化的平滑度;
f(i+u,j+v)=f(0,0)(1-u)(1-v)+f(1,0)x(1-v)+f(0,1)(1-u)y+f(1,1)uy
圖4 像素與紋理坐標映射關系圖
數據渲染:利用影像瓦片渲染機制,實現風場分布全球著色,效果圖如圖5所示:
圖5 風場分布效果圖
通過上述風場分布效果的實現方式,我們可以渲染其他類似效果,實現地圖數據與現實GIS數據可視化結合,如全球溫度、濕度等。將數據以紋理方式傳入著色器,再利用對應算法,計算像素顏色值,并予以著色渲染。