我一直在寻找cartopy提供的快速自动地图的选项。我发现SRTMSource非常方便。然而,我还没有找到如何使用不同的投影来绘制数据,比如墨卡托……
当我这样做的时候:
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。
发布于 2019-05-27 16:31:49
我知道这是一个古老的帖子,但我正在努力学习更多关于cartopy的知识,我想我现在可以回答这个问题,也许这可以帮助其他有类似问题的人。
好了,开始吧。首先,cartopy主页上对变换和投影的区别有一个很好的解释:https://scitools.org.uk/cartopy/docs/latest/tutorials/understanding_transform.html?highlight=understanding
projection关键字决定了绘图的外观,因此对于这里的问题,我们将projection更改为Mercator:
ax = plt.axes(projection=ccrs.Mercator())
您可以选择您喜欢的任何投影,但您必须添加transform关键字(在本例中仍然是PlateCarree,因为数据是在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()()我希望这是正确的,我的解释是有帮助的。
https://stackoverflow.com/questions/36826766
复制相似问题