- 积分
- 55955
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-6-21
- 最后登录
- 1970-1-1
|
发表于 2016-9-8 15:03:52
|
显示全部楼层
你是数据经度范围是0 - 360度,而shape文件中国家行政界线的范围是-180 - 180,导致-180 - 0度范围内的国家没有数据。需要在读取数据后按180度分隔为两个数据,然后再重新拼接起来形成-180 - 180度的数据,然后再按照国家进行平均。当然有些国家太小,加之数据分辨率是0.5度,所以该国家内一个格点数据都没有,会形成NaN值。下面的脚本供参考:
- #Add a grid data
- f = addfile('E:/Temp/air.mon.mean.v401.nc')
- tdata = f['air'][0,:,:]
- d1 = tdata[:,[180,360]]
- d2 = tdata[:,[0,179.75]]
- tdata = d1.join(d2, 1)
- n = tdata.dimlen(1)
- lon = linspace(-179.75, 179.75, n)
- tdata.setdimvalue(1, lon)
- #Read world shape file
- world = shaperead('D:/Temp/map/country1.shp')
- #Average temporature for each country
- i = 0
- for rpoly in world.shapes():
- name = world.cellvalue('CNTRY_NAME', i)
- mdata = tdata.maskout(rpoly)
- tave = mdata.ave()
- tmin = mdata.min()
- tmax = mdata.max()
- print '%i: %s, Ave: %.2f, Min: %.2f, Max: %.2f' %(i, name, tave, tmin, tmax)
- i += 1
- #Plot
- axesm()
- world = shaperead('D:/Temp/map/country1.shp')
- geoshow(world)
- geoshow(world, edgecolor=[0,0,255])
- #layer = contourfm(tdata,20)
- layer = imshowm(tdata, 20)
- title('Temporature distribution map')
- colorbar(layer)
|
|