爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 28183|回复: 64

MeteoInfo二次开发教程(五)

[复制链接]

新浪微博达人勋

发表于 2012-4-15 21:44:05 | 显示全部楼层 |阅读模式

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

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

x
接着上一讲补充一下多MapFrame的功能,在LayersLegend中用鼠标右键点击MapFrame名,在弹出菜单中有Active子菜单,用这个功能可以设置LayersLegend中的ActiveMapFrame。为了使MapView显示为ActiveMapFrame中的MapView,也就是在切换ActiveMapFrame后MapView也跟着切换。写一个SetMapView函数来切换MapView,再给LayersLegend对象添加一个ActiveMapFrameChanged事件,代码如下:
  1.         private void SetMapView()
  2.         {
  3.             //Add map view
  4.             tabControl1.TabPages[0].Controls.Clear();
  5.             tabControl1.TabPages[0].Controls.Add(mapView1);
  6.             mapView1.Dock = DockStyle.Fill;
  7.         }

  8.         private void ActiveMapFrameChanged(object sender, EventArgs e)
  9.         {
  10.             mapView1 = layersLegend1.ActiveMapFrame.MapView;
  11.             SetMapView();
  12.             if (tabControl1.SelectedIndex == 0)
  13.                 mapView1.PaintLayers();
  14.         }
复制代码

在主窗体的Load事件中加入如下代码:
  1.             //Add ActiveMapFrameChanged event
  2.             layersLegend1.ActiveMapFrameChanged += new EventHandler(ActiveMapFrameChanged);
复制代码

下面再说说处理气象数据,以GrADS格式的经典示例数据model.ctl和model.dat为例。气象数据中有一个很重要的类MeteoDataInfo,先创建一个对象,然后可以用各种Open语句打开不同格式的气象数据,比如用OpenGrADSData函数来打开GrADS格式数据。下一步是获取格点或者站点数据,分别用GridData和StationData类来表示,这两个类也非常重要。之后可以创建并添加图层。添加一个MeteoData菜单和GrADS Data子菜单,在子菜单里再加一个Contour菜单,打开model.ctl文件并绘制等值线图层的代码如下:
  1.         private void TSMI_GrADSContour_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.             aDataInfo.OpenGrADSData(aFile);

  8.             //Get GridData
  9.             GridData press = aDataInfo.GetGridData("PS");

  10.             //Create a legend scheme
  11.             bool hasUndefData = false;
  12.             LegendScheme aLS = LegendManage.CreateLegendSchemeFromGridData(press,
  13.                         LegendType.UniqueValue, ShapeTypes.Polyline, ref hasUndefData);

  14.             //Create a contour layer
  15.             VectorLayer aLayer = DrawMeteoData.CreateContourLayer(press, aLS, "Contour_PS");

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

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

  23.             //Add a legend in layout
  24.             LayoutLegend aLegend = mapLayout1.AddLegend(650, 100);
  25.             aLegend.LegendStyle = LegendStyleEnum.Normal;
  26.             aLegend.LegendLayer = aLayer;
  27.             mapLayout1.PaintGraphics();            
  28.         }
复制代码

代码里还演示了修改Layout中的标题,以及添加图例的功能。运行结果如下:
Image00866.png



本帖被以下淘专辑推荐:

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

新浪微博达人勋

发表于 2012-4-15 22:03:56 | 显示全部楼层
抢楼支持王老师。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-4-15 22:32:08 | 显示全部楼层
谢谢王老师,让我知道了如何改变标题啦!!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-4-15 23:07:19 | 显示全部楼层
支持,一直在等王老师教程更新
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-4-15 23:14:26 | 显示全部楼层
还请王老师,您教教怎么改变纸张大小!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-4-16 08:31:37 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-4-16 11:47:10 | 显示全部楼层
顶王老师!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-4-16 15:25:48 | 显示全部楼层
顺利完成作业,谢谢王老师的耐心讲解~~~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2012-4-16 20:47:38 | 显示全部楼层
♂雨已~○ 发表于 2012-4-16 15:25
顺利完成作业,谢谢王老师的耐心讲解~~~

上图哦,我明天来上图 哈哈
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-4-17 10:52:08 | 显示全部楼层
MeteoInfo 发表于 2012-4-16 08:31
MapLayout的SetPaperSize方法

王老师:图层交互能实现这样的功能吗:绘制线条,修改绘制的线条,获得线条的值和坐标?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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