下文内容可参考的地图实例:GIS动态扩散模型
https://simu.cool/vue/
1 gdas近7天数据
gdas1数据近七天文件一般名称为:current7days。并不是从当天起,往前推7天,而是上一个计算结束时间起(假如上一个周期的文件名为gdas1.sep21.w5,则对应结束时间是2021年9月30日21时0分),到当天。
实际上,通过试验经验可知,近7天数据文件的结束时间并不确定,有可能不是当日,具体取决于ftp服务。
2 使用需求分析
例如我们会有如下需求:我们做轨迹分析,通常需要预估计算时间,避免出现时间超出范围的情况,如果提前知道每个文件的起始时间,一般归档文件对应的起始时间是确定的,可以直接计算得到,但是current7days文件的起始时间未知。
3 解决方法
使用轨迹计算功能,轨迹计算时,使用前向方式,正数,最大取值7*24=168hours。
执行Trajectory ->Run Model后,Hysplit5.3版本默认的结果文件存放路径:C:\hysplit\working,可以使用文本编辑器打开tdump文件,第一个点就是起算点。得到第一行坐标数据和最后一行数据,即为起始和终止时间。

4 获取current7days数据文件起止时间,Java代码
public static LocalDateTime[] readTrajTimeFromFile(String filePath) {
List<LocalDateTime> lstTimes = new ArrayList<>(256);
int lineNumber = 0;
try {
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = reader.readLine()) != null) {
lineNumber++;
// 从第6行开始处理(跳过前5行)
if (lineNumber >= 6) {
// 分割行(使用正则表达式匹配多个空格)
String[] parts = line.trim().split("\\s+");
// 确保有足够的列(至少11列)
if (parts.length >= 7) {
// 第10列是纬度,第11列是经度
int year = 2000 + Integer.parseInt(parts[2]);
int mon = Integer.parseInt(parts[3]);
int day = Integer.parseInt(parts[4]);
int hour = Integer.parseInt(parts[5]);
LocalDateTime localDateTime = LocalDateTime.of(year, mon, day, hour, 0);
lstTimes.add(localDateTime);
}
}
}
}
} catch (IOException | NumberFormatException ex) {
throw new FileOptionException("无法解析坐标在行: " + lineNumber, ex);
}
if (lstTimes.size() == 0) {
throw new DataOptionException("单条路径分析计算错误,无法提取时间参数");
}
return new LocalDateTime[]{lstTimes.get(0), lstTimes.get(lstTimes.size() - 1)};
}

653

被折叠的 条评论
为什么被折叠?



