2016-11-16 942 views
0

我無法想出將非規則網格上的衛星數據轉換爲全球0.25 x 0.25度網格的最有效方法。在Python中將數據插值到緯度/經度網格

我有一個衛星數據的二維數組,以及兩個相應的二維數組給出每個像素的經度和緯度。

當我繪製它使用pcolormesh,它看起來像這樣:

m.pcolormesh(lon, lat, windSpeed) 

enter image description here

我想這個數據插值到0.25×0.25度電網

lonGrid = arange(-180, 180, res) 
latGrid = arange(-90, 90, res) 
lonGrid,latGrid = meshgrid(lonGrid,latGrid) 

我我嘗試過使用mpl_toolkits.basemap.interp()函數,但我無法弄清楚如何讓我的經緯度和單點增加到單調增加,這是第e功能。我可以ravel()我的lon網格,將它排序爲增加,然後用argsort以相同的方式對windSpeed和lat網格進行排序...但是然後lat不是單調遞增的。

lon = lon.ravel() 
lat = lat.ravel() 
windSpeed = windSpeed.ravel() 

lon[lon > 180] = lon[lon > 180] - 360 

lonSortInds = argsort(lon) 

result = mpl_toolkits.basemap.interp(windSpeed2, lon2, lat2, lonGrid, latGrid, checkbounds=False, masked=True, order=1) 

lat = lat[lonSortInds] 
windSpeed = windSpeed[lonSortInds] 

lon = sort(lon) 

result = mpl_toolkits.basemap.interp(windSpeed, lon, lat, lonGrid, latGrid, checkbounds=False, masked=False, order=1) 

ValueError: xin and yin must be increasing!

最新最好的方式做到這一點?

回答

0

在我剛纔遇到的類似錯誤中,我通過執行不同類型的重新排序來修復它。

如果你的緯度沒有增加,你可以嘗試:

np.flipud(lat) np.flipud(windSpeed)

,或者如果它的經度未增加,則:

np.fliplr(lon) np.fliplr(windSpeed)

這解決了我有一個類似的問題。