爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5590|回复: 8

用MeteoInfoC后台生成透明云图,叠加到谷歌地图

[复制链接]

新浪微博达人勋

发表于 2014-3-26 09:18:43 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 fancierhsj 于 2014-3-26 09:27 编辑

最近在开发一套B/S的云图和雷达图展示系统,主要展示AWX和GPF云图数据,SWAN和雷达基数据,发现MeteoInfo集成了大量的数据解析方法和图像生成功能,于是尝试用了一下,简单的DEMO,跟大家分享一下。使用的方法比较笨,也请大牛们指导一下有没有其他方法可以生成类似的透明图片。




  1.      public void CreateGPFImage(){
  2.             //GPF文件
  3.      string aFile = Path.Combine(Application.StartupPath, "FY2E_2014_01_07_21_01_E_PJ2.gpf");
  4.      //解析GPF文件,具体代码略
  5.             GPFData g = ReadFormFile(aFile);
  6.      //将解析的数据转换为GridData对象
  7.             GridData gridData = new GridData();
  8.             int XNum = g.wWidth;
  9.             int YNum = g.wHeight;
  10.             double[] array = new double[XNum];
  11.             double[] array2 = new double[YNum];
  12.             for (int i = 0; i < XNum; i++)
  13.             {
  14.                 float xreso = g.fCLonRes;
  15.                 float startlon = 100;
  16.                 float lon = xreso * i + startlon;
  17.                 array = lon;
  18.             }
  19.             for (int i = 0; i < YNum; i++)
  20.             {
  21.                 float yreso = g.fCLatRes;
  22.                 float startlat = 5;
  23.                 float lat = startlat + i * yreso;
  24.                 array2 = lat;
  25.             }
  26.             gridData.X = array;
  27.             gridData.Y = array2;
  28.             gridData.MissingValue = -9999;
  29.             double[,] array3 = new double[YNum, XNum];
  30.      //加载调色板
  31.             string palFile = Path.Combine(Application.StartupPath, "I-01.pal");
  32.             LegendScheme aLS = new LegendScheme(ShapeTypes.Image);
  33.             ImportFromPaletteFile_Unique(palFile, aLS);
  34.             //第一通道数据
  35.      gridData.Data = (double[,])g.dataRegion[0];
  36.             string imgPath = Path.Combine(Application.StartupPath ,"gpf_channel_0.png");
  37.             Image img = getImageFromGridData(gridData, aLS);
  38.             img.Save(imgPath);
  39.      }

  40.         /// <summary>
  41.         /// 从Grid创建图像
  42.         /// </summary>
  43.         /// <param name="gdata">GridData</param>
  44.         /// <param name="als">色标</param>
  45.         /// <returns></returns>
  46.         public static Image getImageFromGridData(GridData gdata, LegendScheme als)
  47.         {
  48.             int width, height, breakNum;
  49.             width = gdata.XNum;
  50.             height = gdata.YNum;
  51.             breakNum = als.BreakNum;
  52.             double[] breakValue = new double[breakNum];
  53.             Color[] breakColor = new Color[breakNum];
  54.             for (int i = 0; i < breakNum; i++)
  55.             {
  56.                 breakValue = Convert.ToDouble(als.LegendBreaks.EndValue);
  57.                 breakColor = als.LegendBreaks.Color;
  58.             }
  59.             Color defaultColor = breakColor[breakNum - 1];    //默认颜色为最后一个颜色
  60.             Bitmap aBitmap = new Bitmap(width, height);
  61.             for (int i = 0; i < height; i++)
  62.             {
  63.                 for (int j = 0; j < width; j++)
  64.                 {
  65.                     double oneValue = gdata.Data[i, j];
  66.                     Color oneColor = defaultColor;
  67.                     //循环只到breakNum-1 是因为最后一个LegendBreaks的EndValue和StartValue是一样的
  68.                     for (int k = 0; k < breakNum - 1; k++)
  69.                     {
  70.                         if (oneValue < breakValue[k])
  71.                         {
  72.                             oneColor = breakColor[k];
  73.                             break;
  74.                         }
  75.                     }
  76.       //如果整个调色板加载,整张图片都有颜色,因此过滤掉大于250的数值,另外可以在这里加入图片透明度的处理
  77.                     if (oneValue < 250)
  78.                         aBitmap.SetPixel(j, height - i - 1, Color.FromArgb(200, oneColor.R, oneColor.G, oneColor.B));
  79.                 }
  80.             }
  81.             Image aImage = (Image)aBitmap;
  82.             return aImage;
  83.         }



QQ截图20140326091420.png
QQ截图20140326091646.png

评分

参与人数 2威望 +5 金钱 +45 贡献 +15 体力 +200 收起 理由
mofangbao + 15 + 5
MeteoInfo + 5 + 30 + 10 + 200 很给力!

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-3-26 09:23:58 | 显示全部楼层
很好的帖子,赞一个!!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-3-26 09:33:11 | 显示全部楼层
MeteoInfo 发表于 2014-3-26 09:23
很好的帖子,赞一个!!!

王老师,如果使用MapView导出图片,是否有办法实行类似的效果?可以过滤掉某些色块,并设置透明度。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-3-26 09:38:29 | 显示全部楼层
fancierhsj 发表于 2014-3-26 09:33
王老师,如果使用MapView导出图片,是否有办法实行类似的效果?可以过滤掉某些色块,并设置透明度。

把MapView的背景色设为透明就可以了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-3-31 10:31:30 | 显示全部楼层
学习了,MeteoInfo强大
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-11-1 14:51:25 | 显示全部楼层
楼主好人
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2015-11-1 16:43:32 | 显示全部楼层
真的真的太感谢啦!!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-11-6 17:11:49 | 显示全部楼层
ReadFormFile(aFile)
这个函数能不能给以我一份?
谢谢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-5-8 18:14:22 | 显示全部楼层
{:5_213:}{:5_213:}{:5_213:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表