下载源代码

   下载形文件

  本文译自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个按钮,然后分别命名为toolCursortoolZoomExtenttoolZoomIntoolZoomOut,和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

转载于:https://www.cnblogs.com/darrenz/archive/2012/03/30/2425223.html

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐