NetCDF提取ETOPO1高程数据出现X轴镜像问题如何解决
ETOPO1 NetCDF提取高程X轴镜像翻转解决方法
问题根因
ETOPO1 基岩高程NetCDF文件的默认存储规则为:高程二维矩阵的第一维对应纬度(从北至南即90°N到-90°S排序),第二维对应经度(从西至东即-180°到180°排序)。
原有代码存在两处核心问题:
- 直接对一维经纬度数组做
reshape(-1)展平,没有生成和高程二维矩阵维度完全匹配的经纬度网格,导致坐标与高程值错位 - 高程值反转逻辑
height.reshape(-1)[0::-1]写法错误,该语句仅会返回展平数组第一个元素的反向切片,根本没有完成维度方向对齐,最终触发X轴镜像翻转。
修复方案
先校验经纬度数组的排序方向,对齐高程矩阵的维度顺序,再生成匹配的经纬度网格后展平入表:
import numpy as np import pandas as pd import netCDF4 as nc # 替换为本地ETOPO1文件读取逻辑 ds = nc.Dataset("你的ETOPO1_nc文件本地路径") lon = ds.variables['lon'][:] lat = ds.variables['lat'][:] height = ds.variables['z'][:] # 维度对齐核心逻辑 # 校验经度方向,若为自东向西排序则反转经度轴 if lon[0] > lon[-1]: lon = lon[::-1] height = height[:, ::-1] # 校验纬度方向,若为自南向北排序则反转纬度轴 if lat[0] < lat[-1]: lat = lat[::-1] height = height[::-1, :] # 生成和高程矩阵完全匹配的经纬度网格 lon_grid, lat_grid = np.meshgrid(lon, lat) dfl= pd.DataFrame({ 'Latitude' : lat_grid.reshape(-1), 'Longitude': lon_grid.reshape(-1), 'Altitude': height.reshape(-1), 'Value': value.reshape(-1), }) print(dfl)
异常参考

调整完维度后可以先取小范围经纬度的高程值做校验,比如取已知高程的地标点核对数值匹配度,确认无错位后再做全量数据处理即可。
内容的提问来源于stack exchange,提问作者Weiss
相关产品推荐
相关产品推荐

