计算格网数据的面积(以度为单位等距)



我有一些网格数据(180 纬度框乘 360 经度框),可以在这里下载包含海冰数据(0 = 无冰,1 = 完全冰)。 https://1drv.ms/u/s!ApWaJaYUUERKjqAP-3K48AuUAFgPXQ

我正在尝试计算北极冰的范围,即如果网格框的冰含量超过 15% (0.15),则网格框将计为冰覆盖,并且该网格框的面积将添加到数组中。然后在最后对总面积求和。我得到的值是 16.08,这比我需要的要高得多(数据是 2014 年 12 月的数据,实际值在这里 (ftp://sidads.colorado.edu/DATASETS/NOAA/G02135/north/monthly/data/N_12_extent_v2.1.csv) 应该是 12.4 ish。

我知道给定的分辨率会有差异(例如地形边缘),但不会那么大。

我使用的代码如下:

from netCDF4 import Dataset
import numpy as np
Data = Dataset('Ice.nc','r')
ICE = np.squeeze(np.squeeze(Data.variables['sic'][:]))
Lat = Data.variables['latitude'][:]
Lon = Data.variables['longitude'][:]
Ice_Exten = np.zeros((360,180))

for i in range(0,360):
    for j in range(90,180):  #just northern hemisphere
        if ICE[j,i] > 0.15 and ICE[j,i] <= 1.0:
            Ice_Exten[i,j] = 12321. * np.cos(np.radians(Lat[j]))
print np.sum(Ice_Exten)/1e6

任何帮助非常感谢!

为什么不将总冰面积相加,而不是将其设置为1?

from netCDF4 import Dataset
import numpy as np
Data = Dataset('Ice.nc','r')
ICE = np.squeeze(np.squeeze(Data.variables['sic'][:]))
Lat = Data.variables['latitude'][:]
Lon = Data.variables['longitude'][:]
Ice_Exten = np.zeros((360,180))

for i in range(0,360):
    for j in range(90,180):  #just northern hemisphere
        if ICE[j,i] > 0.15 and ICE[j,i] <= 1.0:
            Ice_Exten[i,j] = 12321. * np.cos(np.radians(j-90.)) * ICE[j,i]
print np.sum(Ice_Exten)/1e6

输出:

12.7085786161

代码没有问题; 相反,差异是由于使用了陆地/海洋掩码和插值。

相关内容

最新更新