经度为正和旋转杆的经度偏离180度

时间:2017-02-10 17:23:29

标签: cartopy

我正试图从北极沿着本初子午线(经度= 0)放置蓝点,而是看到沿着日期线向下的点(经度= 180)。 代码:

#!/usr/bin/env python
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
Lon = 0
ax = plt.axes( projection=ccrs.Orthographic( central_latitude=70,
                                             central_longitude=Lon) )
ax.set_global()
vector_crs = ccrs.RotatedPole( pole_latitude=90, pole_longitude=Lon )
ax.plot([Lon, Lon, Lon, Lon, Lon, Lon],   # longitude
        [ 90,  80,  70,  60,  50,  40],   # latitude
        'bo', markersize=5, transform=vector_crs)
ax.stock_img()
plt.show()

enter image description here

可能是与变形相关的东西,但我还没弄清楚是什么。 Cartopy版本0.14.2,Python 3.6。

1 个答案:

答案 0 :(得分:2)

我认为问题来自您定义的转换投影:

ax = plt.axes(projection=vector_crs)
ax.coastlines()
plt.show()

transform used as plot projection

请注意,变换投影中的这个简单海岸线图看起来像中央经度为180°的Plate Carree图。考虑到这一点,让我们看一下使用Plate Carree投影在绘图上绘制样本数据点,以便尝试简化您要绘制的地图:

ax = plt.axes(projection=ccrs.PlateCarree()) 
ax.plot([Lon, Lon, Lon, Lon, Lon, Lon],
        [ 90,  80,  70,  60,  50,  40],
        'bo', markersize=5, transform=vector_crs)
ax.stock_img()
plt.show()

transform onto PlateCarree projection

与您的示例一样,这些点不会出现在我们预期的位置。最后,让我们尝试使用Plate Carree投影作为点的变换,将它们绘制到正交图上:

ax = plt.axes(projection=ccrs.Orthographic(central_latitude=70,
                                           central_longitude=Lon))
ax.set_global()
ax.plot([Lon, Lon, Lon, Lon, Lon, Lon],
        [ 90,  80,  70,  60,  50,  40],
        'bo', markersize=5, transform=ccrs.PlateCarree())
ax.stock_img()
plt.show()

PlateCarree transform onto Orthographic plot

这似乎提供了更多您正在寻找的情节。