我一直在研究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。
答案 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()()
我希望这是正确的,我的解释会有所帮助。