使用MapWinGIS和C#建立GIS桌面程序-1
本文译自codeproject,原文链接为:http://www.codeproject.com/Articles/38045/Build-a-Desktop-GIS-Application-Using-MapWinGIS-an。
介绍
地理信息系统是有一系列设备去捕捉、储存、恢复、保持和展示地理数据与信息的程序。开发GIS程序有多种目的,简单的像GIS数据探测,复杂的像流域绘图。很多不同的商业类库可供开发者使用,以及在程序中应用,比如ESRI(环境系统研究院)的ArcObject和ThinkGeo的Map Suite。不幸的是,这些类库的序列号价格通常很高,对于自由程序员和小公司,显然不太可行。在本系列教程中,我将详细描述如何用开源类库MapWinGIS和C#来建立桌面GIS程序。MapWinGIS是GIS开发的一个ActiveX控件,对光栅和矢量有内嵌支持。MapWinGIS.ocx 是MapWindow GIS 的核心,它是众所周知开源的、多功能的GIS桌面程序。本教程的第一步是从http://mapwingis.codeplex.com/releases/view/76446获取MapWinGIS.ocx,然后在你的电脑上安装它。
建立你的地图
准备
本教程中,我使用的是.NET Framework 3.5和Visual Studio 2008 专业版。实际上,你也可以使用Visual Studio精简版。同时我使用了一些包含GIS数据的ESRI形文件, 我所提供的是zip压缩文件。我建议你下载这个压缩文件,然后解压,然后将文件放在一个独立的文件夹。那么现在,你已经准备进入下一步了。
建立一个工程然后增加MapWinGIS引用
现在,打开你的VS然后建立一个新的Windows Form程序。指向“工程”菜单,点击“添加引用”。在“添加引用”对话框中,选择COM选项卡,然后从“组件名称”列表中选择MapWinGIS Components,点击“确定”。
现在,在你的工程下有了一个新的引用,并且在解决方案的引用下可以显示它的名称。
接下来,我们准备增加一个Map控件到我们的工具栏。Map控件用来做为一个容器,将地理数据显示为一个区域。为增加这个控件,在工具箱的常规选项卡下右键单击。在菜单中点击“选择项”,选择工具箱项将出现。选择COM组件选项卡,找到Map Control,勾选此项,然后点击确定。
现在,你能在工具箱的常规选项卡下看见Map Control图标了。
到时间建立你的GUI了
现在,是时间建立你的界面了。从工具箱中拖动一个ToolStrip控件放在form中。在ToolStrip中增加5个按钮,然后分别命名为toolCursor,toolZoomExtent,toolZoomIn,toolZoomOut,和toolPan。你也可以为按钮指定有意义的标签和图片(你可以使用我在resource文件夹下保存的图片)。拖动Map控件放入form中。在属性窗口,设置Map组件的Dock属性为Fill,设置CursorMode属性为cmNone。
载入你的GIS数据到程序中
现在,我们将增加两个ESRI的形文件到map中。ESRI形文件或者简单的形文件是一种流行的地理空间矢量数据格式,用作地理信息系统软件。在Form1_Load事件中,增加如下代码:
//Add first layer to your map
int intHandler1; //integer index to handle the layer
//create a new instance for MapWinGIS.Shapefile
//MapWinGIS.Shapefile is a data provider for ESRI Shapefile
MapWinGIS.Shapefile shapefile1 = new MapWinGIS.Shapefile();
//Defile the data source for MapWinGIS.Shapefile instance
shapefile1.Open(@"H:\Study Documents\Codeproject\GIS\Part1\GISSampleData\base.shp", null);
//display the layer on the map
intHandler1 = axMap1.AddLayer(shapefile1, true);
//return;
//Add second layer
int intHandler2;
MapWinGIS.Shapefile shapefile2 = new MapWinGIS.Shapefile();
shapefile2.Open(@"H:\Study Documents\Codeproject\GIS\Part1\GISSampleData\nile.shp", null);
intHandler2 = axMap1.AddLayer(shapefile2, true);
首行中,我们建立了一个整型变量(intHandler1).第二行中,我们为类MapWinGIS.Shapefile建立了一个实例(shapefile1).MapWinGIS.Shapefile是描述真实世界地理特征的一个容器。第三行中,新对象(shapefile1)的数据源被定义。数据源是一个ESRI形文件。数据源显示了一个多边形的埃及。第四行中,我们为map组件增加了一个新对象(axMap1),并且设置组件为可见。函数Addlayer用于为Map组件增加一个新的地理图层,然后返回指示图层处理的整数。第四到第八行为Map组件增加了第二个形文件,并且设置组件为可见。此刻是时间运行你的第一个GIS程序了,在键盘上敲下F5,在Map组件上显示埃及的地图
改变你的特征标志
对于GIS开发者来说,为不同的地理特征地址不同的标志是一项最重要的工作。在这篇文章中,我将提出一种最容易的方式来定制特征标志。实际上,MapWinGIS提供了很多高级的方法来标志GIS数据,在之后的文章中我将进行讨论。现在,将下列代码增加在Form1_Load事件中刚才的代码之后:
//Set Filling color of the ploygon shapefile
axMap1.set_ShapeLayerFillColor(intHandler1,
(UInt32)(System.Drawing.ColorTranslator.ToOle
(System.Drawing.Color.SaddleBrown)));
//Set the line color
axMap1.set_ShapeLayerLineColor(intHandler2,
(UInt32)(System.Drawing.ColorTranslator.ToOle
(System.Drawing.Color.Yellow)));
//Set the line width
axMap1.set_ShapeLayerLineWidth(intHandler2, 5);
首行中,我们使用了Map组件(axMap1)的set_ShapeLayerFillColor方法。这个方法使用了图层处理返回值(intHandler1)和UInt32格式的颜色,对已定义图层的填充颜色进行设置。Map组件提供了很多有用的方法来进行图层标志的定制,像set_ShapeLayerFillStipple定义了图层的填充类型,set_ShapeLayerFillTransparency定义了图层的透明度。第二行中,使用了另一个方法set_ShapeLayerLineColor,它使用了图层处理返回值和Uint32颜色格式定义了线条的颜色。第三行中,我使用了set_ShapeLayerLineWidth方法来定义线条的宽度,其中使用了图层处理返回值和一个浮点型数值来指示线条宽度。运行你的程序,看看现在会如何显示。
为你的地图增加行为
当然,你想增加一些令人吃惊的行为,像增大、缩小和平移你的地图。使用MapWinGIS增加这样的行为是一件非常简单的工作。Map组件的CursorMode属性提供这些,非常容易使用。你不得不直接为你想要的工作方式指派模式。接下来,我将使用Click事件来变换CursorMode的属性。
private void toolCursor_Click(object sender, EventArgs e)
{
axMap1.CursorMode = MapWinGIS.tkCursorMode.cmNone;
}
private void toolZoomIn_Click(object sender, EventArgs e)
{
axMap1.CursorMode = MapWinGIS.tkCursorMode.cmZoomIn;
}
private void toolZoomOut_Click(object sender, EventArgs e)
{
axMap1.CursorMode = MapWinGIS.tkCursorMode.cmZoomOut;
}
private void toolPan_Click(object sender, EventArgs e)
{
axMap1.CursorMode = MapWinGIS.tkCursorMode.cmPan;
}
设置你的地图到最大的显示范围,你将使用Map组件的ZoomToMaxExtents方法。像下面代码一样,在Click事件中调用这个方法。
private void toolZoomExtent_Click(object sender, EventArgs e)
{
axMap1.ZoomToMaxExtents();
}
是时间测试这些新特性;运行程序,点击每个按钮。
总结
MapWinGIS是建立GIS桌面程序最简单的方式。以上特性显示了一个GIS程序员所需要做的最基本的任务。本系列将来的课程中将看到很多MapWinGIS有用的高级的特性。
完成自:2012-03-30
posted on 2012-03-30 14:27 darrenzhang 阅读(3743) 评论(0) 编辑 收藏 举报