对于一个项目,我需要创建一个可视化效果,在地图上的某些位置周围绘制一个圆圈。使用的可视化卡托比 v.0.18.0 https://scitools.org.uk/cartopy/docs/latest/index.html渲染地图。它使用GoogleTiles
类来获取并显示相关区域中的图块,以及add_patch(Patch.Circle(..., transform=ccrs.PlateCarree()))
画圆的方法。
tiles = GoogleTiles()
fig = plt.figure(figsize=(15,15))
ax = fig.add_subplot(1, 1, 1, projection=tiles.crs)
ax.set_extent((-121.8,-122.55,37.25,37.85))
ax.add_image(tiles, 11)
ax.add_patch(Patch.Circle(xy=[-122.4015173428571, 37.78774634285715], radius = 0.021709041989311614 + 0.005, alpha=0.3, zorder=30, transform=ccrs.PlateCarree()))
plt.show()
然而,尽管我尝试了几个变换对象,但我要么得到了椭圆而不是圆形(例如使用ccrs.PlateCarree()
)或根本没有圆圈(例如使用ccrs.Mercator()
).
我在网上找到了几种不同的解决方案(例如在正投影中使用 cartopy 绘制圆圈 https://stackoverflow.com/q/52105543/266919),但是,这些不适用于墨卡托投影,遗憾的是我缺乏投影/变换知识来使它们适应我的问题。
我能够产生圆形补丁的唯一方法是当我设置projection
参数开启fig.add_subplot
to ccrs.PlateCarree()
。然而,这会扭曲地图并且标签变得模糊,因此遗憾的是这不是一个可接受的解决方案。
由于该项目即将到期,因此我们将不胜感激。