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();

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

我这里就拿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的应用,我们首先要确定这个的用处

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

以上就是没有确定色阶的第一通道的绘制
对比卫星一级产品来说,最难的就是经纬度的问题,虽然官方给了对应的算法,但java的计算速度确实慢,导致出图不快(1分钟之内),目前还没有很好的方法,还需要思考
如果大家对经纬度这里有很好的想法,可以私聊我讨论一下,一起进步
MeteoInfo-Java解析与绘图教程(八)_java解析卫星FY-4A一级产品文件(HDF举例)的更多相关文章
- MeteoInfo-Java解析与绘图教程(一)
MeteoInfo-Java解析与绘图教程(一) 已经进入开发行业很多年了,这两年一直从事气象开发行业,为此对气象绘图有了新的见解 像色斑图与卫星图一直都有python去绘制,在偶然的情况下,我接触到 ...
- MeteoInfo-Java解析与绘图教程(三)
MeteoInfo-Java解析与绘图教程(三) 上文我们说到简单绘制色斑图(卫星云图),但那种效果可定不符合要求,一般来说,客户需要的是在地图上色斑图的叠加,或者是将图片导出分别是这两种效果 当然还 ...
- MeteoInfo-Java解析与绘图教程(四)
MeteoInfo-Java解析与绘图教程(四) 上文我们说到,将地图叠加在色斑图上,但大部分都是卫星绘图,现在开始讲解micaps数据绘图,同样也是更多自定义配置 首先我们解析micaps数据,将之 ...
- MeteoInfo-Java解析与绘图教程(五)
MeteoInfo-Java解析与绘图教程(五) 最近太忙了,终于有时间继续写了,上文说到了基本上的绘图方法,但缺少色阶呈现,一般图叠加着地图上,后端不需要管色阶,但也要注意web页面色阶和我们的生成 ...
- MeteoInfo-Java解析与绘图教程(七)_图层添加站点名称或区域名称
MeteoInfo-Java解析与绘图教程(七)_图层添加站点名称或区域名称 在上文说了用自动站的数据经过插值绘制色斑图,这种一般是在geoserver上叠加图片呈现,但遇到后端导出图片,我们又想添加 ...
- JAVA学习第四十八课 — IO流(二):文件的复制 & 缓冲区1
一.复制文本文件 将G盘的文本文件拷贝到D盘上 也就是 读取G盘中文本文件的数据.写入D盘中->连读带写 而剪切呢.就是连读带写后,删除原盘的文件 <span style="fo ...
- [转]Java NIO通俗易懂简明教程
Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API.本系列教程将有助于你学习和理解Java NIO. Java NIO提供了与 ...
- JAVA企业级开发-xml基础语法&约束&解析(04)
一.什么是xml html:超文本标记语言.它主要是用来封装页面上要显示的数据,最后通过浏览器来解析html文件,然后把数据展示在浏览器上.同样我们可以使用JS和DOM技术对html文件进行解析和操作 ...
- CRL快速开发框架系列教程八(使用CRL.Package)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
随机推荐
- switch 是否能作用在 byte 上,是否能作用在 long 上, 是否能作用在 String 上?
在 Java 5 以前,switch(expr)中,expr 只能是 byte.short.char.int.从 Java 5 开始,Java 中引入了枚举类型,expr 也可以是 enum 类型,从 ...
- Redis 常见性能问题和解决方案?
1.Master 最好不要写内存快照,如果 Master 写内存快照,save 命令调度 rdbSave 函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性 暂停服务 2.如果数据 ...
- 两个相同的对象会有不同的的 hash code 吗?
不能,根据 hash code 的规定,这是不可能的.
- 学习docker(三)
一.Docker介绍 1.docker容器 docker是宿主机的一个进程,通过namespace实现了资源隔离,通过cgroup实现了资源限制, 通过写时复制技术(copy-on-write)实现了 ...
- centos7 环境安装rabbitmq 集群
继上一篇https://www.cnblogs.com/drafire/p/10062891.html ,这篇博客继续介绍centos 7下安装rabbitmq的集群. 今天在公司搞了一天的rabbi ...
- (stm32f103学习总结)—输入捕获模式
一.输入捕获介绍 在定时器中断实验章节中我们介绍了通用定时器具有多种功能,输入捕获就是其中一种.STM32F1 除了基本定时器 TIM6 和 TIM7,其他定时器都具有输入捕获功能.输入捕获可以对输入 ...
- 关于css布局、居中的问题以及一些小技巧
CSS的两种经典布局 左右布局 一栏定宽,一栏自适应 <!-- html --> <div class="left">定宽</div> < ...
- java中如何创建自定义异常Create Custom Exception
9.创建自定义异常 Create Custom Exception 马克-to-win:我们可以创建自己的异常:checked或unchecked异常都可以, 规则如前面我们所介绍,反正如果是chec ...
- 动态添加HTML时onclick函数参数传递
onclick函数动态传参 1.参数为数值类型时: var tmp = 123; var strHTML = "<div onclick=func(" + tmp + &qu ...
- 将PHPMailer整合到ThinkPHP 3.2 中实现SMTP发送邮件
本内容转载出处:http://my.oschina.net/BearCatYN/blog/299192 并对以下内容做了一处说明. ThinkPHP没有邮件发送的功能,于是,我就想了想,就将PHPMa ...