cartopy旋转风不正确?

问题描述

我正在尝试使用cartopy在地图上绘制一些风向图。但是,风看起来很奇怪,所以我在75N的点环上使用风矢量进行了简单测试。风矢量应指向两个纬度/经度网格成45度角,因为在立体投影下u风和v风的大小相同,应保持该角度。

from matplotlib import pyplot as plt
import numpy as np
import cartopy.crs as ccrs

pcproj = ccrs.PlateCarree()
lon0 = -150
mapproj = ccrs.Stereographic(
    central_longitude=lon0,central_latitude=75,true_scale_latitude=75,)
XLIM = 300e3; YLIM=300e3
dm =5; dp=1
fig = plt.figure(0,(7,7))
ax  = fig.add_axes([0.1,0.1,0.85,0.9],projection=mapproj)
      
ax.set_extent([-XLIM,XLIM,-YLIM,YLIM],crs=mapproj)
ax.coastlines(resolution='50m',color='.5',linewidth=1.5)
lon_grid = np.arange(-180,181,dm)
lat_grid = np.arange(-80,86,dp)
gl = ax.gridlines(draw_labels=True,xlocs=lon_grid,ylocs=lat_grid,x_inline=False,y_inline=False,color='k',linestyle='dotted')

# --- draw 45 degree winds at 75N
lon = np.linspace(0,360,73)
lat = np.ones(len(lon))*75
uu  = np.ones(len(lon))*10
vv  = uu*1.
pts = mapproj.transform_points(pcproj,lon,lat)
xx = pts[...,0]; yy = pts[...,1]
ux,vx = mapproj.transform_vectors(pcproj,lat,uu,vv)

ax.quiver(xx,yy,ux,vx,transform=mapproj)

很明显,风向并非与纬度/经度网格成45度角。

winds using transform_vectors from cartopy

我在投影中心150W和75N下检查uxvx。这里的风应该与经/纬网格中的风相同,但应为(3.54,13.7)而不是(10,10)。 风向看起来与使用这条线相同

ax.quiver(lon,vv,transform=pcproj)

这可能不足为奇,因为我认为箭袋在引擎盖下使用transform_vectortransform_points。 我尝试沿纬度/经度网格方向风,它们正确地转换了。 这是transform_vectors中的错误还是我使用不正确?

更新: 正如@swatchai所建议的那样,现在,在将u-wind馈入cos(lat)之前,应将其除以transform_vectors。我怀疑这是预期的行为,但是应该使用此归一化方法,直到以后的cartopy更新更改行为为止。他们可以选择仅更新文档字符串。不过,在未来的cartopy更新中要注意一些事情。

解决方法

使用(纬度,长度)度数时,球面上的小角距{{1​​}}有两个分量:

ds

其中R是地球半径,

第二部分随所考虑位置`R*dlat` in NS direction `R*dlon*cos(lat)` in EW direction 的不同而变化

请牢记,latitudeux在纬度75度的计算应为

vx