2016-11-16 939 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)

这解决了我有一个类似的问题。