如何在Cartopy投影中绘制过指定点的圆的半径
在Cartopy投影中绘制指定半径的大地圆
原代码问题分析
- 存在语法错误:多余的
linestyle="--")行,直接导致代码无法运行 - 使用
ShapelyFeature添加多边形的方式略显繁琐,可改用更直接的方法
修正后的完整代码
import matplotlib.pyplot as plt import cartopy.crs as ccrs from cartopy.geodesic import Geodesic from shapely.geometry import Polygon fig = plt.figure(figsize=(10, 6)) ax = fig.add_subplot(1, 1, 1, projection=ccrs.Mercator()) ax.set_extent([18, 28, 59.5, 64.1], crs=ccrs.PlateCarree()) ax.coastlines(linewidth=.5) # 雷达参数:经纬度、半径(公里转米) lon_ika = 23.076 lat_ika = 61.76 radius_km = 250 radius_m = radius_km * 1000 n_samples = 80 # 生成基于大地线的圆多边形 circle_poly = Polygon(Geodesic().circle(lon_ika, lat_ika, radius_m, n_samples=n_samples)) # 将圆添加到地图,指定几何图形的地理坐标系 ax.add_geometries([circle_poly], crs=ccrs.PlateCarree(), facecolor='none', edgecolor='black', linewidth=1, linestyle='-') # 标记雷达站点 ax.plot(lon_ika, lat_ika, "o", c='r', transform=ccrs.PlateCarree(), markersize=6, label="Ikaalinen") # 标记IOP位置 lon_hyy = 24.3 lat_hyy = 61.83 ax.plot(lon_hyy, lat_hyy, "x", c='r', transform=ccrs.PlateCarree(), markersize=6, label="Hyytiälä") # 添加图例 plt.legend(loc='upper left', fontsize=12, framealpha=1, edgecolor='black') plt.show()
关键说明
Geodesic().circle生成的是球面等距圆(大地圆),在Mercator投影下会呈现为椭圆,这是高纬度地区投影拉伸的正常现象,符合实际球面距离的分布- 若需要绘制视觉上的正圆(非球面等距),可通过极坐标转换生成点后再绘制,但这种圆在球面上的实际距离并不均等,需根据需求选择
- 所有地理坐标点的绘制都需指定
transform=ccrs.PlateCarree(),确保经纬度正确转换到当前的Mercator投影
内容的提问来源于stack exchange,提问作者Louschmuh
相关产品推荐
相关产品推荐

