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

使用Cartopy切换CCRS为Orthographic后非洲大陆图形消失的解决咨询

解决Orthographic投影下非洲大陆图形消失的问题

这个问题的核心是对Cartopy中数据源投影和绘图目标投影的混淆,再加上Orthographic投影的默认视角不在非洲区域,导致图形没显示出来。我来一步步帮你修正:

问题根源

  1. 你读取的naturalearth_lowres数据是基于WGS84经纬度坐标的,对应的Cartopy投影是ccrs.PlateCarree(),但你错误地把latlon_proj(数据源投影)设为了ccrs.Orthographic(),这相当于告诉Cartopy“这些几何图形本来就是Orthographic投影的坐标”,但实际数据是经纬度,投影转换完全错误,自然看不到图形。
  2. Orthographic投影的默认视角是北极点附近(默认中心是(0°, 90°N)),即使投影设置正确,默认视野也看不到非洲。

修正后的代码

import cartopy
import cartopy.crs as ccrs
from matplotlib import pyplot as plt
import geopandas as gpd

# 读取世界地理数据并筛选非洲
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
africa = world[(world['continent'] == 'Africa')]

# 数据源投影:原始数据是经纬度,所以用PlateCarree
data_proj = ccrs.PlateCarree()
# 绘图目标投影:Orthographic,指定非洲的大致中心(纬度0,经度20°E)
target_proj = ccrs.Orthographic(central_longitude=20, central_latitude=0)

# 创建绘图轴
ax = plt.axes(projection=target_proj)
ax.stock_img()

# 添加非洲国家图形,注意数据源投影用data_proj
for ea in africa['geometry']:
    feat = cartopy.feature.ShapelyFeature(
        [ea], data_proj, facecolor="lime", edgecolor='black', lw=0.2
    )
    ax.add_feature(feat)

# 设置显示全球范围(或者可以用ax.set_extent()指定非洲区域)
ax.set_global()

plt.show()

关键修改说明

  • 数据源投影保持PlateCarree():这是告诉Cartopy,你传入的几何图形坐标是经纬度格式,它会自动帮你转换到目标投影(Orthographic)。
  • Orthographic指定中心坐标:通过central_longitude和central_latitude把投影中心设到非洲大陆的大致中间位置(20°E,0°N),确保非洲在视野内。
  • ax.set_global():让绘图轴显示整个地球范围,这样即使中心不在非洲,也能通过旋转看到(当然指定中心后直接就能看到非洲了)。

如果你想更聚焦非洲区域,可以把ax.set_global()换成:

# 设置非洲的大致经纬度范围,适配Orthographic投影
ax.set_extent([-25, 55, -35, 38], crs=data_proj)

这样就能精准显示非洲区域的图形了。

内容的提问来源于stack exchange,提问作者Stücke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 08:42:34