如何使用CDO或grADS从netCDF/.grd文件按日期提取印度经纬度点气温并转换格式
从格点气温数据中提取印度区域逐日格点的实操方案
核心基础参数
首先明确印度区域常用矩形裁剪经纬度范围:
- 经度区间:68°E 至 98°E
- 纬度区间:8°N 至 37°N
- 输出表必填字段顺序:lat、lon、ind_lat_lon(区域匹配标识,所有印度格点赋值1)、obs_date(观测日期)、tmax(最高气温值)
方案一:使用CDO完成全流程操作
操作步骤
- 第一步:空间裁剪印度区域
执行CDO空间裁剪命令,直接从原始格点文件中截取印度范围的格点数据,命令格式如下:cdo sellonlatbox,68,98,8,37 原始气温数据文件.grd/netcdf 印度区域临时裁剪文件.nc
注:命令中参数顺序严格为「西经度边界、东经度边界、南纬度边界、北纬度边界」,不要调换维度顺序 - 第二步:添加区域标识字段
为裁剪后的所有印度格点新增固定标识字段,统一赋值1,匹配ind_lat_lon字段要求:cdo -expr,ind_lat_lon=1 印度区域临时裁剪文件.nc 带区域标识的文件.nc - 第三步:导出目标格式长表
按指定字段顺序导出为文本表格,直接替换原文件中CDO格式的时间值为标准MM-DD-YYYY格式的obs_date即可:cdo outputkey,lat,lon,ind_lat_lon,time,tmax 带区域标识的文件.nc > 印度区域逐日气温表.txt
方案二:使用GrADS完成全流程操作
操作步骤
- 第一步:数据初始化与范围设定
打开原始grd/netCDF文件,先通过ctl控制文件明确lat、lon、tmax的维度映射关系,再设置印度区域的空间范围:'open 原始气温数据文件.ctl' 'set lon 68 98' 'set lat 8 37' - 第二步:按日期遍历提取格点
逐时间层循环读取数据:- 对每个时间步,提取对应时间字符串,格式化为
MM-DD-YYYY格式的obs_date值 - 逐格点循环读取当前时间步下的tmax值
- 逐行输出记录,每行固定赋值ind_lat_lon=1,按lat、lon、ind_lat_lon、obs_date、tmax的顺序写入csv表格
- 对每个时间步,提取对应时间字符串,格式化为
实操注意事项
- 如果需要剔除矩形范围内不属于印度的周边点位,可加载印度行政边界shape文件生成掩膜,将掩膜外的格点值设为缺测,导出时自动过滤缺测记录
- 若导出的经纬度值错位,需先检查原始grd/netCDF文件的维度顺序,避免将经纬度索引值当成实际地理坐标输出
内容的提问来源于stack exchange,提问作者Rohit Sharma
相关产品推荐
相关产品推荐

