我正在尝试将 Aster GDEM 数据与 cartopy 一起使用,但没有成功: 假设我有一个 numpy 数组,我知道它的地理范围。我应该能够将它绘制为一个图层,比如来自 cartopy.io.img_tiles 的 GoogleTile。
示例代码:
proj = ccrs.Mercator()
extent = [32, 33, 29, 30]
data = np.random.rand(10,10)
fig = plt.figure(figsize=(4,4))
ax = fig.add_subplot(111, projection=proj)
ax.set_extent(extent)
ax.imshow(data, extent=extent, origin='upper',
transform=proj, alpha=0.5)
gg_tiles = GoogleTiles()
ax.add_image(gg_tiles, 10, alpha=0.5)
ax.coastlines('10m')
ax.set_title('data with Google Tile')
gl = ax.gridlines(draw_labels=True)
gl.xlabels_top = None
产生:
数据未显示!
如果我评论 ax.set_extent(extent)
则显示数据但范围错误:
有什么建议吗?
最佳答案
使用 cartopy,如果您的数据位于错误的位置,我总是首先排除的前两件事是:
- “我的投影是否正确?”
- “我是否将经度/纬度与投影仪(又名东距/北距)混淆了?”
所以我做的第一件事就是去 NASA ASTER 站点,它似乎没有太多投影信息,但 jspacesystems 站点 ( http://www.jspacesystems.or.jp/ersdac/GDEM/E/4.html ) 有。它告诉我们,我们有:
The ASTER GDEM is in GeoTIFF format with geographic lat/long coordinates and a 1 arc-second (30 m) grid of elevation postings. It is referenced to the WGS84/EGM96 geoid.
这向我建议你最好使用 PlateCarree 投影(注意,这将使用错误引用的椭圆,但在这个分辨率下会很好)。
遗憾的是,获取 ASTER 数据有点令人头疼,因此我无法对此进行测试,但在这种情况下,只需将 proj 更改为 PlateCarree 即可。 (如果没有,请随时将图片发送到我的 github 个人资料中的电子邮件地址,我会看一下这个具体案例)。
HTH
关于python - numpy 数组的 imshow 无法按预期使用 Cartopy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23887758/