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分钟之内),目前还没有很好的方法,还需要思考

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

    原文作者:只待时光静好
    原文地址: https://www.cnblogs.com/zdsgjh/p/16206537.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞