MapWinGIS开发入门文档
MapWinGIS开发入门文档
编写者:懒—康乐
MapWinGIS是一个功能强大的开源GIS平台。是为小中型GIS应用开发的免费开源的组件及桌面的集合。在学习之前,让我们先要感谢MapWinGIS开发团队为我们付出的一切,真心感谢~~
废话不多说,让我们来看一看如何用MapWinGIS开发我们自己的桌面GIS应用吧!(说心里话,本文档的笔者发现国产的SuperMap跟MapWinGIS长的很像,当然,SuperMap是商业公司)。
第一步,去MapWinGIS官方网站下载MapWinGIS ActiveX,并且安装到自己的计算机系统中。
1.MapWinGIS网站网址http://www.MapWindow.org
2.进入下载界面后,下载Progrmmer Tools and Libaries选项下MapWinGIS ActiveX。如果你想在程序中做空间分析,当然要下载MapWinGIS ActiveX下面的那项DotSpatial Libraries。
3.安装注册MapWinGIS ActiveX,MapWinGIS ActiveX是ActiveX控件,MapWinGIS 可以用很多种微软的开发平台上的语言进行开发。例如:vb6,vc++,c#等等。它还能插入到使用VBA语言的程序中,例如:微软的Access,Excel,PowerPoint中间。当然,Delphi也可以作为开发语言。本质上,任何支持ActiveX协议的程序运行环境都可以使用MapWinGIS。还有人曾经把MapWinGIS嫁接到ESRI的ArcGIS的程序中间,用VBA做开发。
4.安装过程
选择适合你的电脑软硬件环境的开发包
我的电脑是Window7旗舰版,不知道为什么安装64位的出错,所以,就安装图中的32位的开发包,成功哦!!!
如果你下载不是安装包,还需要自己来注册,进入“开始”——》“运行”,输入regsvar32.exe “C:\Program Files\MapWindow\MapWinGIS.OCX”。之后,注册会自动进行,将下载的组件注册到你的系统中。
第二步 创建一个新的项目VS2008——C#(英文文档用的是VB2005)
创建新的项目后,在控件工具箱中新建一个选项卡,然后在选择项中找到Com组件找到Map Control,注意,如果安装了ESRI的开发包后,里面可也有一个Map Control。
一定要加载MapWinGIS的开发包。
双击或拖动Map Control在窗体上。
在窗体加载的方法里面编写代码:
private void Form1_Load(object sender, EventArgs e)
{
MapWinGIS.Shapefile sfWorld = new MapWinGIS.Shapefile();
sfWorld.Open(@"D:\地质知识库\DeltaDB\DeltaDB\AoDeltaGDB\AoDeltaGDB\bin\Debug\MapLayer\continent.shp", null);
axMap1.AddLayer(sfWorld, true);
}
运行程序
第三步 放大,缩小,浏览功能的实现
//放大
axMap1.CursorMode = MapWinGIS.tkCursorMode.cmZoomIn;
//缩小
axMap1.CursorMode = MapWinGIS.tkCursorMode.cmZoomOut;
//浏览
axMap1.CursorMode = MapWinGIS.tkCursorMode.cmPan;
//全部显示
axMap1.ZoomToMaxExtents();
第四步 shapefile显示,配色方案和标注方案
在这一部分中,我们将学习如何调整全局显示属性,目的是让图层更好的显示效果。同时学习如何给你的数据进行好的配色方案,如何给你的数据进行标注。
现在我们添加图层——点图层(MyShape)
MapWinGIS.Shapefile sfWorld = new MapWinGIS.Shapefile();
MapWinGIS.Shapefile sfCities = new MapWinGIS.Shapefile();
//世界地图图层句柄
int hndWorld;
//点图层句柄
int hndCities;
sfWorld.Open(@"D:\地质知识库\DeltaDB\DeltaDB\AoDeltaGDB\AoDeltaGDB\bin\Debug\MapLayer\continent.shp", null);
sfCities.Open(@"I:\mine\2012年\地质知识库\MapLayer\MyShape\MyShape.shp", null);
hndWorld = axMap1.AddLayer(sfWorld, true);
hndCities = axMap1.AddLayer(sfCities, true);
//sfWorld.Close();
然后就加入了一个点图层
我们这里要注意的是加入图层的顺序,如果我们先加入的是点图层,然后加入世界地图,那么我们就无法看到点图层,因为MapWinGIS显示图层的顺序是与添加图层顺序相反的。OK,貌似MapWinGIS的图层对象可以获取图层句柄,这样就可以很轻松的找到我们需要的图层了。
好了,下面我们来给图层渲染吧!等不及了吧~
首先,有一点很重要的地方需要我们注意:MapWinGIS ActiveX可以支持.NET和非.NET的开发环境,而渲染的颜色在.NET的环境下是封装为Color类中的,但是对于非.NET环境中,就找不到Color类中的对象,所以,为了达到通用的目的,MapWinGIS把颜色都定义为无符号32位整型数。
下面是代码
MapWinGIS.Shapefile sfWorld = new MapWinGIS.Shapefile();
MapWinGIS.Shapefile sfCities = new MapWinGIS.Shapefile();
//世界地图图层句柄
int hndWorld;
//点图层句柄
int hndCities;
UInt32 FillColor;
UInt32 LineColor;
Single LineWidth;
UInt32 PointColor;
Single PointSize;
FillColor = Convert.ToUInt32(ParseRGB(Color.Green));
LineColor = Convert.ToUInt32(ParseRGB(Color.Black));
LineWidth = 1.0f;
PointColor = Convert.ToUInt32(ParseRGB(Color.Red));
PointSize =16.0f;
sfWorld.Open(@"D:\地质知识库\DeltaDB\DeltaDB\AoDeltaGDB\AoDeltaGDB\bin\Debug\MapLayer\continent.shp", null);
sfCities.Open(@"I:\mine\2012年\地质知识库\MapLayer\MyShape\MyShape.shp", null);
hndWorld = axMap1.AddLayer(sfWorld, true);
hndCities = axMap1.AddLayer(sfCities, true);
axMap1.set_ShapeLayerDrawFill(hndWorld, true);
axMap1.set_ShapeLayerFillColor(hndWorld, FillColor);
axMap1.set_ShapeLayerLineColor(hndWorld, LineColor);
axMap1.set_ShapeLayerLineWidth(hndWorld, LineWidth);
axMap1.set_ShapeLayerPointColor(hndCities, PointColor);
axMap1.set_ShapeLayerPointSize(hndCities, PointSize);
private uint ParseRGB(Color color)
{
return (uint)(((uint)color.B << 16) | (ushort)(((ushort)color.G << 8) | color.R));
}
显示效果
下一步,我们将开始学习如何用自己定义的bitmap图像来作为点图层中点的形态。
首先,我选择了一个bitmap格式的图像,就用这个!!!
然后,修改代码: