Wechat: yu389741| Email: gisdqy@163.com

Shop:https://www.giserdqy.com/shop

风场浓度场模拟实现思路


风场浓度场

风场浓度场前端可视化思路

风场浓度场
风场浓度场

风场

101*101 网格101*101个点 属性为u,v

  • 根据u,v计算出方向r;uu+vv开平方得到大小l
  • 根据网格及提供的网格四至坐标得到每个点的坐标
  • 所有点添加到地图上,根据l设置点的箭头样式,根据r设置箭头方向
 /// <summary>
        /// 获取风向风力
        /// </summary>
        /// <param name="u"></param>
        /// <param name="v"></param>
        /// <returns></returns>
        public double  GetRadius(double u, double v) {
            double fx = 999.9; //风向
            if (u > 0 & v > 0)
            {
                fx = 270 - Math.Atan(v / u) * 180 / Math.PI;
            }
            else if (u < 0 & v > 0)
            {
                fx = 90 - Math.Atan(v / u) * 180 / Math.PI;
            }
            else if (u < 0 & v < 0)
            {
                fx = 90 - Math.Atan(v / u) * 180 / Math.PI;
            }
            else if (u > 0 & v < 0)
            {
                fx = 270 - Math.Atan(v / u) * 180 / Math.PI;
            }
            else if (u == 0 & v > 0)
            {
                fx = 180;
            }
            else if (u == 0 & v < 0)
            {
                fx = 0;
            }
            else if (u > 0 & v == 0)
            {
                fx = 270;
            }
            else if (u < 0 & v == 0)
            {
                fx = 90;
            }
            else if (u == 0 & v == 0)
            {
                fx = 999.9;
            }

            //风速是uv分量的平方和

            //double fs = Math.Sqrt(Math.Pow(u, 2) + Math.Pow(v, 2));
            List<double> l = new List<double>();
           
            return fx;
        }
 /// 返回网格坐标
        /// </summary>
        /// <returns></returns>
        public List<COORD> BuildCoord() {
            List<COORD> lst = new List<COORD>();
            for (int i = 90; i >= -90; i--)
            {
                for (int m = 0; m < 180; m++)
                {
                    COORD coord = new COORD();
                    coord.x = m;
                    coord.y = i;
                    lst.Add(coord);
                }
                for (int m = -180; m < 0; m++)
                {
                    COORD coord = new COORD();
                    coord.x = m;
                    coord.y = i;
                    lst.Add(coord);
                }
            }
            //for (int i = 101; i >= 1; i--)
            //{
            //    for (int m = 1; m < 102; m++)
            //    {
            //        COORD coord = new COORD();
            //        coord.x = m;
            //        coord.y = i;
            //        lst.Add(coord);
            //    }
            //}
            return lst;
        }

浓度场渲染

101101 网格101101个点 属性为浓度值d

  • 根据网格及提供的网格四至坐标得到每个点的坐标
  • 根据四至计算每个点之间距离,由上面的点生成四边形
  • 所有四边形添加到地图上,根据浓度d设置对应颜色渲染

Have any Question or Comment?

发表评论

您的电子邮箱地址不会被公开。

CAPTCHAis initialing...