疾风亦有龟途 | 搜索
综合排序时间浏览量
全部分类安卓/IOS后端运维web前端软件安装学习/科研疾风龟途月记还是月季技巧杂糅
找到约 19 条结果
气象数据读取(6)---事半功倍之存入Excel
1.数据的存储 在进行日常工作中,我们经常会遇到对数据的存储的需求。特别是在气象研究当中,对数据的存储,复现尤为重要。不同的编程语言,有不同的方法。今天我们来聊聊如何如何使用Java将Nc数据保存到Excel中。后续如果有时间,还可以做一下txt文件的读,存。 2.引入jar包 2.1jar包的引入 在第一篇文章的时候,我们介绍了pom文件和jar包。这里我们就不详细介绍了。我们在pom文件里加入
org.apache.poi
poi
3.9
org.apache.poi
poi-ooxml
2020/09/04 06:43
1126
excel
java
存储
掩星
Springboot上传图片到腾讯云cos
1.开启存储桶 这里默认你已经有了腾讯云账户,哈哈。很简单,拿微信去注册就行了。接下来介绍cos。 在控制台选择对象存储 选择存储桶列表,新建存储桶 这些值按照自己的喜欢填写然后点击确定: 然后点击这个存储桶,进入存储桶设置 记住这些基本信息,下面会用得到 2.java实现 2.1添加依赖 在我们的springboot工程中添加相应的依赖。这里尽量选这个版本,低于这个版本的,对于存储桶名称的正则识别是不对的。
com.qcloud
cos_api
5.6.8
2.2编写上传工具类 public class UploadImageToCosUtils {
public static String uploadImage(MultipartFile file) {
// 1 初始化用户身份信息(secretId, secretKey,可在腾讯云后台中的API
2021/05/20 09:24
1391
springboot
存储桶
腾讯云
cos
java
Python制图+Java数据处理---高效制作雷评报告
1.前言 1.1总体思路 最近接到一个任务,通过使用近11年的雷电数据对给定经纬度站点的雷击情况进行统计分析,并制作相应的统计图。任务很简单,需求也很简单。无非就是数据提取,筛选,计算,并画图,但是就是烦,站点很多,数据很杂,格式不统一。可以做的工具有很多,matlab,python,java,Arcgis等等。善其事,利其器。本次项目,我们使用Python(画图),用Java完成数据的处理与雷评报告的自动生成。其实python可以完成整个操作流程,但是因为一些原因,还是配合使用处理吧。下图是整个工程的流程思路。整个流程很简单。最重要的是预处理环节,涉及到各种工具类的编写。接下来我们针对每一个环节写代码。 1.2工程结构 工程的结构也比较简单。为了优雅一点。我们仍然创建一个maven工程。还是老三样,实体类,任务,以及工具类。后续如果想部署到服务器,并给出相应的Api接口,需要更改项目结构,并引入其他东西。这都是后话了,有空再搞。 2.工具类编写 工具类的使用,可以大幅优化我们的项目结构,减少代码量。完成代码的复用。 2.1距离工具类编写getDistance 为了提取站点周围2km
2021/11/08 11:13
854
雷评
闪电
java
python
皮卡丘
气象数据读取(5)---时空特征匹配
1.需求分析 对于学习气象,遥感,地信的同学来说。对于时空特征这一概念都比较熟悉。我们在做科研时,总喜欢拿自己得出的结果和其他的权威数据作比较。这时,就离不开对时间和空间特征的匹配。这篇文章开始,我们就使用Java语言对气象数据进行时空特征匹配。 2.代码时刻 2.1代码逻辑 利用ReadAllNcDataUtils计算GNOS的year,month,day,hour,minute,second,lat,lon 利用ReadAllNcDataUtils计算COSMIC的year,month,day,hour,minute,second,lat,lon 根据上述计算参数,设计相应get方法(要给用户提供相应接口,满足用户的时空匹配特征) coding 2.2工具类实现 通过上面的步骤分析,我相信大家已经能明白其中逻辑。我们在utils下新建RoMatchingUtils工具类,具体代码如下 public class RoMatchingUtils {
//case分析
//1.用户给定纬度,找出给定文件夹中所有满足的数据,并将数据名及其路径存入相应数组中、或者存入到
2020/09/02 06:40
973
时空
经度
纬度
海拔
温度
导航页面制作
1.导航页创建 创建这个页面主要是因为想记录和分享一下平时用到的软件,网站等。 2.原型图 3.数据库设计 首先要设计好两个数据库,一个是类型数据库,他的字段有: id,name,description,order,status,create_time,update_time 这个数据库就是具体的某一个软件的信息,他的字段有: id,name,cover,category_id,url,view_count,create_time,update_time 4.后台代码编写 4.1 导航分类 4.1.1 实体类编写 这个实体类和文章的分类基本上是一模一样,所以很好写。 package net.sunofbeach.blog.pojo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
@Entity
@Table( name ="tb_
2021/05/21 12:54
775
导航
破解
软件
office
影视大全
气象数据读取(2)--- FY-3C(风云)掩星数据读取
文件进行读取,然后存入到相应的数组里,以便后面科研任务的使用。但是,数据实在是太多了,一个一个用软件读,那岂不是要累死... 所以我们可以借助Java语言 总结起来,可以归纳为: 获取存放NC文件的文件路径 根据文件路径,获取每一个NC文件的全路径名,并存放到一个数组中 对上述数组里的每一个NC文件进行读取,获得Global Attributes和Variables。 提供相应的get方法,让外部方便使用我们的工具类 我们将一个复杂的问题步骤话,那么我们便能轻松的搞定每一个小的步骤。这样不但思路清晰,还能少掉头发。哈哈哈 3.2 代码实现 首先,我们在utils下创建一个ReadFyNcDataUtils类 代码很简单,注释写的也比较详细 public class ReadFyNcDataUtils {
/**
* 该工具类针对FY-3C卫星的GNOS掩星数据进行数据提取
* 提示:getVariablesLists(); getGlobalVariablesLists(),在这两个方法中,String vbName和int position
*
2020/08/29 05:22
1253
风云
掩星
java
NC
数据提取
自动高效制作短期预报与气候公报软件1.0版本
1.需求 最近在工作中遇到了一个发预报的业务。这是一项简单的工作,但是因为每天要发送两次,每次要复制粘贴,再转格式,归档时还要创建对应日期的文件夹,这无形中浪费了很多时间,并且有时候会不经意间搞错时间,日期什么。忙起来,还会忘记发预报。 基于此,我们思考,如何通过改善生产工具,来提高我们的生产力。第一个想到的办法就是通过编程来解决这个问题。那使用什么语言好一些呢?其实这个倒是无所谓,主流的java和python都可以实现。本文以python语言为例,对整个项目进行介绍,抛砖引玉,希望大家不吝指教。 文末会给出气候公报的部分源码,仅供参考。 2.思路与解决方案 2.1气候公报 2.1.1 思路 首先我们对要生成目标文件有一个简单的了解。即,中国局每天会生成一个天气公报,我们需要把这个公报内容,生成一个pdf文件,并保存为相应的pdf文件。思路很清晰。 爬取网页相关内容 生成一个word对象,将爬取到的内用进行格式整理,并写入到word内 将word转换为pdf文件,并保存。 通过邮件/微信消息通知发报人,今天要发报了。 有了思路,我们就要开始写代码了。 2.1.2 代码 首先是对网站的
2021/11/29 05:43
785
摸鱼
神器
气候
天气
伊斯坦布尔对流层顶参数计算
1.确定地理位置 最近接到一个任务。计算伊斯坦布尔的对流层顶参数,该城市在北纬 41°, 东经 28。要求是使用COSMIC掩星数据。在前面,我们写各种提取掩星数据的工具类,现在我们就把他们利用起来。不过在正式开始计算时,我们还要进行数据准备。我们要完成对数据的归档。如下图所示。在归档时使用到了复制操作,复制工具类请参考我的另一篇文章todo 2.计算参数 在计算时,根据要求,分为逐年,逐月两种方法。之所以不分季节,是因为,我只知道中国大部分地区四季分明,至于本文研究区域是否分明,我并不清楚。首先我们研究逐月。另外比较重要的一点,是对计算结果的存储。这要是用到另外一个工具类,该工具类请参考我的另一篇文章todo。本文也涉及多线程编程,但是很简单。下面贴上代码。 重写run方法 static class threadDemo extends Thread{
private String yourFilePath;
private String rolePath;
public threadDemo(String yourFilePath, String rolePath) {
this.yourFilePath = yourFilePath;
this.rolePath = rolePath;
}
@Override
public void run() {
RoMatchingUtils ro = new RoMatchingUtils();
List latLonMat = ro.getLatLonMat(41, 28, 2, 2, yourFilePath);
if (latLonMat!=null) {
CPTutils cpTutils = new CPTutils();
CPTutils.Result thVar = cpTutils.getThVar(latLonMat);
makeExcel(yourFilePath,rolePath,thVar);
}else {
log.info("没有匹配结果。。。。");
}
}
}
在run方法里面用到了一个makeExcel的方法,这个方法是为我们后面写入excel提供相应的参数 makeExcel方法 private static void makeExcel(String yourFilePath,String filePath,CPTutils.Result thVar){
//第一步,创建一个workbook对应一个excel文件
HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
//第二部,在workbook中创建一个sheet对应excel中的sheet
HSSFSheet sheet = hssfWorkbook.createSheet("用户表一");
//第三部,在sheet表中添加表头第0行,老版本的poi对sheet的行列有限制
HSSFRow row = sheet.createRow(0);
//第四步,创建单元格,设置表头
HSSFCell cell = row.createCell(0);
cell = row.createCell(0);
cell.setCellValue("alt");
cell = row.createCell(1);
cell.setCellValue("temp");
cell = row.createCell(2);
cell.setCellValue("press");
for (int i = 0; i < thVar.getAltList().size(); i++) {
HSSFRow row1 = sheet.createRow(i + 1);
row1.createCell(0).setCellValue(thVar.getAltList().get(i));
row1.createCell(1).setCellValue(thVar.getTempList().get(i));
row1.createCell(2).setCellValue(thVar.getPressList().get(i));
}
String lb = yourFilePath.substring(filePath.length()-1);
//TODO:再加一个标记量
String str = "/19GlobalVariables"+lb+".xls";
log.info("srt========>" + str);
saveAsExcelUtils.saveAsExcel(filePath, str, hssfWorkbook);
}
这个方法主要是创建一个HSSFWorkbook对象,并对该对象进行初步的设置,可以看到,在最后我们有用到了一个saveAsExcelUtils方法,这个方法是真正的将数据写入excel saveAsExcelUtils方法 /**
* 将你的数据保存为excel,调用该方法需要三个参数,所以在执行前必须提供下面三个参数
* @param filepath 目标存储文件夹
* @param fpPlus 你想存储的名字
* @param hf 一个excell对象
*/
public static void saveAsExcel(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();
}
}
}
}
可以看到,这个方法需要的三个参数,我们都已获得。那么我们只需要在main方法中调用他就好了: main方法 public static void main(String[] args) {
threadDemo demo1 = new threadDemo(yourFilePath1,roleFilePath1);
demo1.start();
threadDemo demo2 = new threadDemo(yourFilePath2,roleFilePath2);
demo2.start();
}
开启线程数,请自己酌情处理。。。 2.1逐月 2.1.1 2017年参数 时间 一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月 海拔 18.11 14.79 18.00 18.65 NULL 15.61 17.54 18.40 NULL 17.33 15.24 18.23 压强 71.20 142.42 74.72 67.26 NULL 124.95 87.20 76.63 NULL 86.97 124.53 68.00 温度 -64.48 -64.81 -62.54 -61.82 NULL -62.60 -65.42 -62.87 NULL -66.60 -62.92 -78.42 2.1.2 2018年参数 时间 一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月 海拔 15.77 18.70 15.76 11.60 16.97 16.766 18.20 15.61 16.95 NULL 15.78 17.56 压强 120.60 66.89 122.94 NULL 105.15 101.40 80.16 108.45 92.82 NULL 107.94 85.52 温度 -63.31 -62.08 -64.43 -64.40 -60.70 -61.68 -65.14 -60.59 -62.18 NULL -61.32 -63.04 2.1.3 2019年参数 时间 一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月 海拔 13.54 NULL 14.03 NULL NULL NULL NULL NULL NULL 17.16 17.84 NULL 压强 169.92 NULL 150.26 NULL NULL NULL NULL NULL NULL 97.60 75.95 NULL 温度 -65.11 NULL -67.62 NULL NULL NULL NULL NULL NULL -62.64 -69.54 NULL 从上面三个表可以看出,2019年的数据并不好,不知道为什么? 3.总结 终于做完了。总结下来就是掩星并不适合做小区域的研究!!!
2020/09/06 06:47
1251
伊斯坦布尔
对流层顶
掩星
Java
批处理
气象数据读取(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 mLat = new ArrayList();
private static List mLon = new ArrayList();
private static List mYear = new ArrayList();
private static List mMonth = new ArrayList();
private static List mDay = new ArrayList();
private static List mHour = new ArrayList();
private static List mMinute = new ArrayList();
private static List mSecond = new ArrayList();
private static List mAlts = new ArrayList();
private static List
- mAltsList = new ArrayList
- ();
private static List
- mTempsList = new ArrayList
- ();
private static List
- mPressList = new ArrayList
- ();
private static List
- getAltList() {
return getVariablesLists("MSL_alt", mAlts, mAltsList);
}
/**
* 获得温度
*
* @param
* @return
*/
public List
- getTempList() {
return getVariablesLists("Temp", mTemps, mTempsList);
}
/**
* 获得压强
*
* @param
* @return
*/
public List
- getPressList() {
return getVariablesLists("Pres", mPress, mPressList);
}
private static List
- getVariablesLists(String vbName,
List
- mVrsList) {
for (NetcdfFile netcdfFile : mNc) {
Variable pres = netcdfFile.findVariable(vbName);
Array read = null;
try {
read = pres.read();
} catch (IOException e) {
e.printStackTrace();
}
for (long i = 0; i < read.getSize(); i++) {
double aDouble = read.getDouble((int) i);
mVrs.add(aDouble);
}
mVrsList.add(mVrs);
}
return mVrsList;
}
}
从上述代码中可以看出,COSMIC的代码和GNOS的代码99%的地方都是一样的。只是改了很少的地方。 4. 优雅的交汇 从上文中我们可以看出,重复代码实在是太多了,并且有的代码我们是为了实现功能而实现功能,一点都不优雅。这对一个程序员来说是不能忍的,那我们要如何抽取来实现代码复用? 另外这里的代码在某些情况下也会出现一个小bug,至于是什么bug,我们先卖个关子,后面用到时,我们细讲一下。。 [x] 我们的征途是星辰大海。我就是我,我就是天! [x] 疾风亦有龟途对本文享有版权,转载请标明原文链接,禁止复制! [x] 欢迎访问我的个人博客网站---->夙夜星辰叹 [x] 欢迎关注我的微信公众号:
2020/08/29 06:30
1399
cosmic
java
掩星
数据提取
热门标签