MeteoInfo-Java解析与绘图教程(八)_java解析卫星FY-4A一级产品文件(HDF举例)

MeteoInfo-Java解析与绘图教程(八)_java解析卫星一级产品文件(HDF举例)

最近解析卫星数据遇到了一级产品,它的解析方式与之前文章说的有些不同,特此补充一下

卫星的一级产品,里面是没有经纬度的,并且里面只有通道数据,同时一级产品也分500KM,1000KM,2000KM,4000KM,解析思路是一样的,我就直接用4000KM举例了

首先我们要确定文件里面都有那些数据

        String path = "D:\解析数据\卫星\Z_SATE_C_BAWX_20220416084552_P_FY4A-_AGRI--_N_REGC_1047E_L1-_FDI-_MULT_NOM_20220416083836_20220416084253_4000M_V0001.HDF";         MeteoDataInfo meteo = new MeteoDataInfo();         meteo.openNetCDFData(path);         //查询文件存放参数名称         List<String> list = meteo.getDataInfo().getVariableNames();

MeteoInfo-Java解析与绘图教程(八)_java解析卫星FY-4A一级产品文件(HDF举例)

 

 

 打印出来,发现参数有NOMObsColumn(行列号表),NOMChannel(通道数据,共计14个)以及对应的CALChannel(定标数据,对应通道数据也有14个)

这样就确定了文件里有14个通道的数据了

MeteoInfo-Java解析与绘图教程(八)_java解析卫星FY-4A一级产品文件(HDF举例)

我这里就拿01通道要数据渲染

        String path = "D:\解析数据\卫星\Z_SATE_C_BAWX_20220416084552_P_FY4A-_AGRI--_N_REGC_1047E_L1-_FDI-_MULT_NOM_20220416083836_20220416084253_4000M_V0001.HDF";         MeteoDataInfo meteo = new MeteoDataInfo();         meteo.openNetCDFData(path);         //行列位置读取         Array column = meteo.read("NOMObsColumn");         //数据         Array array = meteo.read("NOMChannel01");         //获取x,y下标数         int[] shape = array.getShape();         //获取x起点,y起点         Index index = array.getIndex();         GridData grid = new GridData(0, 0.1, shape[1], 0, 0.1, shape[0]);         grid.missingValue = -1;         //第一有效值,最后有效值,平分除二         for(int i=0; i<column.getSize()/2; i++){             //2字节,第一个值             int x = column.getShort(i * 2);             //2字节,最后一个值             int y = column.getShort(i * 2 + 1);             if(x != -1 && y != -1){                 for(int j=x; j<=y; j++){                     index.set(i, j);                     grid.data[shape[0] - i - 1][j] = array.getShort(index);                 }             }         }         RasterLayer layer = DrawMeteoData.createRasterLayer(grid, "");         MapView view = new MapView();         view.addLayer(layer);         MeteoinfoUtil.drawImage(view, grid.getXNum(), "D:/Data/1.png");

卫星一级产品绘图核心部分就是NOMObsColumn的应用,我们首先要确定这个的用处

MeteoInfo-Java解析与绘图教程(八)_java解析卫星FY-4A一级产品文件(HDF举例)

 

 数据是网格数据,但有效的数据每一行都是有限的,第一有效值就是开头,最后有效值就是结尾,所以行列号有2列,行和网络数据的y相同

MeteoInfo-Java解析与绘图教程(八)_java解析卫星FY-4A一级产品文件(HDF举例)

以上就是没有确定色阶的第一通道的绘制

对比卫星一级产品来说,最难的就是经纬度的问题,虽然官方给了对应的算法,但java的计算速度确实慢,导致出图不快(1分钟之内),目前还没有很好的方法,还需要思考

如果大家对经纬度这里有很好的想法,可以私聊我讨论一下,一起进步

发表评论

相关文章