Cartopy:如何在NearsidePerspective投影地图中心添加标记点
问题:NearsidePerspective投影地图添加标记后显示异常
我尝试在NearsidePerspective投影的地图中心添加一个红色小圆点标记,代码如下:
import matplotlib.pyplot as plt import cartopy.crs as ccrs import cartopy.io.img_tiles as cimgt import cartopy.feature as cfeature data = { 'lat': 11.9320027, 'lng': -86.055024, 'time': '2022-01-01T00:33:32.401Z', 'place': 'Catarina, Nicaragua', } fig = plt.figure(figsize=(5, 5), frameon=False) projection = ccrs.NearsidePerspective( central_longitude=data['lng'], central_latitude=data['lat'], satellite_height=500000, ) ax = plt.subplot(1, 1, 1, projection=projection) ax.add_feature(cfeature.BORDERS, linewidth=0.5) ax.add_feature(cfeature.RIVERS, linewidth=0.3) ax.add_image(cimgt.Stamen('watercolor'), 6) # ax.plot([point['lng']], [point['lat']], marker='.', color='red', markersize=5, alpha=0.7, transform=ccrs.Geodetic()) plt.show()
当标记代码处于注释状态时,地图显示正常;取消注释后,地图显示异常,视角偏移且标记位置不符合预期。
解决方案
核心问题是变量名错误,同时需避免自动缩放导致的视角偏移,修改后的代码如下:
# 替换错误变量名,并添加范围锁定 ax.plot(data['lng'], data['lat'], marker='.', color='red', markersize=10, alpha=0.7, transform=ccrs.Geodetic()) # 手动设置地图范围,确保视角与初始状态一致 ax.set_extent([data['lng']-2, data['lng']+2, data['lat']-2, data['lat']+2], crs=ccrs.Geodetic())
关键修改说明:
- 修正变量名:原代码中用了未定义的
point字典,替换为实际存储坐标的data,才能正确读取经纬度。 - 锁定地图范围:取消注释标记后,matplotlib会自动根据标记点调整缩放范围,导致NearsidePerspective的卫星视角偏移,通过
set_extent手动设置以中心点为基准的经纬度区间,保证地图显示和初始状态一致。 - 优化标记可见性:适当增大
markersize,避免红色圆点被地图底图覆盖。
修改后运行代码,就能在地图中心看到正确的红色标记,同时地图显示正常。
内容的提问来源于stack exchange,提问作者Vasyl Bratushka
相关产品推荐
相关产品推荐

