如何使用cartopy绘制SRTM源Raster?

时间:2016-04-24 17:49:25

标签: python matplotlib gis cartopy

我一直在研究cartopy提供的快速自动地图选项。我发现SRTMSource非常方便。但是,我还没有找到如何使用不同的投影来绘制数据,例如mercator ......

当我这样做时:

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from cartopy.io.srtm import SRTM3Source

source = SRTM3Source

plt.figure()
ax = plt.axes(projection=ccrs.PlateCarree())
ax.add_raster(source())
ax.set_extent([12, 13, 47, 48])
plt.show()()

它工作得很好,并使用PlateCarree投影

进行绘图

但是当我尝试将轴的投影更改为墨卡托时:

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from cartopy.io.srtm import SRTM3Source

source = SRTM3Source

plt.figure()
ax = plt.axes(projection=ccrs.Mercator())
ax.add_raster(source())
ax.set_extent([12, 13, 47, 48])
plt.show()()

我收到错误消息:

Unsupported projection for the SRTM3 source.

那么有没有办法保持SRTMSource功能(自动下载)并使用任何投影绘制栅格?

我想过简单地做一个imshow并改变投影,但是由于在绘图时检索了RasterSource的数据,我不知道该怎么做......

plt.figure()
ax = plt.axes(projection=ccrs.Mercator())
ax.imshow(source(), transform=ccrs.Mercator())
ax.set_extent([12, 13, 47, 48])
plt.show()

返回TypeError。

1 个答案:

答案 0 :(得分:0)

我知道这是一篇过时的文章,但是我想了解更多关于Cartopy的知识,我想我现在可以回答这个问题,也许这可以帮助其他遇到类似问题的人。

好的,我们走了。首先,在cartopy主页上很好地解释了变换和投影的区别: https://scitools.org.uk/cartopy/docs/latest/tutorials/understanding_transform.html?highlight=understanding

projection关键字确定绘图的外观,因此对于此问题,我们将投影更改为Mercator:

ax = plt.axes(projection = ccrs.Mercator())

您可以选择自己喜欢的任何投影,但是您必须添加转换关键字(在这种情况下,它仍然是PlateCarree,因为DATA是在PlateCarree中提供的):

ax.set_extent([12,13,47,48],transform = ccrs.PlateCarree())

因此正确的代码应为:

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from cartopy.io.srtm import SRTM3Source

source = SRTM3Source

plt.figure()
ax = plt.axes(projection=ccrs.Mercator())
ax.add_raster(source())
ax.set_extent([12, 13, 47, 48], transform=ccrs.PlateCarree())
plt.show()()

我希望这是正确的,我的解释会有所帮助。