疾风亦有龟途 | 搜索
综合排序时间浏览量
全部分类安卓/IOS后端运维web前端软件安装学习/科研疾风龟途月记还是月季技巧杂糅
找到约 11 条结果
气象数据读取(3)---COSMIC掩星数据读取
1.前言 在上一篇文章里,我们介绍了FY/GNOS数据的提取。并提供了相应数据的get方法供外界调用。是不是成就感满满?哈哈,这一小节,我们开始提取COSMIC数据。所谓一回生,二回熟。我们这次有了上节课的经验,快速把他搞定。 2.COSMIC卫星简介 COSMIC是台湾NSPO和美国UCAR合作的进行全球大气即时观测的卫星任务.本文介绍了COSMIC卫星星座和轨道,主要搭载仪器,科学目标和应用,COSMIC是国际上第一个同时6颗小卫星进行GPS掩星观测的卫星任务,是气象,电离层和大地测量等学科研究的前沿. 3. 工具类实现 其实,COSMIC卫星的数据结构和GNOS的数据结构基本一样。所以我们的代码要改的很少。只需要把getVariablesLists(); getGlobalVariablesLists(),在这两个方法中的String vbName和int position改掉就ok了。 我们在utils包下创建一个ReadCmNcDataUtils类 public class ReadFyNcDataUtils {
private static List<
2020/08/29 06:30
2111
cosmic
java
掩星
数据提取
气象数据读取(2)--- FY-3C(风云)掩星数据读取
1.前言 在上一篇文章里,我们构建了处理气象数据的Maven工程。相信大家已经构建好了。这一篇,我们将开始对 *.NC数据进行处理。 在windows系统下,NC文件预览如上图所示,看不到任何信息。我们使用相关软件打开NC数据,来对NC文件的数据结构一窥究竟。 通过上面两张图,我们可以看出,NC文件的大致数据结构如下: 主要包括两个部分:Global Attributes;Variables。我们接下来的任务也就是围绕着这两部分进行展开。这样看下来,是不是很简单? 2.风云卫星简介 风云三号(FY-3)气象卫星是我国的第二代极轨气象卫星,它是在FY-1气象卫星技术基础上的发展和提高,在功能和技术上向前跨进了一大步,具有质的变化,具体要求是解决三维大气探测,大幅度提高全球资料获取能力,进一步提高云区和地表特征遥感能力,从而能够获取全球、全天候、三维、定量、多光谱的大气、地表和海表特性参数。 3.工具类实现 3.1 任务分析 在面对一个任务时。我们要首先明白我们的业务逻辑。 在该任务中,我们要获取每一个掩星数据的Global Attributes和Variables。那么我们就要对每一个
2020/08/29 05:22
1910
风云
掩星
java
NC
数据提取
气象数据读取(4)--- 优雅的交汇
false 是不是一下子豁然开朗了,哈哈哈 3. 优雅的交汇 好了,经过上面的分析,我们首先在utils里新建一个ReadAllNcDataUtils类,代码内容如下: package roDataDemo.utils;
import ucar.ma2.Array;
import ucar.nc2.Attribute;
import ucar.nc2.NetcdfFile;
import ucar.nc2.Variable;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
//TODO:对文件夹里的文件类型进行过滤,因为这个工作其实挺烦的,特别是COSMIC数据文件含有较多的.符号,所以这里就不操作了。
/**
* 该工具类针对FY-3C卫星的GNOS掩星数据和COSMIC数据进行数据提取
* 提示:getVariablesLists();
2020/08/29 06:39
1585
解耦
java
掩星
nc
优雅
伊斯坦布尔对流层顶参数计算
1.确定地理位置 最近接到一个任务。计算伊斯坦布尔的对流层顶参数,该城市在北纬 41°, 东经 28。要求是使用COSMIC掩星数据。在前面,我们写各种提取掩星数据的工具类,现在我们就把他们利用起来。不过在正式开始计算时,我们还要进行数据准备。我们要完成对数据的归档。如下图所示。在归档时使用到了复制操作,复制工具类请参考我的另一篇文章todo 2.计算参数 在计算时,根据要求,分为逐年,逐月两种方法。之所以不分季节,是因为,我只知道中国大部分地区四季分明,至于本文研究区域是否分明,我并不清楚。首先我们研究逐月。另外比较重要的一点,是对计算结果的存储。这要是用到另外一个工具类,该工具类请参考我的另一篇文章todo。本文也涉及多线程编程,但是很简单。下面贴上代码。 重写run方法 static class threadDemo extends Thread{
private String yourFilePath;
private String rolePath;
public threadDemo(String yourFilePath, String
2020/09/06 06:47
1728
伊斯坦布尔
对流层顶
掩星
Java
批处理
别了!学生时代最后一个暑假
,看到这个。真的是好久了啊。😁😁😁 游戏真的是个好东西,愿我永远热爱游戏。 5.疾风亦有归途 这个暑假在家做了好几个东西,其实都还挺好的。反正我自己觉得挺好的,哈哈哈。 5.1疾风亦有龟途网站 网站包括后端,后端管理,前端门户三个部分。 后端: 后端管理: 前端门户: 暂时这里面全是测试数据,哈哈哈。这也算是第一个版本吧,看上去还是有点简陋的。后期根据需求在慢慢改。慢慢的让它动起来。毕竟个人网站这些东西,就是要搞得花里胡哨的才好玩!!!🙈🙈🙈🙈 5.2Java与气象数据的优雅交汇 这是暑假写的第二个小demo,可能写的不太好。 为啥写这个呢,因为一开始我是想着尝试用Java去处理一些掩星数据。后来发现没有python方便。不过我还是把它写完了。 功能还是不错的,支持读取风云和cosmic两种掩星数据,支持一键匹配时空特征,支持多数据读取,支持一键写入Excel表格等操作。 后续可能不会再用Java处理气象数据了,哈哈哈哈。不过这个工具类还是蛮不错的,后期可以改写成Python版本的。把一些算法写成工具类,方便后人使用,哈哈哈 5.3疾风亦有龟途移动端 这个是对网站移动端的
2020/08/30 06:56
1461
诗
远方
生活
暑假
理想
风云3E-黎明之星
, 450, 500};
String[] varDay = {"01", "02", "03", "04", "05", "06", "07", "08", "09", "10","11", "12", "13", "14", "15", "16", "17", "18", "19", "20"};
ReadAllNcDataUtils readAllNcDataUtils = new ReadAllNcDataUtils();
ArrayList resultBeans = new ArrayList();
for (String s : varDay) {
log.info("开始解析第" + s + "号的FY-3E掩星数据。");
//1.根据日期01,02,03,这种来找到针对的掩星数据和再分析数据
List ncDataList = readAllNcDataUtils.getNcDataListByDay("D:\\BaiduNetdiskWorkspace\\论文\\风云
2022/07/17 08:50
1886
黎明之星
FY
风云
气象数据读取(6)---事半功倍之存入Excel
artifactId>
3.9
然后等待构建完成。我们添加的这两个jar包,就是用来处理Excel对象的。具体使用方法,可参考相应jar包官网。 2.2构建工具类 我们在utils包下新建NcGlobalVrToExcelUtils,NcVrToExcelUtils两个类。 此时的项目结构如上图所示。 首先来看NcGlobalVrToExcelUtils类,这个类就对应了Nc文件的全局变量(掩星点lat,lon,发生时间等.....) 我们来捋一下逻辑: 创建一个Excel对象 在对象中添加sheet,行名,列名 获得全局变量数据 将全局变量以流的形式注入excel文件 关闭流 package roDataDemo.utils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.
2020/09/04 06:43
1562
excel
java
存储
掩星
气象数据读取(1)--- 创建Maven工程
>
org.projectlombok
lombok
1.18.12
provided
上述代码,我们一共引入了三个jar包,前两个是针对Nc数据解析使用的。第三个是一个log工具 4. 项目结构 等待pom文件构建完成后,我们在包下面创建一个roDataDemo包,在其下再创建utils文件夹和一个ReadNcData类,用来存放我们将会使用到的工具类。再创建一个ReadNcData类进行对工具类的操作。 此时整个项目结构大致如下所示: 至此,我们的工程已经构建完毕,接下来就让我们愉快的开始操刀各种气象数据吧!!! 5.风云掩星数据读取 下一篇文章,我们将开始对FY-3C/GNOS数据进行解析,读取。 [x] 我们的征途是星辰大海。我就是我,我就是天! [x]
2020/08/28 04:12
1830
Java
掩星
气象
COSMIC
面向对象
探空气球数据提取与三次样条插值
我们就可以面向txtData进行编程了。这样有一个好处,那就是不论以后是探空气球数据,大气掩星数据,再分析资料数据,还是其他数据,我们都可以面向txtData进行编程处理。 该部分,我们就以上述生成的探空标准文件为例,进行相应的数据处理。我们首先创建一个工具类readRaStandTxtUtil,意思就是读取探空标准数据工具类。 package roDataDemo.utils;
import lombok.extern.slf4j.Slf4j;
import roDataDemo.domain.igra2Station;
import roDataDemo.domain.txtData;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import
2021/08/12 07:09
1628
探空气球
大气科学
java
maven
气象数据读取(7)---事半功倍之存入Excel二
1.数据存储 variable里面的变量和全局变量还不太一样,它自己本身就是个具有长度大于一的数组。这也为我们的存储带来了一些困难。但是,我们程序员不怕困难啊,哈哈哈哈。 2.构建工具类 我们在utils下创建一个NcVrToExcellUtils类,此时项目结构如下: 考虑到实际情况,我们并不会创建大量的列。所以本工具类会对总的列数进行控制, 当然,如果你想不受控制,也可以直接修改源码,哈哈哈。 思路:还是分为两种情况: 直接给出目标文件夹,读取全部文件,并对目标数据进行存取。 给出你匹配过得文件全路径名,并对目标数据进行存取。 但是这个和全局变量还不太一样,全局变量可以放在一个列表里。这个不行,因为每一个文件都会是一个大列表。所以我们需要在读取之前,先创建excel对象,并赋予sheet。然后通过循环,每读一个文件,我就创建三列,alt,temp,press。 代码: package roDataDemo.utils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import ucar.ma2.Array;
import ucar.nc2.NetcdfFile;
import java.io.*;
import java.util.Arrays;
import java.util.List;
/**
* 考虑到实际情况,我们并不会创建大量的列。所以本工具类会对总的列数进行控制,
* 当然,如果你想不受控制,也可以直接修改源码,哈哈哈
* 思路:还是分为两种情况
* 1.直接给出目标文件夹,读取全部文件,并对目标数据进行存取。
* 但是这个和全局变量还不太一样,全局变量可以放在一个列表里。这个不行,因为每一个文件都会是一个大列表
* 所以我们需要在读取之前,先创建excel对象,并赋予sheet。然后通过循环,每读一个文件,我就创建三列,alt,temp,press
*/
// for (int i1 = 0; i1 < mAltList.get(0).size(); i1++) {
// HSSFRow row1 = sheet.createRow(i1 +1);
// row1.createCell(0*3).setCellValue(mAltList.get(0).get(i1).toString().substring(0, 5));
// row1.createCell(0*3+1).setCellValue(mTempList.get(0).get(i1).toString().substring(0, 7));
//
// String str = "/Variables.xls";
// makeExcel(filePath, str, hssfWorkbook); }
public class NcVrToExcellUtils {
private List mAltList;
private List mTempList;
private List mPressList;
private List mAltListByCondition;
private List mTempListByCondition;
private List mPressListByCondition;
public void setVariablesAsExcel(String filePath) {
getRoData(filePath);
//第一步,创建一个workbook对应一个excel文件
createExcel(filePath, mAltList, mTempList, mPressList);
}
public void setVariablesAsExcelByCondition(List filePathList, String filePath) {
getRoDataByCondition(filePathList);
//第一步,创建一个workbook对应一个excel文件
createExcel(filePath, mAltListByCondition, mTempListByCondition, mPressListByCondition);
}
private void createExcel(String filePath, List altListByCondition, List tempListByCondition, List pressListByCondition) {
HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
for (int i = 0; i < altListByCondition.size(); i++) {
//第二部,在workbook中创建一个sheet对应excel中的sheet
HSSFSheet sheet = hssfWorkbook.createSheet("用户表" + i);
//第三部,在sheet表中添加表头第0行,老版本的poi对sheet的行列有限制
HSSFRow row = sheet.createRow(0);
HSSFCell cell;
cell = row.createCell(0);
cell.setCellValue("alt");
cell = row.createCell( 1);
cell.setCellValue("temp");
cell = row.createCell(2);
cell.setCellValue("pres");
for (long l = 0; l < altListByCondition.get(i).getSize(); l++) {
HSSFRow row1 = sheet.createRow((int) l);
row1.createCell(0).setCellValue(altListByCondition.get(i).getDouble((int) l));
row1.createCell(1).setCellValue(tempListByCondition.get(i).getDouble((int) l));
row1.createCell(2).setCellValue(pressListByCondition.get(i).getDouble((int) l));
}
}
String str = "/Variables.xls";
makeExcel(filePath, str, hssfWorkbook);
}
/**
* 获取数据
*
* @param filePath
*/
public void getRoData(String filePath) {
ReadAllNcDataUtils rd = new ReadAllNcDataUtils();
List nc = rd.getNcDataList(filePath);
mAltList = rd.getAltList(nc);
mTempList = rd.getTempList(nc);
mPressList = rd.getPressList(nc);
}
public void getRoDataByCondition(List filePathList) {
ReadAllNcDataUtils rd = new ReadAllNcDataUtils();
List nc = rd.getConditionNcDataList(filePathList);
mAltListByCondition = rd.getAltList(nc);
mTempListByCondition = rd.getTempList(nc);
mPressListByCondition = rd.getPressList(nc);
}
public void makeExcel(String filepath, String fpPlus, HSSFWorkbook hf) {
String str = filepath + fpPlus;
File file = new File(str);
if (file.exists()) {
file.deleteOnExit();
file = new File(str);
}
OutputStream outputStream = null;
try {
outputStream = new FileOutputStream(file);
try {
hf.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
3.总结 通过这两篇文章,我们也对使用Java操作Excel有了一定的了解。但是,这只是一些皮毛哈,要想深入了解,有兴趣的可以阅读相应的源码,哈哈哈。这里就不多深入了。 [x] 我们的征途是星辰大海。我就是我,我就是天! [x] 疾风亦有龟途对本文享有版权,转载请标明原文链接,禁止复制! [x] 欢迎访问我的个人博客网站---->夙夜星辰叹 [x] 欢迎关注我的微信公众号:
2020/09/05 06:44
1336
Excel
数据
存储
掩星
java
热门标签