Ash*_*rni 1 projection python-3.x matplotlib-basemap cartopy
我正在尝试从 python2 中的 Basemap 移动到 python3 中的 cartopy。但是,我发现将一些 Basemap 代码块转换为 cartopy 很困难:
底图(python2.7)
from mpl_toolkits.basemap import Basemap
bmap = Basemap(projection='merc', resolution='c', llcrnrlon=-125, llcrnrlat=26, urcrnrlon=-56, urcrnrlat=46)
print bmap.makegrid(4, 4)[0]
[[-125. -102. -79. -56.]
[-125. -102. -79. -56.]
[-125. -102. -79. -56.]
[-125. -102. -79. -56.]]
print bmap.makegrid(4, 4)[1]
[[26. 26. 26. 26. ]
[33.23223798 33.23223798 33.23223798 33.23223798]
[39.91267019 39.91267019 39.91267019 39.91267019]
[46.00000132 46.00000132 46.00000132 46.00000132]]
Run Code Online (Sandbox Code Playgroud)
cartopy (python 3.7)
import cartopy.crs as ccrs
mrc = ccrs.Mercator()
lons = np.array([-125, -56])
lats = np.array([26, 46])
width = 4
height = 4
projected_corners = mrc.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)
print(xs)
[-14248894.82153902 -6567849.95680314]
print(ys)
[2736034.98592771 6413524.59416364]
Run Code Online (Sandbox Code Playgroud)
注意:我正在尝试按照此处提到的步骤使用墨卡托投影来获得类似于 makegrid 的行为,但结果与上面看到的底图不匹配。
如果在相同的基础上(坐标系)进行比较,结果非常一致。这是可运行的代码和结果:
import numpy as np
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
mrc = ccrs.Mercator()
lons = np.array([-125, -56])
lats = np.array([26, 46])
width = 4
height = 4
projected_corners = mrc.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)
x2d, y2d = np.meshgrid(xs, ys)
ax = plt.axes(projection = mrc)
ax.coastlines()
ax.scatter(x2d, y2d)
ax.gridlines(draw_labels=True)
plt.show()
Run Code Online (Sandbox Code Playgroud)
输出图:
以及网格点坐标(长,纬度)的计算:
platecarr = ccrs.PlateCarree()
lon_lat_list = platecarr.transform_points(ccrs.Mercator(), xs, ys)
print(lon_lat_list)
[[-125. 26. 0. ]
[-102. 33.23738591 0. ]
[ -79. 39.91736844 0. ]
[ -56. 46. 0. ]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3648 次 |
| 最近记录: |