numpy数组的imshow与Cartopy无法正常工作

时间:2014-05-27 11:03:39

标签: python numpy matplotlib imshow cartopy

我试图将Aster GDEM数据用于手写但没有成功: 假设我有一个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

产生

enter image description here

数据未显示!

如果我评论ax.set_extent(extent),那么数据会显示但是程度不正确:

enter image description here

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

使用cartopy,如果您的数据位置错误,我始终首先排除的前两项内容是:

  • "我有正确的投影吗?"
  • "我是否把lons / lats与投影仪(又名东边/北边)混淆了?"

所以我做的第一件事是去NASA ASTER网站,它似乎没有太多的投影信息,但jspacesystems网站(http://www.jspacesystems.or.jp/ersdac/GDEM/E/4.html)做了。它告诉我们,我们有:

  

ASTER GDEM采用GeoTIFF格式,具有地理纬度/经度坐标和1弧秒(30米)高程网格过帐。它参考了WGS84 / EGM96大地水准面。

这告诉我你最好使用PlateCarree投影(请注意,这将使用错误引用的椭圆,但在此分辨率下会非常好。)

可悲的是,采购ASTER数据有点令人头疼,因此我无法对此进行测试,但只需将proj更改为PlateCarree就应该是这种情况下所需的全部内容。 (如果没有,请随时将图像发送到我的github个人资料中找到的电子邮件地址,我将查看此具体案例。)

HTH