疾风亦有龟途 | 搜索
综合排序时间浏览量
全部分类安卓/IOS后端运维web前端软件安装学习/科研疾风龟途技巧杂糅
找到约 3 条结果
Python制图+Java数据处理---高效制作雷评报告
1.前言 1.1总体思路 最近接到一个任务,通过使用近11年的雷电数据对给定经纬度站点的雷击情况进行统计分析,并制作相应的统计图。任务很简单,需求也很简单。无非就是数据提取,筛选,计算,并画图,但是就是烦,站点很多,数据很杂,格式不统一。可以做的工具有很多,matlab,python,java,Arcgis等等。善其事,利其器。本次项目,我们使用Python(画图),用Java完成数据的处理与雷评报告的自动生成。其实python可以完成整个操作流程,但是因为一些原因,还是配合使用处理吧。下图是整个工程的流程思路。整个流程很简单。最重要的是预处理环节,涉及到各种工具类的编写。接下来我们针对每一个环节写代码。 1.2工程结构 工程的结构也比较简单。为了优雅一点。我们仍然创建一个maven工程。还是老三样,实体类,任务,以及工具类。后续如果想部署到服务器,并给出相应的Api接口,需要更改项目结构,并引入其他东西。这都是后话了,有空再搞。 2.工具类编写 工具类的使用,可以大幅优化我们的项目结构,减少代码量。完成代码的复用。 2.1距离工具类编写getDistance 为了提取站点周围2km或者3km的闪击点要素。我们需要计算辖区内各个闪击点与站点的距离。给定两个点A和B,已知两点的经纬度值,和地球半径。我们可以很快计算得到两者之间的距离。 public class getDistance {
public static double getDis(double latitude1, double longitude1,
double latitude2, double longitude2) {
// 纬度
double lat1 = Math.toRadians(latitude1);
double lat2 = Math.toRadians(latitude2);
// 经度
double lng1 = Math.toRadians(longitude1);
double lng2 = Math.toRadians(longitude2);
// 纬度之差
double a = lat1 - lat2;
// 经度之差
double b = lng1 - lng2;
// 计算两点距离的公式
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(b / 2), 2)));
// 弧长乘地球半径, 返回单位: 千米
s = s * 6370.856;
return s;
}
}
该工具类返回值就是Double类型的两点间距离。 2.2合格条件站点工具类编写getStation 上面我们已经有了计算两点间距离的工具类。接下来我们开始计算所有符合条件的点。最后将所有符合条件的点放入到一个集合当中,返回,供接下来的任务使用。 我们的闪击数据是存放在excel中的。所以我们需要在pom.xml文件中引入相应的依赖。有了这个依赖,我们可以方便的使用java来对excel表格进行处理。 数据示例
org.apache.poi
poi
3.9
org.apache.poi
poi-ooxml
3.9
在计算过程中,为了对计算得到的点进行描述,我们需要创建一个bean类来对其进行描述。这就是面向对象的思想。万物皆对象。我们把这个bean类命名为stanData。其代码很简单,每一个属性都是和原来在excel中的属性相对应,虽然有很多属性在后面都用不上,但是为了保证数据的完整性,这里还是将其写了出来。篇幅有限,相应get,set方法已省略。 public class standData {
private String mapinfo;
private String id;
private String time;
private String hour;
private String minute;
private String second;
private String lat;
private String lon;
private String strength;
private String gradient;
private String error;
private String method;
private String province;
private String country;
private String city;
}
通过上面的准备,我们可以开始编写getStation工具类了。其实这里写的有一点不好,把有的参数写死了。后续可以优化一下。 public class getStation {
/**
*
* @param file 所要处理的excel文件
* @param rule1 想要所在辖区的名字(需要和excel中名字一致)
* @param latitude 站点的纬度
* @param longitude 站点的经度
* @param distance 圆的半径距离(如站点周围2km,则设置为2.0)
* @return 返回的是符合规则的点的对象集合
*/
public static ArrayList get(String file, String rule1, Double latitude, Double longitude, Double distance){
XSSFWorkbook book = null;
try {
book = new XSSFWorkbook(file);
//获取工作表
XSSFSheet sheet = book.getSheetAt(0);
//获得行数
int rows = sheet.getPhysicalNumberOfRows();
//System.out.println(rows);
ArrayList ruleList = new ArrayList();
for (int i = 1; i < rows; i++) {
XSSFRow row = sheet.getRow(i);
String s = row.getCell(13).toString();
if (s.equals(rule1)) {
standData standData = new standData();
standData.setMapinfo(row.getCell(0).toString());
standData.setId(row.getCell(1).toString());
standData.setTime(row.getCell(2).toString());
standData.setHour(row.getCell(3).toString());
standData.setMinute(row.getCell(4).toString());
standData.setSecond(row.getCell(5).toString());
standData.setLat(row.getCell(6).toString());
standData.setLon(row.getCell(7).toString());
standData.setStrength(row.getCell(8).toString());
standData.setGradient(row.getCell(9).toString());
standData.setError(row.getCell(10).toString());
standData.setMethod(row.getCell(11).toString());
standData.setProvince(row.getCell(12).toString());
standData.setCountry(row.getCell(13).toString());
standData.setCity(row.getCell(14).toString());
ruleList.add(standData);
}
}
//System.out.println(ruleList.size());
//开始筛选出三公里
ArrayList distanceList = new ArrayList();
for (int i = 0; i < ruleList.size(); i++) {
String lat = ruleList.get(i).getLat();
String lon = ruleList.get(i).getLon();
double dis = getDistance.getDis(parseDouble(lat), parseDouble(lon), latitude, longitude);
if (dis <= distance) {
//System.out.println(dis);
distanceList.add(ruleList.get(i));
}
}
return distanceList;
} catch (Exception e) {
}
return null;
}
}
通过实例化该工具类,我们可以获得一个站点周围2km/3km范围内的所有闪击点的各种要素的list集合。 2.3需求工具类编写createData 上面我们得到了所有符合条件的点。但是这还是不行的。我们需要对这些数据进行相应的统计分析。得到正闪,负闪的最大强度,平均强度,年份对应的闪击数,月份对应的闪击数,每小时对应的闪击数。以及每个闪击强度范围对应的闪击数。具体如下表。 2011-2020闪击次数 正闪次数 平均正闪强度 最大正闪强度 负闪次数 平均负闪强度 最大负闪强度 针对上面的表格,我们要创建一个light的bean类来对其进行描述。 public class light {
private int times;
//Positive number
private double positiveTimes;
//negative number
private double negativeTimes;
//averagePositive value
private double averagePositive;
//averageNegative value
private double averageNegative;
//最大正闪
private double maxPositive;
//最大负闪
private double maxNegative ;
//每年发生的闪击次数
private ArrayList yearTimes;
private ArrayList monthTimes;
private ArrayList dayTimes;
private ArrayList rangeTimes;
private ArrayList
2021/11/08 11:13
527
雷评
闪电
java
python
皮卡丘
经典美剧-老友记(附下载链接)
1.老友记简介 《老友记》是一部美国电视情景喜剧,由大卫·克莱恩和玛塔·卡芙曼创作,珍妮佛·安妮斯顿、柯特妮·考克斯、丽莎·库卓、马特·勒布朗、马修·派瑞和大卫·史威默主演。故事以生活在纽约曼哈顿的六个老友为中心,描述他们携手走过的十年风雨历程。全剧共10季236集,于1994年9月22日至2004年5月6日在全国广播公司(NBC)播映。 《老友记》是史上最受欢迎的电视剧之一,全十季收视均列年度前十 ,至今仍在全球各地热播和重映 。《老友记》亦广受好评,获得第54届艾美奖喜剧类最佳剧集奖 ,提名黄金时段艾美奖累计62次。 詹姆斯·伯罗斯1993年拍摄了第一季《老友记》,该剧一炮而红,其后十年《老友记》每年一季,成为一代美国人的记忆,在美国权威媒体《好莱坞报道》2015年评选出的100部最受欢迎美剧中名列第一。 2.第一季 瑞秋、莫妮卡、菲比、钱德、乔伊和罗斯悉数登场。罗斯刚刚因为他的同性恋妻子卡萝(Carol)而离婚。此时莫妮卡, 菲比和罗斯都单独居住,只有钱德和乔伊住在一个公寓里。这时莫妮卡的老朋友瑞秋穿着婚纱闯进了Central Perk咖啡馆,她刚刚逃脱了自己和未婚夫贝瑞(
2021/04/11 11:55
564
老友记
美剧
百度云
链接
六人行
纯净无毒免费xshell7下载安装
Xshell是一款功能强大的远程终端连接管理软件,支持多种远程协议,可以在多端进行高效安全的远程连接,同时还可以帮助你有效的管理远程服务器,允许用户自定义键盘映射,可对VB脚本支持,支持进行上传或下载文件、动态端口转发等操作,是用户远程连接的优秀软件。支持简体中文,可以让用户无语言限制轻松地使用,它是目前最新推出的新版本软件,采用全新的用户UI设计界面,新增明亮和暗色两种新的主题模式,用户可根据需求选择主题模式进行使用,并引入组合窗口,这个作用是方便用户准备多行脚本或字符串,并同时将其传送到当前会话或多个会话中,从而提高用户的工作效率。新版还支持PKCS#11协议,这个功能的好处是什么呢?就是能够让用户使用硬件令牌(HSM)和智能卡等设备安全地存储用户使用的私人密钥,以提高安全性。另外,下文提供了版本软件详细的安装教程和使用教程,需要的用户快来这里下载体验吧。 1.安装教程 1、双击运行软件安装程序,进入软件安装界面。 2、点击“我接受许可证协议中的条款”,同意软件相关许可协议。 3、点击“浏览”选择软件安装路径,可更改,也可按照默认设置路径即可。 4、依提示进行软件安装,安装到这里
2021/05/03 07:37
817
xshell
无毒
免费
linux
远程
热门标签