You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Cartopy中设置范围以绘制完美正方形地图?

解决Cartopy Plate Carrée投影绘制正方形地图的白边问题

问题根源:Plate Carrée投影虽直接映射经纬度,但仅设置经纬度跨度相等不足以保证最终显示为正方形——Cartopy默认不会强制坐标轴等比例,且地理坐标转投影坐标后,若不主动匹配投影坐标的跨度,易出现边缘白边。

正确实现步骤

  1. 在投影坐标空间定义正方形范围(而非直接用经纬度),确保x、y方向跨度完全一致;
  2. 将投影坐标转回地理坐标,作为地图的显示范围;
  3. 强制坐标轴长宽比为1,锁定正方形显示效果。

修正后的代码示例

import matplotlib.pyplot as plt
import cartopy.crs as ccrs

# 初始参数:中心经纬度 + 目标跨度(这里用经度跨度作为正方形边长)
lon_center = (-120 + -60) / 2
lat_center = (15 + 75) / 2
target_span = 60  # 正方形边长对应的投影坐标跨度

# 初始化Plate Carrée投影
proj = ccrs.PlateCarree()

# 将中心地理坐标转换为投影坐标
center_x, center_y = proj.transform_point(lon_center, lat_center, ccrs.Geodetic())

# 计算投影坐标下的正方形范围
x_min = center_x - target_span / 2
x_max = center_x + target_span / 2
y_min = center_y - target_span / 2
y_max = center_y + target_span / 2

# 将投影坐标转回地理坐标,得到最终的显示范围
lon_min, lat_min = proj.transform_point(x_min, y_min, proj)
lon_max, lat_max = proj.transform_point(x_max, y_max, proj)

# 创建画布并绘制地图
fig, ax = plt.subplots(subplot_kw={'projection': proj}, figsize=(8, 8))
ax.set_extent([lon_min, lon_max, lat_min, lat_max], crs=ccrs.PlateCarree())
ax.coastlines()
# 强制坐标轴等比例,确保显示为正方形
ax.set_aspect('equal', adjustable='box')

plt.show()

关键说明

  • 直接用经纬度跨度相等时,Cartopy的坐标轴会根据画布大小自动拉伸,导致实际显示不是正方形,进而出现边缘白边;
  • 先在投影坐标空间定义正方形,再转回地理坐标,能保证地图内容完全填充正方形区域;
  • set_aspect('equal', adjustable='box') 是锁定正方形显示的核心,避免画布拉伸破坏比例。

内容的提问来源于stack exchange,提问作者Pontis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:05:25