因此,我已经在Python2.7中使用Basemap多年了,我将迁移到Python3.7,并希望迁移到cartopy。我处理了很多数据,其中我有投影信息,但我没有lat和龙的数据网格。这就是我在基本地图上处理事情的方式。
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。我想用网格的大小传递投影信息,然后得到lat/lons,这样我就可以用cartopy绘制图了。
任何帮助都很感激..。
发布于 2018-12-21 10:59:21
令人讨厌的医生表示它返回在投影坐标系中等距的lats和lons。我想你主要是用这个把投影数据放到任何地图上,让basemap给出lat/lon的位置。Cartopy的操作方式完全不同,因为您完全可以在本机坐标系中指定坐标的坐标系。
因此,如果您知道您的数据在lcc (Lambert )中的坐标,那么您可以将这些坐标传递到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。
在一些罕见的情况下,您只知道lats/lons,即使数据被投影在另一个空间。Cartopy处理这一问题的方法是:
plt.contourf(lons, lats, data, transform=ccrs.PlateCarree())最后,如果您在投影空间中有一个边框,但是边框角在lon/lat中,那么您可以简单地转换这些角,然后使用行空间。以下(未经测试的)代码应该可以做到这一点:
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)https://stackoverflow.com/questions/53873435
复制相似问题