python-3.x - makegrid 在 cartopy 中等效,从 basemap 移动到 cartopy

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

所以,多年来我一直在 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

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

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

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

m.contourf(x,y,data)

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

感谢任何帮助...

最佳答案

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

因此,如果您知道数据在 lcc(Lambert Conformal Conic)中的坐标,那么您可以将这些坐标传递给 cartopy,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())

实际上,您实际上不需要讨论经度/纬度才能绘制数据。

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

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

最后,如果您在投影空间中有一个边界框,但边界框角在经/纬度中,那么您可以简单地变换角然后使用 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)

关于python-3.x - makegrid 在 cartopy 中等效,从 basemap 移动到 cartopy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53873435/

相关文章:

python-3.x - python 字典获取键

python - 如何根据 matplotlib 中的其他值对点进行着色?

python - 安装/导入 basemap 时出现问题

python - 如何在 basemap 顶部绘制不同密度的散点图

python-2.7 - OpenCV,在3D曲面上投影

projection - 事件溯源 : denormalizing relationships in projections

python - 有没有办法计算两个数据框中每个连续点的斜率,存储斜率的所有值然后绘制它?

python - 排除基于另一个没有外键的模型的值的模型

Python 导入错误 - 运行单元测试

java - 使用不带注释 @Projection 的投影