未知轨迹下两点间经纬度网格最近邻查找及索引回推问题
解决方案
1. 网格索引转实际经纬度的实现
你代码中生成的lati、loni是对应nc数据维度的数组下标(支持浮点插值),要转成实际经纬度坐标,有两种适配场景的实现方式:
方式1:等间隔经纬度网格(大部分气象格点数据适用)
直接基于起止点经纬度生成和插值结果一一对应的路径坐标,逻辑最简单不会出错:
# num要和你之前生成lati、loni的参数完全一致 path_lat = np.linspace(start_point[0], end_point[0], num) path_lon = np.linspace(start_point[1], end_point[1], num)
方式2:非等间隔经纬度网格(通用兼容方案)
如果你的lat/lon数组是不等间隔分布的,通过线性插值把浮点索引映射为实际经纬度,和map_coordinates的插值逻辑完全对齐:
# lati/loni是你之前生成的浮点索引数组 path_lat = np.interp(lati, np.arange(len(lat)), lat) path_lon = np.interp(loni, np.arange(len(lon)), lon)
2. 路径不符合预期的常见问题排查
- lat数组排序反向问题:大部分气象NC文件的lat维度是从北到南存储(数值从大到小降序),你写的
find_closest函数默认输入数组是升序排列,会导致索引计算完全错误。修复代码:lat = nc.variables['lat'][:] # 检测lat是否为降序,反转后再做索引计算 if lat[0] > lat[-1]: lat = lat[::-1] div = div[::-1, :] # 同步反转div数组的lat维度 - 坐标顺序匹配问题:
scipy.ndimage.map_coordinates要求输入坐标顺序为(行维度, 列维度),确认你的div数组维度是(lat, lon),如果是(lon, lat)存储需要把vstack的参数反过来。 - 采样密度问题:如果
num参数取值太小,路径采样点不足会导致绘制的线条看起来偏离预期,可适当调大num的数值。
内容的提问来源于stack exchange,提问作者S.Kociok
相关产品推荐
相关产品推荐

