爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 73035|回复: 155

MeteoInfo二次开发教程(一)

  [复制链接]

新浪微博达人勋

发表于 2012-3-29 10:54:14 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 MeteoInfo 于 2012-3-29 12:47 编辑

由于MeteoInfo几经升级,原来写的二次开发教程已经难以满足需求,因此重新开课讲解,有兴趣的朋友最好能根据讲解进行实践。

第一课先讲讲最基本的引用MeteoInfo类库和添加LayersLegend、MapView和MapLayout控件。上述3个控件是MeteoInfo类库里最重要的控件,LayersLegend是管理MapFrame和Layer的(还有Group),MapView是地图显示控件,MapLayout是图形版面管理控件。使用过MeteoInfo桌面软件应该很容易理解这几个控件的用途。

本教程使用的是最新MeteoInfo类库(MeteoInfoC.dll),可以在MeteoInfo软件中找到。开发平台是Microsoft Visual C# 2008 Express Edition,当然2010也是可以的。

1、新建桌面程序项目,并引用MeteoInfo类库:
新建一个项目:
Image00839.png

引用MeteoInfo类库:
Image00840.png

添加MeteoInfo类库中的控件
Image00841.png

控件添加后:
Image00842.png

2、添加MeteoInfo类库中的主要控件:
在主窗体中添加菜单栏、工具栏、状态栏,以及一个SplitContainer和一个TabControl,将tabControl1的两个TabPage分别改名为Map和Layout:
Image00844.png

将LayersLegend控件加入SplitContainer的左边(layersLegend1),将MapView控件添加到tabControl1的Map页面中(mapView1),将MapLayout控件添加到tabControl1的Layout页面中(mapLayout1),控件的Dock属性设置为Fill。为了将这三个控件相互关联起来,首先要给layersLegend1添加一个MapFrame,点击layersLegend1属性中的MapFrames属性,在弹出的对话框中增加一个MapFrame:
Image00845.png

将刚添加的MapFrame的MapView属性设置为mapView1,Active属性设置为True:
Image00850.png

将layersLegend1的MapLayout属性设置为mapLayout1:
Image00848.png

3、实现MapView和MapLayout切换:
在tabControl1_SelectedIndexChanged事件中添加如下代码:
  1. private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
  2. {
  3.                 if (tabControl1.SelectedIndex == 1)    //Map Layout
  4.                 {
  5.                         layersLegend1.IsLayoutView = true;               

  6.                          mapLayout1.PaintGraphics();
  7.                          mapLayout1.Refresh();
  8.                   }
  9.                  else if (tabControl1.SelectedIndex == 0)    //Map view
  10.                 {
  11.                          layersLegend1.IsLayoutView = false;

  12.                          mapView1.IsLayoutMap = false;
  13.                          mapView1.ZoomToExtent(mapView1.ViewExtent);
  14.                  }
  15.         }
复制代码

4、添加图层:
在工具栏中加一个添加图层按钮,并在其Click事件中添加如下代码:
  1.         private void TSB_AddLayer_Click(object sender, EventArgs e)
  2.         {
  3.                 OpenFileDialog aDlg = new OpenFileDialog();
  4.                 aDlg.Filter = "Supported Formats|*.shp;*.wmp;*.bln;*.bmp;*.gif;*.jpg;*.tif;*.png|Shape File     (*.shp)|*.shp|WMP File (*.wmp)|*.wmp|BLN File (*.bln)|*.bln|" +
  5.                 "Bitmap Image (*.bmp)|*.bmp|Gif Image (*.gif)|*.gif|Jpeg Image (*.jpg)|*.jpg|Tif Image (*.tif)|*.tif|Png Iamge (*.png)|*.png|All Files (*.*)|*.*";

  6.                 if (aDlg.ShowDialog() == DialogResult.OK)
  7.                 {
  8.                         string aFile = aDlg.FileName;
  9.                         MapLayer aLayer = MapDataManage.OpenLayer(aFile);
  10.                         layersLegend1.ActiveMapFrame.AddLayer(aLayer);
  11.                         layersLegend1.Refresh();
  12.                 }
  13.         }
复制代码

5、设置MapView和MapLayout的初始鼠标工具:
在主窗体的创建函数中在InitializeComponent()后加入如下代码:
  1.             mapView1.MouseTool = MouseTools.Pan;
  2.             mapLayout1.MouseMode = MouseMode.Select;
复制代码

这一讲就到这里,运行结果如下:
Image00108.png
Image00109.png
Image00110.png
Image00111.png




本帖被以下淘专辑推荐:

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

新浪微博达人勋

发表于 2012-8-22 10:15:09 | 显示全部楼层

太好了!解决了!十分感谢王老师的及时帮助解答!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 19710
发表于 2012-3-29 11:03:21 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-3-29 12:09:22 | 显示全部楼层
呵呵呵
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2012-3-29 12:30:37 | 显示全部楼层
我决定跟课学习,只要楼主一直讲下去,争取尽快交作业!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-3-29 12:56:48 | 显示全部楼层
mofangbao 发表于 2012-3-29 12:30
我决定跟课学习,只要楼主一直讲下去,争取尽快交作业!

能不能一直讲下去取决于大家的热情和我的时间,当然主要取决于大家了,时间是海绵呀。

如果有动力一直讲下去,最后的结果就是MeteoInfo的开源了,我指的是桌面软件,其实核心的功能都在类库里,桌面软件只是进行调用,实现起来比较简单。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-3-29 13:27:04 | 显示全部楼层
对了,提个小小的要求,每一讲有人贴出自己的作业以后才会进行下一讲。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2012-3-29 13:37:02 | 显示全部楼层
看了下楼主这一讲的内容大家都可以跟着一起学的,甚至没啥基础的都行,我也小试了一下,楼主最后一张图是下一节的索引图么,光这一讲的内容貌似不能有颜色,下面是我的作业了,时间有限,还没有举一反三呢,各位跟着做的注意除了在项目里引用MeteoInfoC类库外,我图中红色方框的也需要在代码中引用一下,否则会提示找不到命名空间,wContour那个貌似有些图层需要用到,比如那个cities。
result.png

点评

图很漂亮: 0.0 刚好需要: 5.0
图很漂亮: 0 刚好需要: 5
  发表于 2012-8-27 09:15

评分

参与人数 1金钱 +12 收起 理由
MeteoInfo + 12 赞一个!

查看全部评分

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

新浪微博达人勋

0
早起挑战累计收入
发表于 2012-3-29 13:38:24 | 显示全部楼层
MeteoInfo 发表于 2012-3-29 13:27
对了,提个小小的要求,每一讲有人贴出自己的作业以后才会进行下一讲。

已经交作业了,以后会尽量举一反三的,现在对这个类库还不太熟,反不出来,嘿嘿,期待下一讲,希望能楼能给交作业的朋友积分奖励一下,
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-3-29 13:45:46 | 显示全部楼层
mofangbao 发表于 2012-3-29 13:37
看了下楼主这一讲的内容大家都可以跟着一起学的,甚至没啥基础的都行,我也小试了一下,楼主最后一张图是下 ...

动作够快!那些using语句也很关键,不过using wContour暂时不需要。给分必须的,不过不是100分制呀。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-3-29 13:46:20 | 显示全部楼层
我也要学!借此机会学二次开发和C++++谢谢楼主
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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