【问题标题】:makegrid equivalent in cartopy, moving from basemap to cartopy在cartopy中等效的makegrid,从底图移动到cartopy
【发布时间】:2019-05-21 06:08:46
【问题描述】:

所以,我多年来一直在 Python 2.7 中使用 Basemap,我正在迁移到 Python3.7 并希望迁移到 cartopy。我处理大量数据,我有投影信息,但我没有数据的纬度和经度网格。这就是我在 Basemap 中处理事情的方式。

m=Basemap(
    llcrnrlon=-118.300,
    llcrnrlat=20.600,
    urcrnrlon=-58.958,
    urcrnrlat=51.02,
    projection='lcc',
    lat_1=38.,
    lat_2=38.,
    lon_0=-95.,
    resolution ='l',
    area_thresh=1000.
)
mwidth =  1008 #for 163 5km AWIPS2 grid
mheight = 722  #for 163 5km AWIPS2 grid

所以我在底图中设置了参考网格“m”... 然后绘制数据...我用这个:

lons,lats=m.makegrid(mwidth,mheight)
x,y=m(lons,lats)

然后我可以像这样使用 contourf 或 pcolormesh:

m.contourf(x,y,data)

我基本上是在寻找 cartopy 或 pyproj 或 osgeo 中的等价物。我想传递具有网格大小的投影信息并获取纬度/经度,以便我可以使用 cartopy 进行绘图。

感谢任何帮助...

【问题讨论】:

  • 使用 numpy.meshgrid() 并快乐。

标签: python-3.x projection matplotlib-basemap cartopy


【解决方案1】:

makegrid docs 表示它返回在投影坐标系中等距分布的纬度和经度。我想您主要使用它通过让底图为您提供纬度/经度位置来将投影数据放到任何地图上。 Cartopy 以完全不同的方式运行,您完全可以在本地坐标系中指定坐标的坐标系。

因此,如果您知道 lcc(Lambert Conformal Conic)中的数据坐标,那么您可以将这些坐标传递给 cartopy,它会酌情为您重新投影:

xs = np.linspace(llc_x0, llc_x1, n_xs),
ys = np.linspace(llc_y0, llc_y1, n_ys),
plt.contourf(xs, ys, data, transform=ccrs.LambertConformalConic())

实际上,您实际上 需要 谈论 lons/lats 来绘制数据。

在极少数情况下,您只知道纬度/经度,即使数据投影到另一个空间。 Cartopy 处理这个问题:

plt.contourf(lons, lats, data, transform=ccrs.PlateCarree())

最后,如果您在投影空间中有一个边界框,但边界框角在 lon/lat,那么您可以简单地转换角然后使用 linspace。以下(未经测试的)代码应该可以解决问题:

import cartopy.crs as ccrs
import numpy as np

llc = ccrs.LambertConformal()

width = 20
height = 25
llcrnrlon=-118.300
llcrnrlat=20.600
urcrnrlon=-58.958
urcrnrlat=51.02

lons = np.array([llcrnrlon, urcrnrlon])
lats = np.array([llcrnrlat, urcrnrlat])

projected_corners = llc.transform_points(
    ccrs.PlateCarree(), lons, lats)

xs = np.linspace(
    projected_corners[0, 0], projected_corners[1, 0], width)
ys = np.linspace(
    projected_corners[0, 1], projected_corners[1, 1], height)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    相关资源
    最近更新 更多