Документы makegrid утверждают, что он возвращает латы и долготы, которые находятся на одинаковом расстоянии в проекционной системе координат.Я полагаю, что вы в основном используете это для размещения проецируемых данных на любой карте, позволяя базовой карте указывать широту и долготу.Cartopy работает совершенно по-другому, так как вам совершенно разрешено указывать систему координат ваших координат в собственной системе координат.
Итак, если вы знаете координаты ваших данных в lcc
(конформная коническая проекция Ламберта)) затем вы можете передать их в картопию, которая, при необходимости, перепроектирует ее для вас:
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())
Наконец, если у вас есть ограничивающий прямоугольник в проецируемом пространстве, но углы ограничивающего прямоугольника находятся в 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)