地磁坐标系下绘制海岸线出现异常多边形问题求助
南极投影地磁坐标系海岸线异常的原因分析
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
相关产品推荐
相关产品推荐

