• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

豆豆居士

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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格式的图像,就用这个!!!

然后,修改代码:

 

posted on 2012-01-31 17:31  喻思羽  阅读(1839)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3