计算网格化数据的面积(等距度)

时间:2017-01-24 11:12:18

标签: python numpy geospatial

我有一些网格化数据(经纬度为180度经纬度的盒子),这里可以下载海冰数据(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

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

为什么不添加总冰面积而不是将其归结为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

答案 1 :(得分:0)

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