疾风亦有龟途 | 搜索
综合排序时间浏览量
全部分类安卓/IOS后端运维web前端软件安装学习/科研疾风龟途月记还是月季技巧杂糅
找到约 6 条结果
伊斯坦布尔对流层顶参数计算
开启线程数,请自己酌情处理。。。 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
2020/09/06 06:47
1728
伊斯坦布尔
对流层顶
掩星
Java
批处理
气象数据读取(2)--- FY-3C(风云)掩星数据读取
是我根据目前(2020-8-13)的数据结构给定的,后续有可能国家卫星气象中心提供的数据可能会不一样,可以自行修改
* 提取数据包括:Global Attributes:掩星点坐标(经纬度),时间(年,月,日)
* Attributes:海拔,温度,压强
* 也可以根据自己需要提取其他相关参数,请自行配置
* TODO:涉及到了文件读,应该要有关闭操作,请在使用后添加.close()进行关闭
*/
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
2020/08/29 05:22
1910
风云
掩星
java
NC
数据提取
气象数据读取(4)--- 优雅的交汇
getGlobalVariablesLists(),在这两个方法中,String vbName和int position
* 是我根据目前(2020-8-13)的数据结构给定的,后续有可能国家卫星气象中心提供的数据可能会不一样(但是一般不会变得),可以自行修改
* 提取数据包括:Global Attributes:掩星点坐标(经纬度),时间(年,月,日)
* Attributes:海拔,温度,压强
* 也可以根据自己需要提取其他相关参数,请自行配置
*
* 重要提醒:!!! 在实例化该工具类后,必须先实现getNcDataList()方法,这样写是为了实例化后少写代码。有利有弊 *
* 涉及到了文件读,应该要有关闭操作,请在使用后添加.close()进行关闭
*/
public class ReadAllNcDataUtils {
private static List
2020/08/29 06:39
1585
解耦
java
掩星
nc
优雅
探空气球数据提取与三次样条插值
1.数据准备 1.1数据下载 在大气科学实验当中,我们经常会使用到探空气球数据。通过它我们可以获得温度、大气压力、湿度、风速风向等气象要素。有很多网站可以对探空数据进行下载。本文使用了NOAA提供的探空数据。数据访问|国家环境信息中心(NCEI)前身为国家气候数据中心 (noaa.gov)。 1.2数据分析 下载后,我们首先对探空数据进行一个简单的了解。从这幅图我们可以看到,探空数据的格式是txt格式的。AFM00040948是这个测站的名字。 接下来我们打开它,对内部数据进行分析。从这张图片可以看出,探空数据其实并不好,存在大量的-9999和-8888等缺省值。我们首先要做的是对这些-9999进行剔除,并生成新的文件。此外,一个原始文件包含了很多个单独的数据,这张图上展示的就是#AEM00040948站点在2018年1月1日0点23分00秒时观测到的数据,一般来讲,一个探空测站一天会有两个数据记录,一个是晚上,一个是中午。在这幅图的下面,还存在很多这样的数据。我们为了方便处理,可以将每一个数据生成单独的文件。这样,无论是在后续科研或者数据处理时都有较好的帮助。 对于每一列数据表示的
2021/08/12 07:09
1628
探空气球
大气科学
java
maven
气象数据读取(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.用户给定纬度,找出给定文件夹中所有满足的数据,并将数据名及其路径存入相应数组中、或者存入到excel里,方便后续使用
//2.用户给定经度,找出给定文件夹中所有满足的数据,并将数据名及其路径存入相应数组中、或者存入到excel里,方便后续使用
//3.用户给定经纬度,找出给定文件夹中所有满足的数据,并将数据名及其路径存入相应数组中、或者存入到excel里,方便后续使用
//4.用户给定时间,给定经纬度,找出给定文件夹中所有满足的数据,并将数据名及其路径存入相应数组中、或者存入到excel里,方便后续使用
//5.其实还有很多case,这里就不一一弄了,上面4个case应该比较多,后面有需要可以自行扩展
/**
* case1 用户给定纬度
*
* @param inputValue 输入你要设定的经纬度值,比如说北纬20.0,南纬35.21等等
* @param IntervalValue 输入阈值范围,比如说±3°,那就是3.0。
* @param filePath 输入你要检索的文件夹路径
* @return
*/
public List getLatMat(Double inputValue, Double IntervalValue, String filePath) {
List matchResult = new ArrayList();
ReadAllNcDataUtils rd = new ReadAllNcDataUtils();
List ncDataList = rd.getNcDataList(filePath);
List fileList = rd.getFileList(filePath);
List roLat = rd.getRoLat(ncDataList);
for (int i = 0; i < roLat.size(); i++) {
Double v = Double.parseDouble(roLat.get(i));
if (Math.abs(inputValue - v) <= IntervalValue) {
matchResult.add(fileList.get(i).getPath());
}
}
return matchResult;
}
/**
* case2 用户给定经度
*
* @param inputValue 输入你要设定的经度值,比如说东经20.0,西经35.21等等
* @param IntervalValue 输入阈值范围,比如说±3°,那就是3.0。
* @param filePath 输入你要检索的文件夹路径
* @return
*/
public List getLonMat(Double inputValue, Double IntervalValue, String filePath) {
List matchResult = new ArrayList();
ReadAllNcDataUtils rd = new ReadAllNcDataUtils();
List ncDataList = rd.getNcDataList(filePath);
List fileList = rd.getFileList(filePath);
List roLon = rd.getRoLon(ncDataList);
for (int i = 0; i < roLon.size(); i++) {
Double v = Double.parseDouble(roLon.get(i));
if (Math.abs(inputValue - v) <= IntervalValue) {
matchResult.add(fileList.get(i).getPath());
}
}
return matchResult;
}
/**
* @param inputValueLat 输入你要设定的经纬度值,比如说北纬20.0,南纬35.21等等
* @param inputValueLon 输入你要设定的经度值,比如说东经20.0,西经35.21等等
* @param IntervalValueLat 输入阈值范围,比如说±3°,那就是3.0。
* @param IntervalValueLon 输入阈值范围,比如说±3°,那就是3.0。
* @param filePath 输入你要检索的文件夹路径
* @return
*/
public List getLatLonMat(Double inputValueLat, Double inputValueLon,
Double IntervalValueLat, Double IntervalValueLon, String filePath) {
List matchResult = new ArrayList();
ReadAllNcDataUtils rd = new ReadAllNcDataUtils();
List fileList = rd.getFileList(filePath);
List ncDataList = rd.getNcDataList(filePath);
List roLat = rd.getRoLat(ncDataList);
List roLon = rd.getRoLon(ncDataList);
for (int i = 0; i < roLat.size(); i++) {
double vLat = Double.parseDouble(roLat.get(i));
Double vLon = Double.parseDouble(roLon.get(i));
if (Math.abs(inputValueLat - vLat) <= IntervalValueLat && Math.abs(inputValueLon - vLon) <= IntervalValueLon) {
matchResult.add(fileList.get(i).getPath());
}
}
return matchResult;
}
/**
* @param inputValueLat 输入你要设定的经纬度值,比如说北纬20.0,南纬35.21等等
* @param inputValueLon 输入你要设定的经度值,比如说东经20.0,西经35.21等等
* @param IntervalValueLat 输入阈值范围,比如说±3°,那就是3.0。
* @param IntervalValueLon 输入阈值范围,比如说±3°,那就是3.0。
* @param time 单位是秒
* @param IntervalValueTime 单位是秒
* @param filePath 输入你要检索的文件夹路径
* @return
*/
public List getLatLonTimeMat(Double inputValueLat, Double inputValueLon,
Double IntervalValueLat, Double IntervalValueLon, Double time, Double IntervalValueTime, String filePath) {
List matchResult = new ArrayList();
ReadAllNcDataUtils rd = new ReadAllNcDataUtils();
List fileList = rd.getFileList(filePath);
List ncDataList = rd.getNcDataList(filePath);
List roLat = rd.getRoLat(ncDataList);
List roLon = rd.getRoLon(ncDataList);
List roHour = rd.getRoHour(ncDataList);
List roMinute = rd.getRoMinute(ncDataList);
List roSecond = rd.getRoSecond(ncDataList);
for (int i = 0; i < roLat.size(); i++) {
double vLat = Double.parseDouble(roLat.get(i));
Double vLon = Double.parseDouble(roLon.get(i));
Double vSecond = Double.parseDouble(roSecond.get(i));
Double vMinute = Double.parseDouble(roMinute.get(i)) * 60;
Double vHour = Double.parseDouble(roHour.get(i)) * 3600;
Double TotalTime = vSecond + vMinute + vHour;
if (Math.abs(inputValueLat - vLat) <= IntervalValueLat && Math.abs(inputValueLon - vLon) <= IntervalValueLon
&& Math.abs(TotalTime - time) <= IntervalValueTime) {
matchResult.add(fileList.get(i).getPath());
}
}
return matchResult;
}
}
3.总结 其实,Java语言是提供可变参数方法的,但是,由于当时写的时候,分开写了,也懒得搞了。并且分开写,好处是,不同的命名方法清晰明了,坏处是,代码变多啦!哈哈哈。 到此,我们的数据读取,时空匹配的工具类已经有了。但是,我们会遇到另外一个问题,那就是每次执行后的数据,我们没有存储下来,不利于后续的科研或者开发活动。况且,随着数据量的增多,每一次run都会耗费大量的资源和时间。所以,将数据以某种方式存储下来,势在必行。下一篇,我们将分享一种存储格式。。。 [x] 我们的征途是星辰大海。我就是我,我就是天! [x] 疾风亦有龟途对本文享有版权,转载请标明原文链接,禁止复制! [x] 欢迎访问我的个人博客网站---->夙夜星辰叹 [x] 欢迎关注我的微信公众号:
2020/09/02 06:40
1509
时空
经度
纬度
海拔
温度
气象数据读取(3)---COSMIC掩星数据读取
获得海拔
*
* @param
* @return
*/
public 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);
}
2020/08/29 06:30
2110
cosmic
java
掩星
数据提取
热门标签