爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 25847|回复: 57

MeteoInfo二次开发教程(四)

[复制链接]

新浪微博达人勋

发表于 2012-4-11 22:14:48 | 显示全部楼层 |阅读模式

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

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

x
讲讲多个MapFrame的用法,以在MapLayout上添加中国南海脚图为例。写一个函数AddMapFrame_ChinaSouthSea()函数,首先创建一个MapFrame对象,将其添加到LayersLegend中,会自动给相关联的MapLayout中增加一个LayoutMap;给这个MapFrame对象添加图层;获得这个MapFrame对应的LayoutMap,并设置相应的属性;将MapFrame的MapView缩放到中国南海范围。代码如下:
  1.         private void AddMapFrame_ChinaSouthSea()
  2.         {
  3.             //Add an empty map frame
  4.             MapFrame aMF = new MapFrame();
  5.             aMF.Text = "China South Sea";
  6.             layersLegend1.AddMapFrame(aMF);

  7.             //Add a layer to this map frame
  8.             string aFile = Application.StartupPath + "\\Map\\country1.shp";
  9.             MapLayer aLayer = MapDataManage.OpenLayer(aFile);
  10.             aLayer.LegendScheme.breakList[0].Color = Color.WhiteSmoke;
  11.             aMF.AddLayer(aLayer);

  12.             //Set layout map property
  13.             LayoutMap aLM = mapLayout1.LayoutMaps[1];
  14.             aLM.DrawGridLabel = false;
  15.             aLM.Left = 550;
  16.             aLM.Top = 330;
  17.             aLM.Width = 80;
  18.             aLM.Height = 100;
  19.             aMF.MapView.ZoomToExtent(105, 120, 0, 20);

  20.             layersLegend1.Refresh();
  21.         }
复制代码

在MapLayout中添加文本。写一个AddTitle()函数,用MapLayout的AddText函数创建一个LayoutGraphic对象即可:
  1.         private void AddTitle()
  2.         {
  3.             LayoutGraphic title = mapLayout1.AddText("MeteoInfo Class Library Demo", mapLayout1.Width / 2, 20, 12);
  4.         }
复制代码

上述两个函数放入主窗体的Load事件中即可。

图形保存为图像文件的功能。加一个菜单File,再加一个子菜单Export Figure,并在其Click事件中加入下列代码,很简单我就不细说了:
  1.         private void TSMI_ExportFigure_Click(object sender, EventArgs e)
  2.         {
  3.             SaveFileDialog aDlg = new SaveFileDialog();
  4.             aDlg.Filter = "Png Image (*.png)|*.png|Gif Image (*.gif)|*.gif|Jpeg Image (*.jpg)|*.jpg|Bitmap Image (*.bmp)|*.bmp|Tif Image (*.tif)|*.tif|Windows Meta File (*.wmf)|*.wmf";
  5.             if (aDlg.ShowDialog() == DialogResult.OK)
  6.             {
  7.                 if (tabControl1.SelectedIndex == 0)
  8.                 {
  9.                     mapView1.ExportToPicture(aDlg.FileName);
  10.                 }
  11.                 else if (tabControl1.SelectedIndex == 1)
  12.                 {
  13.                     mapLayout1.ExportToPicture(aDlg.FileName);
  14.                 }
  15.             }
  16.         }
复制代码

运行效果如下:
Image00865.png




本帖被以下淘专辑推荐:

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

新浪微博达人勋

发表于 2012-4-11 22:16:47 | 显示全部楼层
好东西,要学习应用
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2012-4-11 22:22:02 | 显示全部楼层
明天来交作业 嘿嘿
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-4-11 22:26:08 | 显示全部楼层
非常感谢王老师,实现了设置标题和保存图片的功能,不知道标题设置了能不能像显示图片一样实时更新啊?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-4-11 22:31:09 | 显示全部楼层

当然可以,不过先卖个关子,以后再讲了。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-4-11 22:44:17 | 显示全部楼层
MeteoInfo 发表于 2012-4-11 22:31
当然可以,不过先卖个关子,以后再讲了。

我继续等您的好消息!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-4-11 22:45:47 | 显示全部楼层
不过我建议在类里面设置这样的属性,不用另外写方法,这样会封装得更好,还有,maplayout的纸张大小也要有这样的属性,总不能保存下载再剪裁吧!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-4-12 08:14:02 | 显示全部楼层
xnlm2004 发表于 2012-4-11 22:45
不过我建议在类里面设置这样的属性,不用另外写方法,这样会封装得更好,还有,maplayout的纸张大小也要有这 ...

MapLayout的纸张大小当然也是可以调整的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-4-12 08:30:24 | 显示全部楼层
MeteoInfo 发表于 2012-4-12 08:14
MapLayout的纸张大小当然也是可以调整的

王老师:layersLegend1_ActiveMapFrameChanged事件不灵了,
  1. layersLegend1.SetActiveMapFrame(mapFrame1);
  2.             layersLegend1.Refresh();
复制代码
maplayout里面不刷新。另外在laysLegend里面重新设置活动frame也没反应。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-4-12 08:35:08 | 显示全部楼层
开始我设置了layersLegend1.MapLayout = mapLayout1
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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