如何将WRF Lambert等积投影转换为纬度/经度图偏移量

2024-06-01 12:43:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试将Lambert共形坐标转换为lat/lon(WGS84),并使用wgrib2,但结果有偏差。在

命令:

wgrib2 "mypath" -match "10m...." -new_grid_winds grid -new_grid_interpolation neighbor -new_grid latlon 108:129:0.25 16:65:0.25 "outputpath"

结果:

enter image description here

而它应该是那样的(从windy.com网站)在

enter image description here

grib文件:

Grib2 file

Grib2json file


Tags: 命令newmatchgridfile偏差lonlat
1条回答
网友
1楼 · 发布于 2024-06-01 12:43:58

我认为最初的grib文件可能有一些缺陷。我使用wgrib 2将grib文件转换为netCDF,然后使用Python绘制了一些绘图,结果并不理想。在

问题是,当我绘制温度图,并将其与风矢量叠加,看起来不错。问题是,当我加上海岸线时,我发现台湾岛和主要大陆的位置与数据库中绘制的海岸线不匹配。在

因此,我假设初始gribfile中有一些不好的地方-要么是坐标(起始点和终点,要么是步骤)不是很好,而且写入netCDF的坐标也不正确。在

我的代码在这里,如果感兴趣:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
from netCDF4 import Dataset
import json
#                -
# read the json file:
with open('2018091312.json','r') as f:
    data = json.load(f)
#                -
lo1,lo2,la1,la2 = 108,142.75,16,23.75
dx,dy=0.25,0.25
nx,ny=140,32
udata=np.array(data[0]['data'],dtype='float32');udata=np.reshape(udata,(ny,nx));
vdata=np.array(data[1]['data'],dtype='float32');vdata=np.reshape(vdata,(ny,nx));
londata=np.arange(lo1,lo2+dx,dx);
latdata=np.arange(la1,la2+dy,dy);
londata,latdata=np.meshgrid(londata,latdata)
#                -
#                -
ncin=Dataset('test.nc');
lons=ncin.variables['longitude'][:];
lats=ncin.variables['latitude'][:];
u10=np.squeeze(ncin.variables['UGRD_10maboveground'][:])
v10=np.squeeze(ncin.variables['VGRD_10maboveground'][:])
t2=np.squeeze(ncin.variables['TMP_surface'][:])
ncin.close();
#                -
xlim=(np.min(lons),np.max(lons));
ylim=(np.min(lats),np.max(lats));
#                -
plt.figure(figsize=(8, 8))
m = Basemap(projection='cyl', resolution='i',
            llcrnrlat=ylim[0], urcrnrlat=ylim[1],
            llcrnrlon=xlim[0], urcrnrlon=xlim[1], )
xx,yy=m(lons,lats);
m.pcolormesh(lons,lats,t2,vmin=273.,vmax=300.);
skipx=skipy=16
m.quiver(xx[::skipy,::skipx],yy[::skipy,::skipx],u10[::skipy,::skipx],v10[::skipy,::skipx],scale=20.0,units='inches');
#                      
plt.savefig('test_withoutland.png',bbox_inches='tight')
m.drawcoastlines()
m.drawlsmask(land_color = "#ddaa66")
plt.savefig('test_withland.png',bbox_inches='tight')
plt.show()
#                      
skipx,skipy=2,2
plt.figure(figsize=(8, 8))
m = Basemap(projection='cyl', resolution='i',
            llcrnrlat=ylim[0], urcrnrlat=ylim[1],
            llcrnrlon=xlim[0], urcrnrlon=xlim[1], )
xx,yy=m(londata,latdata);
m.pcolormesh(lons,lats,t2,vmin=273.,vmax=300.);
m.quiver(xx[::skipy,::skipx],yy[::skipy,::skipx],udata[::skipy,::skipx],vdata[::skipy,::skipx],scale=20.0,units='inches');
#                      
m.drawcoastlines()
m.drawlsmask(land_color = "#ddaa66")
plt.savefig('test_json.png',bbox_inches='tight')
plt.show()

结果如下(使用JSON文件的测试): enter image description here

从grib到newCDF的转换,我是这样做的:

^{pr2}$

相关问题 更多 >