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

地磁坐标系下绘制海岸线出现异常多边形问题求助

南极投影地磁坐标系海岸线异常的原因分析

1. 经度范围不匹配导致跨半球错误连线

AACGMv2返回的地磁经度(mlon)范围是0°360°**,但Cartopy的`PlateCarree`投影默认处理的是**-180°180°的经度区间。当转换后的地磁经度超过180°时,绘图逻辑会把360°附近的点和-180°附近的点直接连接,形成横跨半球的错误折线,也就是你看到的异常多边形形状。

2. 投影坐标系的逻辑矛盾

你创建cc_mag时指定的投影是ccrs.SouthPolarStereo(),但绘制时却使用transform=ccrs.PlateCarree(),这是逻辑错误:转换后的地磁坐标是基于地磁极点的经纬度,对应的参考坐标系应该是地磁版的PlateCarree(以地磁南北极为极点),而非地理极点的PlateCarree,这种不匹配会导致坐标在投影中被错误映射。

3. 多边形方向与闭合性被破坏

地理坐标系下的多边形(如岛屿轮廓)在转换为地磁坐标后,顶点的顺序可能反转,导致Shapely无法正确识别多边形的内部/外部区域,进而在投影绘制时出现线条或填充异常。


关键修正代码片段

修正经度范围转换

修改convert_to_mag_doer函数,将0-360°经度转为-180-180°:

def convert_to_mag_doer(coords, time4mag, alt4mag):
    for long, lat in coords:
        mlat, mlon, mlt = aacgmv2.get_aacgm_coord_arr(lat, long, alt4mag, time4mag)
        mlon_val = mlon.item()
        # 转换经度范围
        if mlon_val > 180:
            mlon_val -= 360
        yield (mlon_val, mlat.item())

修正投影坐标系匹配

创建cc_mag时使用正确的参考坐标系:

# 地磁坐标属于PlateCarree(经纬度)坐标系,而非南极投影
cc_mag = cfeature.ShapelyFeature(geom_mag, ccrs.PlateCarree(), color='xkcd:black', zorder=75)

可选:修正多边形方向

如果仍有多边形异常,可添加Shapely的方向修正:

from shapely.geometry.polygon import orient

# 在处理Polygon类型时添加方向修正
elif geom.type == 'Polygon':
    ring = geom.exterior
    shell = type(ring)(list(convert_to_mag_doer(ring.coords, time4mag, alt4mag)))
    # 修正外部环为逆时针方向
    shell = orient(shell, sign=1.0)
    holes = []
    for ring in geom.interiors:
        hole_ring = type(ring)(list(convert_to_mag_doer(ring.coords, time4mag, alt4mag)))
        # 修正内部环为顺时针方向
        hole_ring = orient(hole_ring, sign=-1.0)
        holes.append(hole_ring)
    return type(geom)(shell, holes)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:44:52