/** * 气象-风向转化工具 */ var WWindUtil = {} /** * 风向json */ WWindUtil.WDJson = { N: { en: 'N', cn: '北', desc: '北' }, NNE: { en: 'NNE', cn: '北东北', desc: '东北偏北' }, NE: { en: 'NE', cn: '东北', desc: '东北' }, ENE: { en: 'ENE', cn: '东东北', desc: '东北偏北' }, E: { en: 'E', cn: '东', desc: '东' }, ESE: { en: 'ESE', cn: '东东南', desc: '东南偏东' }, SE: { en: 'SNE', cn: '东南', desc: '东南' }, SSE: { en: 'SSE', cn: '南东南', desc: '东南偏南' }, S: { en: 'S', cn: '南', desc: '南' }, SSW: { en: 'SSW', cn: '南西南', desc: '西南偏南' }, SW: { en: 'SW', cn: '西南', desc: '西南' }, WSW: { en: 'WSW', cn: '西西南', desc: '西南偏西' }, W: { en: 'W', cn: '西', desc: '西' }, WNW: { en: 'WNW', cn: '西西北', desc: '西北偏西' }, NW: { en: 'NW', cn: '西北', desc: '西北' }, NNW: { en: 'NW', cn: '北西北', desc: '西北偏北' }, ERROR: { en: 'error value', cn: '错误数值', desc: '错误数值' } } /** * 风力等级 */ WWindUtil.WRatingArr = [ { min: 0, max: 0.2, level: 0, name: '无风', landScene: '烟示风向' }, { min: 0.3, max: 1.5, level: 1, name: '1 级', landScene: '烟示风向' }, { min: 1.6, max: 3.3, level: 2, name: '2 级', landScene: '感觉有风' }, { min: 3.4, max: 5.4, level: 3, name: '3 级', landScene: '旌旗展开' }, { min: 5.5, max: 7.9, level: 4, name: '4 级', landScene: '吹起尘土' }, { min: 8.0, max: 10.7, level: 5, name: '5 级', landScene: '小树摇摆' }, { min: 10.8, max: 13.8, level: 6, name: '6 级', landScene: '电线有声' }, { min: 13.9, max: 17.1, level: 7, name: '7 级', landScene: '步行困难' }, { min: 17.2, max: 20.7, level: 8, name: '8 级', landScene: '折毁树枝' }, { min: 20.8, max: 24.4, level: 9, name: '9 级', landScene: '小损房屋' }, { min: 24.5, max: 28.4, level: 10, name: '10 级', landScene: '拔起树木' }, { min: 28.5, max: 32.6, level: 11, name: '11 级', landScene: '损毁重大' }, { min: 32.7, max: 36.9, level: 12, name: '12 级', landScene: '摧毁极大' }, { min: 37.0, max: 41.4, level: 13, name: '13 级', landScene: '' }, { min: 41.5, max: 46.1, level: 14, name: '14 级', landScene: '' }, { min: 46.2, max: 50.9, level: 15, name: '15 级', landScene: '' }, { min: 51.0, max: 56.0, level: 16, name: '16 级', landScene: '' }, { min: 56.1, max: null, level: 17, name: '17 级', landScene: '' } ] /** 风向值转文字风向 * @param {Object} windNumberValue 风向值 */ WWindUtil.to16WindDirection = function (windNumberValue) { if (windNumberValue > 360) { return WWindUtil.WDJson.ERROR } let a = Math.ceil(windNumberValue / 11.25) console.log('aaaaa', a) let ret switch (a) { case 32: case 0: ret = WWindUtil.WDJson.N break case 2: case 3: ret = WWindUtil.WDJson.NNE break case 4: case 5: ret = WWindUtil.WDJson.NE break case 6: case 7: ret = WWindUtil.WDJson.ENE break case 8: case 9: ret = WWindUtil.WDJson.E break case 10: case 11: ret = WWindUtil.WDJson.ESE break case 12: case 13: ret = WWindUtil.WDJson.SE break case 14: case 15: ret = WWindUtil.WDJson.SSE break case 16: case 17: ret = WWindUtil.WDJson.S break case 18: case 19: ret = WWindUtil.WDJson.SSW break case 20: case 21: ret = WWindUtil.WDJson.SW break case 22: case 23: ret = WWindUtil.WDJson.WSW break case 24: case 25: ret = WWindUtil.WDJson.W break case 26: case 27: ret = WWindUtil.WDJson.WNW break case 28: case 29: ret = WWindUtil.WDJson.NW break case 30: case 31: ret = WWindUtil.WDJson.NNW break default: ret = WWindUtil.WDJson.ERROR break } return ret } /** 风向值转文字风向 * @param {Object} windNumberValue 风向值 */ WWindUtil.to8WindDirection = function (windNumberValue) { if (windNumberValue > 360) { return WWindUtil.WDJson.ERROR } let a = Math.ceil(windNumberValue / 22.5) let ret switch (a) { case 16: case 1: ret = WWindUtil.WDJson.N break case 2: case 3: ret = WWindUtil.WDJson.NE break case 4: case 5: ret = WWindUtil.WDJson.E break case 6: case 7: ret = WWindUtil.WDJson.SE break case 8: case 9: ret = WWindUtil.WDJson.S break case 10: case 11: ret = WWindUtil.WDJson.SW break case 12: case 13: ret = WWindUtil.WDJson.W break case 14: case 15: ret = WWindUtil.WDJson.NW break default: ret = WWindUtil.WDJson.ERROR break } return ret } /** 风速转风力等级 * @param {Object} value 风速值 (m/s) */ WWindUtil.WindtoLevel = function (value) { let vl = Number(value).toFixed(1) console.log('vl:', vl) if (!vl || vl < 0) { return null } let arr = WWindUtil.WRatingArr if (vl >= arr[arr.length - 1].min) { return arr[arr.length - 1] } for (let i = 0; i < arr.length; i++) { if (vl >= arr[i].min && vl <= arr[i].max) { return arr[i] } } return null } // 风向值转文字 WWindUtil.windValueFormat = function (value) { try { let vl = Number(value) if (!vl || vl > 360 || vl < 0) { return '-' } return WWindUtil.to16WindDirection(value).desc } catch (e) { return '-' } } /** 风速值转文字描述 * @param {Object} value 风速值 */ WWindUtil.windFormatLevel = function (value) { try { let vl = Number(value) if (!vl || vl > 100 || vl < 0) { return '-' } return ( WWindUtil.WindtoLevel(value).level + '级(' + WWindUtil.WindtoLevel(value).name + ')' ) } catch (e) { return '-' } } export { WWindUtil }