C#开发MAPINFO教程1

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C#开发GIS应用简明教程

2009-11-15来自:CSDN Blog字体大小:【大中小】

∙摘要:这篇是C#开发GIS应用简明教程,从工具开始将其,包括设计窗体、创建永久图层等等。希望本文能对大家有所帮助。

C#开发GIS,这里将介绍MapX为开发人员提供一系列的工具,包括C#对MAPX图元的编程技术。这些工具的使用,可以通过MapX的帮助文档中查到。

1.工具(ToolConstants)

MapX为开发人员提供一系列的工具,这些工具的作用各有不同,我们通过开发一个应用程序来了解这些工具的作用,至于这些工具的具体说明,可以在MapX的帮助文档中,通过查找"Available Standard Tools"看到相应的解释.一些MapX的相关资料也有介绍.

在.NET编程环境中新建一个C#的WindeosApplication(Windows应用程序)项目,然后在菜单中选择”项目/添加引用”,打开如下图的窗口,在窗口中选择COM标签,在组件名称列表中双击MapInfo MapX V5.单击"确认"按钮,将Map5控件加入到.Net的工具箱中.

接着,将MapInfo MapX V5控件画到窗体上,再在窗体上画一个ComboBox控件comb oBox1.如下图:

双击设计窗体,编写Form1_Load代码如下:

1.private void Form1_Load(object sender,System.EventArgs e)

2.{

3.ArrayList ToolsList=new ArrayList();

4.ToolsList.Add(MapXLib.ToolConstants.miArrowTool);

5.ToolsList.Add(MapXLib.ToolConstants.miCenterTool);

6.ToolsList.Add(abelTool);

7.ToolsList.Add(MapXLib.ToolConstants.miPanTool);

8.ToolsList.Add(MapXLib.ToolConstants.miPolygonSelectTool);

9.ToolsList.Add(MapXLib.ToolConstants.miRadiusSelectTool);

10.ToolsList.Add(MapXLib.ToolConstants.miSymbolTool);

11.ToolsList.Add(MapXLib.ToolConstants.miTextTool);

12.ToolsList.Add(MapXLib.ToolConstants.miZoomInTool);

13.ToolsList.Add(MapXLib.ToolConstants.miZoomOutTool);

boBox1.DataSource=ToolsList;

15.}

以上代码通过一个数组ToolsList,将MapXLib的工具加入到comboBox1中.MapX还有一些其它的工具,它们的作用是往地图上加上点,线,多边型和圆.因为这些工具要求有操作图层,一并在介绍图层的时候介绍.关于ArrayList的用法,请参考C#的有关资料.

接着,双击comboBox1,并编写代码如下

1.private void comboBox1_SelectedIndexChanged(object sender,Sy

stem.EventArgs e)

2.{

3.axMap1.CurrentTool=(MapXLib.ToolConstants)comboBox1.SelectedI

tem;

4.}

应注意,在C#中必须要显式地把comboBox1的选择项目SelectedItem(数据类型为o bject)转换为MapXLib.ToolConstants.因为ToolConstants是MapX自己定义的一个枚举数据类型,C#不能自动完成这种枚举成员变量到object的数据转换.

编译执行程序,从comboBox1中选择不同的工具,在地图上进行操作,你可以了解到M apX工具集的强大功能.

实际上,MapX提供的工具集就好像Photoshop,AutoCAD的工具栏一样,为你提供了一些控制地图的工具.但是,在开发GIS的时候,这些工具是不能完全满足要求的.所以,还应该学会自定义工具.

下面,通过一个在地图上测距的例子,来介绍一下如何在C#下自定义MapX工具

如前所述建立一个C#的Windows应用程序并将Mapinfo MapX V5控件加到窗体上.并加入一个Button控件button1.将button1的Text属性改为"测距",再在窗口中放上两个Label控件label1,label2,将它们的Text属性设置为""空字符串,如下图:

双击设计窗体,编写Form1_Load代码如下:

1.private void Form1_Load(object sender,System.EventArgs e)

2.{

3.axMap1.CreateCustomTool(100,MapXLib.ToolTypeConstants.miToolT

ypePoly,

4.MapXLib.CursorConstants.miCrossCursor,null,null,null);

5.}

在加载窗口的时候,我们定义了一个工具.它的编号是100(不要和MapX本身的工具编号重复),它的类型是一个多义线,采用十字光标.

关于此函数的用法,建议查看MapX的开发手册和相关资料.

现在我们定义了一个编号为100的工具,可以在程序中使用它了.双击设计窗体中的button1,编写它的Click事件处理代码如下:

1.private void button1_Click(object sender,System.EventArgs e)

2.{

3.axMap1.CurrentTool=(MapXLib.ToolConstants)100;

4.}

现在编译运行,单击button1,就可以在地图上使用这个工具了.但是还有一部分重要的代码没有完成:测距!

完成测距功能的代码在C#使用MapX开发GIS中非常具有代表性,也比较有难度.我在首次使用C#+MapX开发GIS的时候,被这个问题困扰了很久.项目经理也来研究,过两天说有结果了,但他给出的例子根本就行不通.当然,会了就不难了.其实,也很简单.

首先,在窗口类中声明两个私有全局变量以保存测出的距离和总距,注意声明代码的位置:

1.public class Form1:System.Windows.Forms.Form

2.{

3.private AxMapXLib.AxMap axMap1;

4.private System.Windows.Forms.Button button1;

5.private bel label1;

6.private bel label2;

7.///

8.///必需的设计器变量。

9.///

10.private ponentModel.Container components=null;

11.private double Dis=0,DisSum=0;

12....

13....

现在来编写工具的事件.注意,在MapX画多义线的时候,它触发消息的方式和一般的工具是不同的,首先,它并不是用鼠标一点击就完成了的,还可以继续画下去,所以,不应该在MapX控件的ToolUsed事件中编写,而应该在PolyToolUsed事件中实现测距.代码如下:

1.private void axMap1_PolyToolUsed(object sender,AxMapXLib.CMa

pXEvents_PolyToolUsedEvent e)

2.{

相关文档
最新文档