在Cartopy GeoAxes上绘制栅格栅格

时间:2019-07-14 22:04:18

标签: cartopy rasterio

关于此主题,我还看到了其他一些问题,但是该库已进行了足够的更改,以致于这些问题的答案似乎不再适用。

Rasterio used to include an example用于在Cartopy GeoAxes上绘制光栅栅格。该示例大致如下:

import matplotlib.pyplot as plt
import rasterio
from rasterio import plot

import cartopy
import cartopy.crs as ccrs

world = rasterio.open(r"../tests/data/world.rgb.tif")

fig = plt.figure(figsize=(20, 12))
ax = plt.axes(projection=ccrs.InterruptedGoodeHomolosine())
ax.set_global()
plot.show(world, origin='upper', transform=ccrs.PlateCarree(), interpolation=None, ax=ax)

ax.coastlines()
ax.add_feature(cartopy.feature.BORDERS)

但是,此代码不再绘制栅格。相反,我得到这样的东西:

map without raster (incorrect output)

它应该像这样:

map with raster (old, correct output)

当我在rasterio问题跟踪器中询问此问题时,他们告诉我该示例已弃用(并删除了该示例)。不过,我想知道是否有某种方法可以做我想做的事情。谁能指出我正确的方向?

1 个答案:

答案 0 :(得分:0)

不需要rasterio。得到一个蓝大理石的图像,然后绘制它。

这是工作代码:

import cartopy
import matplotlib.pyplot as plt
import cartopy.crs as ccrs

fig = plt.figure(figsize=(10, 5))
ax = plt.axes(projection=ccrs.InterruptedGoodeHomolosine())
# source of the image:
# https://eoimages.gsfc.nasa.gov/images/imagerecords/73000/73909/world.topo.bathy.200412.3x5400x2700.jpg
fname = "./world.topo.bathy.200412.3x5400x2700.jpg"
img_origin = 'lower'
img = plt.imread(fname)
img = img[::-1]
ax.imshow(img, origin=img_origin, transform=ccrs.PlateCarree(), extent=[-180, 180, -90, 90])

ax.coastlines()
ax.add_feature(cartopy.feature.BORDERS)

ax.set_global()
plt.show()

输出图:

interrupted_projection