对于一个项目,我需要创建一个可视化,在地图上的一些位置周围画一个圆圈。可视化使用Cartopy v.0.18.0来渲染地图。它使用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()
)
我在网上找到了几种不同的解决方案(例如Drawing Circles with cartopy in orthographic projection),但是,这些方案不适用于墨卡托投影,遗憾的是,我缺乏投影/转换知识来适应我的问题
我能够生成圆形面片的唯一方法是将fig.add_subplot
上的projection
参数设置为ccrs.PlateCarree()
。然而,这会扭曲地图,标签也会变得模糊,所以很遗憾,这不是一个可接受的解决方案
由于该项目即将到期,请尽快回复为荷
谢谢@swatchai,这是缺少的提示,所以对于那些被测试者来说,代码现在看起来像这样,而且它确实有效!万岁
执行上述代码时,会抛出以下警告,但对结果有明显影响:
再次感谢@swatchai你救了我一天
相关问题 更多 >
编程相关推荐