2023年7月3日发(作者:)
MapWinGIS应用于GIS程序设计实践
吕秀琴;张毅
【摘 要】介绍了开源GIS平台的功能特点,通过比较各种开源GIS平台特点,选择基于MapWinGIS进行GIS程序设计,包括程序框架建立、矢量与栅格数据类型支持、访问方式和基本功能操作.利用实例说明了MapWinGIS程序开发便捷、开放的特点,有助于GIS软件程序的升级、维护和扩展.%This paper introduces the
function features of Open Source GIS platform. MapWinGIS is selected for
GIS programming by comparing several Open Source GIS platforms. It
includes procedural framework establishment, the supported types and
accessing methods of vector and raster data, and basic operation functions.
The convenient and open characteristics of MapWinGIS programming,
helping upgrade, maintenance and expansion for GIS programming are
explained by examples.
【期刊名称】《实验技术与管理》
【年(卷),期】2012(029)010
【总页数】4页(P110-113)
【关键词】程序设计;开源GIS;MapWinGIS;接口对象;矢量数据;栅格数据
【作 者】吕秀琴;张毅
【作者单位】武汉大学 资源与环境科学学院,湖北 武汉 430079;武汉大学 测绘学院,湖北 武汉 430079 【正文语种】中 文
【中图分类】TP31
Abstract:This paper introduces the function features of Open Source GIS
GIS is selected for GIS programming by comparing
several Open Source GIS includes procedural framework
establishment,the supported types and accessing methods of vector and
raster data,and basic operation convenient and open
characteristics of MapWinGIS programming,helping upgrade,maintenance and expansion for GIS programming are explained by
examples.
Key words:programming;open source GIS;MapWinGIS;interface
object;vector data;raster data
本文介绍了MapWinGIS应用于GIS程序设计的实践过程,包括程序框架的建立、数据类型及其访问方式和基本功能。通过实例说明了利用MapWinGIS可以进行便捷的GIS算法程序设计,降低了编程难度,有效提高了程序开发的效率。
常用的开源GIS软件有GRASS、UDIG、OSSIM、QGIS、MapWindows、gvSIG、Kosmo、JUMP/JCS、SAGA、ILWIS、SharpMap等[1-3]。开源
GIS组件不仅可以加载传统的数据文件,如Shapefile、Grid、Image格式文件等,还可以将其源代码进行修改以完成对自定义文件的读取和操作。开源GIS组件能够较方便地开发基本GIS功能,控件支持多种数据读写、地图浏览、地图查询、标记等GIS功能,数据读取、显示、渲染效率较高。开源GIS平台主要功能见表1。
开源GIS平台的选择与实际需要密切相关。GRASS[4]地理资源分析支持系统是由美国军方建筑工程研究实验室的研究人员设计并开发的一个地理信息系统软件,其开发界面和使用主要针对专业编程人员,需要频繁的手工运行命令行,不太适合大多数人使用;OSSIM[5]是一个用于遥感、图像处理、地理信息系统、摄影测量领域的高性能软件,其设计目的是为摄影测量与遥感软件包的开发人员提供整合的方法及流程,GIS开发的相关功能不够突出;基于Eclipse平台的UDIG[6]运行效率较低,比较占用系统资源;SharpMap[7]是一个主要用于 Web应用程序的平台,其投影、比例尺、空间分析、图形的属性信息、查询检索等功能并不完善。通过分析比对众多开源GIS的特点,我们选择MapWinGIS作为GIS程序设计的平台。
MapWinGIS[8-9]是基于微软的 COM 思想编写的一套开源的类似于AO的二次开发组件库,其核心库是MapWinGIS的ActiveX控件。开发人员可以利用ActiveX组件在自己的系统中添加GIS的相关功能。MapWinGIS的主要功能包括:直接打开、编辑、保存Image、Grid、Shapfile、TIN、DBF格式的文件,在地图中对图形进行浏览、标注、支持矢量数据的符号化、栅格数据的透明显示、在地图中对矢量数据进行空间数据查询、动态的在图层上标绘空间数据、存取地图中的相关数据、对不同的格式进行转换等诸多功能。Map-WinGIS安装方便,开发环境友好,封装接口对象完善,用户组、开发团队和帮助较为丰富,是GIS程序开发的较好选择。
在MFC环境中,使用MapWinGIS组件有2个步骤:注册.ocx主键和添加Map类对象。可以通过直接运行MapWinGIS的安装文件,安装程序进行自注册,也可以进行手工注册,输出注册命令行:cmd—>regsvr32″[dir]\″。如果需要安装新版本的,则需要反注册,输出注册命令行:regsvr32-u″″,然后再注册新版的
[10-12]。 添加Map类对象通过Projrect选单(菜单)中的“增加组件和空间”功能添加OCX对象,生成CMap1封装类。同时在Stdafx头文件中增加#import″″rename_namespace(″mapWindow″)rename(″GetObject″,″MapWinGISGetObject″);然后创建一个资源ID,选择View选单中的Resource Symbols,创建一个新的资源ID,命名为IDC_MAP在View的头文件中,Include产生的封装类头文件,再加入封装类的对象;然后在视图的应用中对View类创建WM_CREATE的消息映射函数;最后在View类中创建WM_SIZE的消息映射函数。
数据类型支持程度是一个开源平台比较重要的内容。MapWinGIS数据类型见图1。数据类型的种类决定了采用该开源平台进行程序开发的难易程度和应用面。MapWinGIS支持的主要数据类型有Shpfile-Type、ImageType和GridFileType等,涵盖了矢量和栅格两大数据类型,基本上能满足绝大多数的GIS开发和应用要求。
(1)ShpfileType:包括 SHP_NULLSHAPE、SHP_POINT、SHP_POLYLINE、SHP_POLYGON、SHP_MULTIPOINT、SHP_POINTZ、SHP_POLYLINEZ、SHP_POLYGONZ、SHP_MULTIPOINTZ、SHP_POINTM、SHP_POLYLINEM、SHP_POLYGONM、SHP_MULTIPOINTM、SHP_MULTIPATCH等。
(2)ImageType:包 括 BITMAP_FILE、GIF_FILE、USE_FILE_EXTENSION、PPM_FILE等。
(3)GridFileType:包括INVALIDGRIDFILETYPE、ASCII、BINARY、ESRI、SDTS、USEEXTENSION等。
与数据类型相对应,支撑MapWinGIS基本功能的主要接口对象有 Map、Shape、Shapefile、Image、Grid等。利用这些接口对象的方法和属性,可以方便实现GIS的基本功能。
(1)Map对象:MapWinGIS最主要的对象,用于显示Grid、Image和Shapefile,它管理所有的图层,并响应鼠标操作。主要方法包括AddLayer、ApplyLegendColors、GetColorScheme、MoveLayer、MoveLayer-Bottom、MoveLayerDown、MoveLayerTop、MoveLayerUp、 NewDrawing、
SetImageLayerColorScheme、SnapShot、ZoomToPrev等。
(2)Shape对象:Shape图层对象可以由用户创建,也可以从图层文件中生成(SHP文件),可以在该对象上标点、标线、标图形等。主要方法包括Create、DeletePart、DeletePoint、InsertPart、InsertPoint。
(3)Shapefile对象:图形对象可以是点、线、面等。主要方法包括 CreateNew、Open、SaveAs、SelectShapes、Close、StartEditingShapes、StopEditingShapes、StartEditingTable、StopEditingTable等。
(4)Image对象:主要方法包括 CreateNew、Open、Save、Clear、Close、GetRow、GetImageBitsDC、SetImageBitsDC等。
(5)Grid对象:主要方法包括CreateNew、Open、Save、Clear、Close、CellToProj、ProjToCell等。
(1)图层显示。MapWinGIS采用组件开发中常用的Smart Pointer进行接口对象的封装。首先通过接口对象的CreateInstance方法创建对象实例,然后调用实例对象Open方法打开指定目录的图层文件,最后利用Map对象的AddLayer增加对应实例对象到图层中。以ERDAS IMG图像数据为例:
对于矢量格式,接口对象类型为mapWindow::IShapefilePtr,实 例 CLSID
为″ile″。而对于栅格数据,接口对象类型均为mapWindow::IImagePtr,实例CLSID均为″″,但在Open方法中可以指定具体的栅格文件类型。在MapWinGIS中,栅格类型通过enum Image-Type枚举定义,包括 BITMAP_FILE、GIF_FILE TIFF_FILE、JPEG_FILE、PNG_FILE、PPM_FILE、BIL_FILE、ADF_FILE、GRD_FILE、IMG_FILE、ASC_FILE等常用栅格文件格式。
(2)鼠标消息响应。与通常的MFC消息响应方式不同,MapWinGIS的消息需要创建一个事件槽(eventsink)。其方法是在View类的头文件中加入″DECLARE_EVENTSINK_MAP()″,并在 CPP实现文件中加入如下代码:
然后在视图类中增加一个方法,函数声明为:
最后还必须调用SetSendMouseMove(true)方法才能响应鼠标移动事件。
(3)视图操作。MapWinGIS的视图操作已经进行了封装,在鼠标消息响应设置后,只需要调用Map对象对应的方法,即可实现视图的放大、缩小、漫游、全图等。有2种途径来实现:一种是调用SetCursor-Mode()方法来设置鼠标模式,鼠标模式通过enum tkCursorMode枚举定义,包括cmZoomIn、cmZoomOut、cmPan、cmSelection、cmNone等;另一种是直接调用 Map对象方法:ZoomIn、ZoomOut、Zoom-ToLayer、ZoomToMaxExtents、ZoomToShape等。
(4)动态绘制。当需要比较频繁的动态绘制时,可以通过NewDrawing方法创建一个绘图层,然后调用DrawPoint、DrawLine、DrawPolygon等绘制方法在已有图层上绘制点、线和多边形要素。清除绘制可用ClearDrawing方法。用户可以多次调用NewDrawing方法、绘制方法和ClearDrawing方法实现要素的动态变化。但在创建了新的绘图层后,无法在其他绘图层上再进行任何操作。
当利用MapWinGIS组件建立起基本GIS程序框架后,就可以方便地进行各种GIS程序设计了。Map-WinGIS提供了非常便捷的数据访问、基础图层和图形操作方法,开发者可以将主要精力都放在算法本身。笔者以MapWinGIS组件开发了多个GIS算法程序,包括DIJKSTRA最短路径搜索、DEM提取等高线、矢量和栅格相互转换等算法程序,在GIS教学和科研中发挥了较好的作用(见图2)。
在GIS程序设计和开发的过程中,开发效率、使用难易程度、可移植性、免费开放对开发者来说是比较关注的问题,尤其是对于GIS领域的教学和科研工作者。MapWinGIS组件综合且平衡了诸多开源GIS平台性能特点,在很大程度满足了GIS开发者的一般要求,有助于软件程序的升级、维护和扩展,同时也对提高GIS教学和科研效果起到良好的推动作用。
【相关文献】
[1]王勉.开放框架下GIS开发方式研究[D].成都:四川师范大学,2008.
[2]卢群.基于开源GIS的城市综合交通规划通用软件框架设计与实现[D].上海:同济大学,2009.
[3]胡庆武,陈亚男,周洋,等.开源GIS进展及其典型应用研究[J].地理信息世界,2009(2):46-55.
[4]唐黎明,尤黎明,周荣福.GRASS:Linux下的开源GIS软件[J].采矿技术,2006,6(2):82-84.
[5]张睿.OSSIM-新遥感 新选择[J].软件世界,2006(20):55.
[6]李楠.基于Eclipse的uDig插件的设计与实现[J].计算机与现代化,2010(2):120-172.
[7]赵欣,杨多志,于沿涛,等.SharpMap在露天矿卡车调度系统监控端的应用[J].露天采矿技术,2009(5):73-75.
[8]杨益飞,刘小勇.基于MapWinGIS的组件式GIS开发及应用[J].测绘与空间地理信息,2010,33(6):143-144.
[9]王珂.基于MapWinGIS的面向对象空间数据模型的构建与研究[D].南京:河海大学,2008.
[10]刘春,卢群,吴杭彬.基于开源GIS的交通分析软件设计[J].软件导刊,2009(1):167-168.
[11]MapWinGIS Reference Manual[EB/OL].[2011-10-08]. 23.
[12]Daniel ,PhD,g Started With the MapWinGIS ActiveX Control[EB/OL]..
发布者:admin,转转请注明出处:http://www.yc00.com/news/1688385053a130098.html
评论列表(0条)