import java.util.LinkedHashMap;
import java.util.Map;
/**
* 气象工具
*/
public class WeatherUtil {
// 风力
private static final Map<String, Range> WIND_POWER = new LinkedHashMap<String, Range>() {
{
put("无风", new Range(0.0, 0.2));
put("软风", new Range(0.3, 1.5));
put("轻风", new Range(1.6, 3.3));
put("微风", new Range(3.4, 5.4));
put("和风", new Range(5.5, 7.9));
put("劲风", new Range(8.0, 10.7));
put("强风", new Range(10.8, 13.8));
put("疾风", new Range(13.9, 17.1));
put("大风", new Range(17.2, 20.7));
put("烈风", new Range(20.8, 24.4));
put("狂风", new Range(24.5, 28.4));
put("暴风", new Range(28.5, 32.6));
put("飓风", new Range(32.7, 100));
}
};
// 风力等级
private static final Map<String, String> WIND_POWER_LEVEL = new LinkedHashMap<String, String>() {
{
put("无风", "零级");
put("软风", "一级");
put("轻风", "二级");
put("微风", "三级");
put("和风", "四级");
put("劲风", "五级");
put("强风", "六级");
put("疾风", "七级");
put("大风", "八级");
put("烈风", "九级");
put("狂风", "十级");
put("暴风", "十一级");
put("飓风", "十二级");
}
};
// 风向
private static final Map<String, Range> WIND_DIRECTION = new LinkedHashMap<String, Range>() {
{
put("北", new Range(348.76, 11.25));
put("东北偏北", new Range(11.26, 33.75));
put("东北", new Range(33.76, 56.25));
put("东北偏东", new Range(56.26, 78.75));
put("东", new Range(78.76, 101.25));
put("东南偏东", new Range(101.26, 123.75));
put("东南", new Range(123.76, 146.25));
put("东南偏南", new Range(146.26, 168.75));
put("南", new Range(168.76, 191.25));
put("西南偏南", new Range(191.26, 213.75));
put("西南", new Range(213.76, 236.25));
put("西南偏西", new Range(236.26, 258.75));
put("西", new Range(258.76, 281.25));
put("西北偏西", new Range(281.26, 303.75));
put("西北", new Range(303.76, 326.25));
put("西北偏北", new Range(326.26, 348.75));
}
};
/**
* 查找风力
* @param windSpeed
* @return
*/
public static String findWindPower(Double windSpeed) {
String windPower = "";
if (windSpeed == null)
return windPower;
for (Map.Entry<String, Range> power : WIND_POWER.entrySet()) {
String key = power.getKey();
Range range = power.getValue();
Double upper = range.getUpper();
// windSpeed <= upper
if (windSpeed.compareTo(upper) <= 0) {
windPower = key;
break;
}
}
return windPower;
}
/**
* 查找风向
* @param value
* @return
*/
public static String findWindDirection(Double value) {
String windDirection = "";
if (value == null)
return windDirection;
for (Map.Entry<String, Range> direction : WIND_DIRECTION.entrySet()) {
String key = direction.getKey();
Range range = direction.getValue();
Double lower = range.getLower();
Double upper = range.getUpper();
// lower <= value && upper <= value
if (lower.compareTo(value) <= 0 && upper.compareTo(value) <= 0) {
windDirection = key;
break;
}
// lower <= value || value <= upper
if (lower.compareTo(value) <= 0 || value.compareTo(upper) <= 0) {
windDirection = key;
break;
}
}
return windDirection;
}
private static class Range {
public double lower, upper;
public Range(double lower, double upper) {
this.lower = lower;
this.upper = upper;
}
public double getLower() {
return lower;
}
public void setLower(double lower) {
this.lower = lower;
}
public double getUpper() {
return upper;
}
public void setUpper(double upper) {
this.upper = upper;
}
}
}