风向转化js

/**
 * 气象-风向转化工具
 */
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.0,
    "max":0.2,
    "level":0,
    "name":"无风",
    "landScene":"静,烟直上"
  },
  {
    "min":0.3,
    "max":1.5,
    "level":1,
    "name":"软风",
    "landScene":"烟示风向"
  },
  {
    "min":1.6,
    "max":3.3,
    "level":2,
    "name":"轻风",
    "landScene":"感觉有风"
  },
  {
    "min":3.4,
    "max":5.4,
    "level":3,
    "name":"微风",
    "landScene":"旌旗展开"
  },
  {
    "min":5.5,
    "max":7.9,
    "level":4,
    "name":"和风",
    "landScene":"吹起尘土"
  },
  {
    "min":8.0,
    "max":10.7,
    "level":5,
    "name":"劲风",
    "landScene":"小树摇摆"
  },
  {
    "min":10.8,
    "max":13.8,
    "level":6,
    "name":"强风",
    "landScene":"电线有声"
  },
  {
    "min":13.9,
    "max":17.1,
    "level":7,
    "name":"疾风",
    "landScene":"步行困难"
  },
  {
    "min":17.2,
    "max":20.7,
    "level":8,
    "name":"大风",
    "landScene":"折毁树枝"
  },
  {
    "min":20.8,
    "max":24.4,
    "level":9,
    "name":"烈风",
    "landScene":"小损房屋"
  },
  {
    "min":24.5,
    "max":28.4,
    "level":10,
    "name":"狂风",
    "landScene":"拔起树木"
  },
  {
    "min":28.5,
    "max":32.6,
    "level":11,
    "name":"暴风",
    "landScene":"损毁重大"
  },
  {
    "min":32.7,
    "max":36.9,
    "level":0,
    "name":"飓风",
    "landScene":"摧毁极大"
  },
  {
    "min":37.0,
    "max":41.4,
    "level":13,
    "name":"",
    "landScene":""
  },
  {
    "min":41.5,
    "max":46.1,
    "level":14,
    "name":"",
    "landScene":""
  },
  {
    "min":46.2,
    "max":50.9,
    "level":15,
    "name":"",
    "landScene":""
  },
  {
    "min":51.0,
    "max":56.0,
    "level":16,
    "name":"",
    "landScene":""
  },
  {
    "min":56.1,
    "max":null,
    "level":17,
    "name":"",
    "landScene":""
  }
]

/** 风向值转文字风向
 * @param {Object} windNumberValue 风向值
 */
WWindUtil.to16WindDirection = function(windNumberValue) {
  if (windNumberValue > 360) {
    return WWindUtil.WDJson.ERROR;
  }
  let a = Math.ceil(windNumberValue / 11.25);
  let ret;
  switch (a) {
    case 32:
    case 1:
      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);
  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
};

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容