使用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个按钮,然后分别命名为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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MapWinGIS是一个开源的GIS组件,其中包括了一个用于地图显示的控件MapWinGIS。它可以加载多种格式的地图数据,包括矢量数据、栅格数据和在线地图服务等,并提供了一系列的GIS操作功能。以下是使用C#代码加载瓦片地图的示例: 首先需要添加MapWinGIS组件的引用,然后在代码中创建一个AxMap控件对象,并设置控件的属性。具体代码如下: ``` using MapWinGIS; public partial class Form1 : Form { private AxMap axMap1; public Form1() { InitializeComponent(); axMap1 = new AxMap(); axMap1.Dock = DockStyle.Fill; this.Controls.Add(axMap1); // 设置地图属性 axMap1.SendMouseDown = true; axMap1.ShowRedrawTime = true; axMap1.TileProvider = tkTileProvider.OpenStreetMap; axMap1.TileProviderLanguage = tkTileProviderLanguage.English; } } ``` 上面代码中,我们创建了一个AxMap控件对象,并将其添加到Form中。然后设置了一些地图属性,包括瓦片提供者、语言等。其中,tkTileProvider.OpenStreetMap表示使用OpenStreetMap作为瓦片提供者,tkTileProviderLanguage.English表示使用英语作为语言。 接下来,我们可以使用以下代码实现地图的加载和显示: ``` axMap1.Clear(); // 清空地图 axMap1.GrabProjectionFromData = true; // 从数据中获取投影信息 axMap1.Projection = tkMapProjection.PROJECTION_WGS84; // 设置投影 axMap1.CurrentZoom = 10; // 设置缩放级别 axMap1.KnownExtents = tkKnownExtents.keUSA; // 设置地图范围 axMap1.Redraw(); // 刷新地图显示 ``` 以上代码中,我们首先清空了地图,然后从数据中获取投影信息并设置投影。接着设置了缩放级别和地图范围,并刷新了地图显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值