wangzhibo
2021-09-08 ed0cb1e53f0f26fb31f0b9f5fded71d9e924796b
add wind layer
1个文件已修改
91 ■■■■■ 已修改文件
js/function.js 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
js/function.js
@@ -20,6 +20,7 @@
var layer_1006_roadsection;
var layer_1007_jiedao;
var layer_wind;
function getDefaultDateTime() {
@@ -202,8 +203,98 @@
  addRoadLayer();
  addWindLayer();
}
function addWindLayer(dataTime) {
  //显示高校点
  //getWindParametersByTime(dataTime){
  $.getJSON("http://127.0.0.1:800/shanghai/data/getWindParametersByTime.json", { datatime: '2021-09-08 10:00:00' }, (result) => {
    layer_wind = new mars3d.layer.CanvasWindLayer({
      id:2001,
      pid:99,
      name: "实时风场",
      color: "#ffffff", //颜色
      frameRate: 20, //每秒刷新次数
      speedRate: 60, //风前进速率
      particlesNumber: 1000,
      maxAge: 60,
      lineWidth: 1,
      reverseY: true
    });
    layer_wind.show = false;
    map.addLayer(layer_wind);
    layer_wind.data = convertWindData(result.data);
  });
}
function convertWindData(arr) {
  var arrU = [];
  var arrV = [];
  var xmin = arr[0].x;
  var xmax = arr[0].x;
  var ymin = arr[0].y;
  var ymax = arr[0].y;
  // 风向是以y轴正方向为零度顺时针转,0度表示北风。90度表示东风。
  // u表示经度方向上的风,u为正,表示西风,从西边吹来的风。
  // v表示纬度方向上的风,v为正,表示南风,从南边吹来的风。
  for (let i = 0, len = arr.length; i < len; i++) {
    const item = arr[i];
    if (xmin > item.x) {
      xmin = item.x;
    }
    if (xmax < item.x) {
      xmax = item.x;
    }
    if (ymin > item.y) {
      ymin = item.y;
    }
    if (ymax < item.y) {
      ymax = item.y;
    }
    var u = mars3d.WindUtil.getU(item.speed, item.dir);
    arrU.push(u);
    var v = mars3d.WindUtil.getV(item.speed, item.dir);
    arrV.push(v);
  }
  var rows = getKeyNumCount(arr, "y"); //计算 行数
  var cols = getKeyNumCount(arr, "x"); //计算 列数
  return {
    xmin: xmin,
    xmax: xmax,
    ymax: ymax,
    ymin: ymin,
    rows: rows,
    cols: cols,
    udata: arrU, //横向风速
    vdata: arrV, //纵向风速
  };
}
function getKeyNumCount(arr, key) {
  var obj = {};
  arr.forEach((item) => {
    obj[item[key]] = true;
  });
  var count = 0;
  for (let col in obj) {
    count++;
  }
  return count;
}
function showDetail(layerid,itemCode){