如何让Cartopy GeoAxis自动更新轴范围以包含添加的几何图形?
解决Cartopy GeoAxis自动适配图形范围的问题
要让GeoAxis自动更新范围以完全包含所有添加的几何图形,核心是先把图形转换到当前轴的投影坐标系下,再计算合并后的边界,这样就能考虑投影带来的变形问题。具体步骤如下:
- 收集所有要绘制的几何图形,将它们转换为轴的投影坐标系:
# 假设shapes是你的几何图形列表,source_crs是这些图形的原始坐标系 transformed_shapes = [shape.transform(ax.projection) for shape in shapes] - 合并所有转换后的图形,计算它们的总边界框:
需要用到shapely的unary_union来合并多个几何图形,再获取合并后的边界:from shapely.ops import unary_union merged_geometry = unary_union(transformed_shapes) minx, miny, maxx, maxy = merged_geometry.bounds - 用计算出的边界设置轴的范围,注意指定crs为轴的投影:
ax.set_extent([minx, maxx, miny, maxy], crs=ax.projection)
补充说明
- 如果只有单个几何图形,直接对转换后的图形取
bounds即可,无需unary_union - 这么做的原因是:原始坐标系下的边界框在经过投影转换后,形状可能发生扭曲(比如极投影下的矩形区域会变成扇形),只有先转换图形再计算边界,才能得到当前投影下能完整包含所有图形的准确范围
内容的提问来源于stack exchange,提问作者zwol
相关产品推荐
相关产品推荐

