爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 10699|回复: 20

二次开发中,切换不同时次图层控制的问题

[复制链接]

新浪微博达人勋

发表于 2012-5-16 18:07:28 | 显示全部楼层 |阅读模式

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

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

x
我按二次开发教程(六)中的方法读取grads数据,并绘图,在切换不同时次的时候,先删除上一时次的图层,再读取新时次的数据,添加新数据的图层,但这样导致切换的时候不连贯,即屏幕先短暂空白一下(删除上一图层),然后才能出现新数据图层,但用MeteoInfo软件切换不同时次时很连贯,没有闪屏出现,这是为什么呢?该怎么修改呢?附代码如下:
  1.         public int timeindex;
  2.         public MeteoDataInfo aDataInfo = new MeteoDataInfo();
  3.         public GridData press;
  4.         //读取Grads数据
  5.         public void ReadGradsData()
  6.         {
  7.             //Open GrADS data file
  8.             string aFile = Application.StartupPath + "\\Sample\\model.ctl";
  9.             aDataInfo.OpenGrADSData(aFile);
  10.             //设置数据时次
  11.             aDataInfo.TimeIndex = timeindex;
  12.             //Get GridData
  13.             press = aDataInfo.GetGridData("PS");
  14.         }

  15.         //下一时次
  16.         public void NextTimeIndex()
  17.         {
  18.             //删除上一时次的图层
  19.             layersLegend1.ActiveMapFrame.RemoveMeteoLayers();
  20.             layersLegend1.Refresh();

  21.             //读取新的时次的数据
  22.             ReadGradsData(timeindex + 1);

  23.             //Create a legend scheme
  24.             bool hasUndefData = false;
  25.             LegendScheme aLS = LegendManage.CreateLegendSchemeFromGridData(press,
  26.             LegendType.GraduatedColor, ShapeTypes.Polygon, ref hasUndefData);
  27.             //Create a contour layer
  28.             VectorLayer aLayer = DrawMeteoData.CreateShadedLayer(press, aLS, "Shaded_PS");
  29.             //Add layer
  30.             layersLegend1.ActiveMapFrame.AddLayer(aLayer);

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

新浪微博达人勋

0
早起挑战累计收入
发表于 2012-5-16 22:02:56 | 显示全部楼层
不删除隐藏行不行,等下一时次的显示完再删除。不知道射月楼主怎么处理的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-5-16 22:40:36 | 显示全部楼层
删除图层时会触发MapView的重绘事件,可以通过设置MapView的LockViewUpdate来控制(为true时MapView不会被重绘,从而避免闪烁),例如:
layersLegend1.ActiveMapFrame.MapView.LockViewUpdate = true;
layersLegend1.ActiveMapFrame.RemoveMeteoLayers();
layersLegend1.ActiveMapFrame.MapView.LockViewUpdate = false;
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-5-17 18:02:15 | 显示全部楼层
谢谢!已经按您的方法解决了。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-21 00:30:41 | 显示全部楼层

王老师您好,最近读Grads数据,遇到点小问题
  1.          //Create a MeteoDataInfo object
  2.             MeteoDataInfo aDataInfo = new MeteoDataInfo();

  3.             //Open GrADS data file
  4.             //string aFile = Application.StartupPath + "\\Sample\\model.ctl";
  5.             string aFile = Application.StartupPath + "\\Sample\\WRF2012121100_d02.ctl";
  6.             aDataInfo.OpenGrADSData(aFile);

  7.             //Get GridData
  8.             GridData Vis = aDataInfo.GetGridData("VIS");

  9.             //Create a legend scheme
  10.             bool hasUndefData = false;
  11.             LegendScheme aLS = LegendManage.CreateLegendSchemeFromGridData(Vis ,
  12.                         LegendType.GraduatedColor, ShapeTypes.Polygon, ref hasUndefData);

  13.             //Create a contour layer
  14.             VectorLayer aLayer = DrawMeteoData.CreateShadedLayer(Vis , aLS, "Shaded_VIS", "VIS");
  15.             //VectorLayer aLayer = DrawMeteoData.CreateShadedLayer(Vis , aLS, "Shaded_PS", "PS");
  16.             aLayer.IsMaskout = true;

  17.             //Add layer
  18.             layersLegend1.ActiveMapFrame.AddLayer(aLayer);
  19.             layersLegend1.ActiveMapFrame.MoveLayer(aLayer.Handle, 0);
  20.             layersLegend1.Refresh();

  21.             //Change title of the layout
  22.             LayoutGraphic aTitle = mapLayout1.GetTexts()[0];
  23.             aTitle.SetLabelText("MeteoInfo Class Library Demo - Shaded Layer");

  24.             //Add or change the legend in layout
  25.             LayoutLegend aLegend;
  26.             if (mapLayout1.GetLegends().Count > 0)
  27.                 aLegend = mapLayout1.GetLegends()[0];
  28.             else
  29.                 aLegend = mapLayout1.AddLegend(700, 300);
  30.             aLegend.LegendStyle = LegendStyleEnum.Bar_Vertical;
  31.             aLegend.LegendLayer = aLayer;
  32.             if (tabControl1.SelectedIndex == 1)
  33.                 mapLayout1.PaintGraphics();
复制代码

模仿您Demo里面的方法读,感觉读出来的格点文件Vis里面的Data数据正常,但X、Y等数据不对,画出来的图缩小到一定程度可以显示,放大就无图像。。。。。但是用您的MeteoInfo软件能正常打开,请教王老师这是什么原因呢?
2.png
1.jpg

WRF2012121100_d02.dat

10.38 MB, 下载次数: 0, 下载积分: 金钱 -5

WRF2012121100_d02.ctl

669 Bytes, 下载次数: 0, 下载积分: 金钱 -5

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

新浪微博达人勋

发表于 2012-12-21 09:02:46 | 显示全部楼层
wbriver 发表于 2012-12-21 00:30
王老师您好,最近读Grads数据,遇到点小问题

模仿您Demo里面的方法读,感觉读出来的格点文件Vis里面的 ...

数据是有投影的,MapLayer创建时默认是经纬度,因此需要在添加图层之前把MeteoDataInfo读出来的投影赋给MapLayer。具体到你这个例子,AddLayer之前加一句:

aLayer.ProjInfo = aDataInfo.ProjInfo;

添加图层时MapView会读取图层的投影信息,MapView本身也是有投影的,如果图层的投影和MapView的投影不同,会在添加图层的时候自动对图层进行投影转换。如果想保持图层的投影,可以在添加图层前将MapView投影为图层的投影。二次开发系列教程里有投影的讲解,你可以看看。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-21 12:52:13 | 显示全部楼层
本帖最后由 wbriver 于 2012-12-21 12:54 编辑
MeteoInfo 发表于 2012-12-21 09:02
数据是有投影的,MapLayer创建时默认是经纬度,因此需要在添加图层之前把MeteoDataInfo读出来的投影赋给M ...

谢谢王老师,按您的意思加了这句话,但是好像图层没有叠加上去,色标是有的,但是图形木有。。。。没找到原因,折腾了一上午了,请王老师帮忙看看,谢谢!
meteo.jpg
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-21 12:57:27 | 显示全部楼层
wbriver 发表于 2012-12-21 12:52
谢谢王老师,按您的意思加了这句话,但是好像图层没有叠加上去,色标是有的,但是图形木有。。。。没找到 ...

你就写了这几句话,我怎么帮你看呀?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-21 13:13:03 | 显示全部楼层
MeteoInfo 发表于 2012-12-21 12:57
你就写了这几句话,我怎么帮你看呀?
  1.      private void TSMI_GridShaded_Click(object sender, EventArgs e)
  2.         {
  3.             //Create a MeteoDataInfo object
  4.             MeteoDataInfo aDataInfo = new MeteoDataInfo();

  5.             //Open GrADS data file
  6.             //string aFile = Application.StartupPath + "\\Sample\\model.ctl";
  7.             string aFile = Application.StartupPath + "\\Sample\\WRF2012121100_d02.ctl";
  8.             aDataInfo.OpenGrADSData(aFile);
  9.             aDataInfo.TimeIndex = 2;
  10.             //Get GridData
  11.             //GridData press = aDataInfo.GetGridData("PS");
  12.             GridData RH = aDataInfo.GetGridData("RH2");
  13.             //RH.SaveAsSurferASCIIFile("wb.txt");
  14.             //Create a legend scheme
  15.             bool hasUndefData = false;
  16.             LegendScheme aLS = LegendManage.CreateLegendSchemeFromGridData(RH,
  17.                         LegendType.GraduatedColor, ShapeTypes.Polygon, ref hasUndefData);

  18.             //Create a contour layer  
  19.             VectorLayer aLayer = DrawMeteoData.CreateShadedLayer(RH, aLS, "Shaded_RH", "RH2");
  20.             //VectorLayer aLayer = DrawMeteoData.CreateShadedLayer(press, aLS, "Shaded_PS", "PS");
  21.             aLayer.IsMaskout = true;
  22.             aLayer.ProjInfo = aDataInfo.ProjInfo;

  23.             //Add layer
  24.             layersLegend1.ActiveMapFrame.AddLayer(aLayer);
  25.             layersLegend1.ActiveMapFrame.MoveLayer(aLayer.Handle, 0);
  26.             layersLegend1.Refresh();

  27.             //Change title of the layout
  28.             LayoutGraphic aTitle = mapLayout1.GetTexts()[0];
  29.             aTitle.SetLabelText("MeteoInfo Class Library Demo - Shaded Layer");

  30.             //Add or change the legend in layout
  31.             LayoutLegend aLegend;
  32.             if (mapLayout1.GetLegends().Count > 0)
  33.                 aLegend = mapLayout1.GetLegends()[0];
  34.             else
  35.                 aLegend = mapLayout1.AddLegend(700, 300);
  36.             aLegend.LegendStyle = LegendStyleEnum.Bar_Vertical;
  37.             aLegend.LegendLayer = aLayer;
  38.             if (tabControl1.SelectedIndex == 1)
  39.                 mapLayout1.PaintGraphics();
  40.         }
复制代码
呵呵,不好意思王老师,就拿你的那个demo程序改的,应该就是这部分有问题。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-21 13:26:12 | 显示全部楼层
MeteoInfo 发表于 2012-12-21 12:57
你就写了这几句话,我怎么帮你看呀?

数据之前发过,再把数据发一下吧,呵呵,麻烦王老师了~

WRF2012121100_d02.dat

10.38 MB, 下载次数: 1, 下载积分: 金钱 -5

WRF2012121100_d02.ctl

669 Bytes, 下载次数: 1, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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