mapgis二次开发教程
- 格式:docx
- 大小:27.43 KB
- 文档页数:12
MapGIS常见问题中地数码集团平台二次开发支持部本期常见问题主要由MapGIS开发平台C/S开发问题组成,涉及部分B/S开发问题。
1、基于MapGIS开发平台,如何通过代码实现修改线的图形参数操作,包括可变颜色、可变笔宽、线型等参数?答:可按照如下步骤实现:(1)在MapGIS软件中若需查看线、区等要素的图形参数,需开启还原显示功能,可通过编写代码手动开启还原显示功能。
(2)在还原显示模式下,线是通过MapGIS符号库的线型来显示的,而线型符号则由几部分构成,而每一部分若采取固定颜色或者固定笔宽的模式,则无法看到修改后的线型参数。
只有在某一部分采取可变颜色或者可变笔宽的情况下,对图形信息中的相关项的修改才会有效果,因此可以通过修改符号库的相关线型的颜色模式或笔宽模式来达到效果。
(3)一个线型可以通过线型号+辅助线型号来唯一确定,以COM组件式开发C#语言为例的线属性如下:mcLinInfo. libID:辅助线型号mcLinInfo. linstyID:线型号(4)基于COM组件式开发C#语言的还原显示实现代码如下:mcLinInfolineInfo = new mcLinInfo();//线信息mcGeoVarLinevarLine = new mcGeoVarLine();//折线对象//点对象mcDot dot1 = new mcDot();mcDot dot2 = new mcDot();//点对象赋值dot1.x = 50;dot1.y = 50;dot2.x = 200;dot2.y = 200;//添加到折线对象varLine.Append2D(dot1);varLine.Append2D(dot2);//设置线参数lineInfo.linstyID = 21;lineInfo.libID = 4;lineInfo.xscale = 20;lineInfo.yscale = 20;//绘图IXDisplay display = this.axMapXView1.Display;//绘图对象display.DispLine(ptGeom as IGeoLine, lineInfo as mcLinInfo, 6);//根据线参数显示对应的线display.DisplayOption.SymbolShow = true;//开启还原显示功能display.DispLine(varLine, lineInfo as mcLinInfo, 0);//重绘制线2、在查看地图的过程中,常要通过不同比率显示地图,如何通过代码实现按照一定的显示比率显示地图的功能?答:步骤如下:(1)用户常常将显示比率与比例尺相混淆,比例尺一般应用于地图数据打印输出时,表示图上距离与实际距离的比值。
收稿日期:2001-11-16基金项目:国家“九五”重中之重科技攻关项目“M APGIS 软件的开发与商品化”(N o.96-B02-03-05).基于MAPGIS 组件的二次开发周顺平,王海龙(中国地质大学信息工程学院,湖北武汉430074)摘要:组件式GIS 是GIS 与组件技术相结合的新一代地理信息系统.介绍了地理信息系统和组件式GIS 的基本概念,并简单介绍了组件式GIS 的基本优点及M APGIS 组件开发平台的组成和功能划分.阐述了使用M APGIS 组件进行GIS 应用软件二次开发的一般方法和步骤,以及在VB 中使用M APGIS 组件对象的基本步骤.并以VB 为开发环境,结合M APGIS 数据管理组件、图形显示组件、图形编辑控件、属性编辑控件等,给出了一个具有图形显示、地理属性数据编辑等功能的实例程序,演示了如何使用M APGIS 组件进行GIS 应用软件的二次开发.关键词:地理信息系统;组件;组件式地理信息系统;M APGIS;GIS 二次开发.中图分类号:TP311.52 文献标识码:A 文章编号:1000-2383(2002)03-0289-04作者简介:周顺平(1967-),男,副教授,1999年毕业于中国地质大学信息工程学院,获硕士学位,现主要从事GIS 基础软件和数据库方面的科研及应用开发工作.E 2mail :zhouspin @ 地理信息系统(geographic information system ,简称GIS )是在计算机软硬件支持下,以采集、存储、管理、检索、分析和描述空间物体的地理分布数据及与之相关的属性,并回答用户问题等为主要任务的技术系统[1,2].组件式GIS (com ponent GIS )指基于组件对象平台,以组件的形式提供基本功能的GIS ,是GIS 与组件技术相结合的新一代地理信息系统[3].组件式GIS 充分利用了组件的可重用特性,使用GIS 组件可以很大程度地提高GIS 应用软件的开发效率和质量.MAPGIS 地理信息系统是国产的GIS 基础软件平台,它提供了丰富的二次开发手段,包括API 函数库、C ++类和组件开发库[4].1 MAPGIS 组件开发平台MAPGIS 组件开发平台以一系列C OM 组件和ActiveX 控件的形式提供了GIS 基本功能:包括数据管理组件、图形显示组件、图层管理组件、地图管理组件、图例管理组件、图像处理组件、图库管理组件、图1 M APGIS 组件(控件)对象关系Fig.1Relation of M APGIS com ponent (ActiveX control )ob 2jects图形编辑控件、工程管理控件、属性编辑控件、属性结构编辑控件等.这些组件(控件)对象关系如图1所示.数据管理组件是整个系统的基础和核心,主要进行空间数据和属性数据的存取和管理,并提供基本的数据交互功能.数据管理组件定义了MAPGIS的基本数据类型和数据结构,封装了对点、线、区、网、表格等工作区的基本操作[5].GIS 通用功能组件(控件)集合提供了MAPGIS 平台的通用处理功能.通用功能组件基于数据管理组件构造而成,它们具有面向通用GIS 功能:图形显示第27卷第3期地球科学———中国地质大学学报V ol .27 N o .32002年5月Earth Science —Journal of China University of G eosciencesM ay 2002对象MAPGIS DC封装了MAPGIS的基本显示操作;图层对象Layer封装了点、线、区、网文件的数据管理功能;地图对象Map封装了对MAPGIS基本图形的编辑/输出操作和对多个图层的管理功能;图例对象Legend封装了点、线、区图例元素的管理和操作功能,并提供了管理图例文件存储和图例元素的功能;MSI对象封装了对图像工作区的操作和显示,并提供了矢量数据和栅格数据的相互转换功能;DBS 对象封装了操作和显示图库工作区的方法.同时, MAPGIS组件开发平台还提供了几个可视化控件: EditView控件对象包括点编辑、线编辑、区编辑、数字化、矢量化及其他操作功能;MapT reeCtrl控件对象封装了与Map对象的交互操作功能;G isAttEdit控件对象主要用来浏览和编辑MAPGIS属性数据; AttStruEdit控件对象主要用来浏览和编辑MAPGIS 属性结构.MAPGIS组件包含在一系列WI NDOWS动态连接库文件里,ActiveX控件则包含在一系列.ocx文件中.表1是WI NDOWS文件与MAPGIS组件的对应关系.表1 WIN DOWS文件与MAPGIS组件对应关系T able1C orrespondence of WI NDOWS files and M APGIS com po2 nentsWINDOWS文件M APGIS组件(控件)M ap G isBasC om1.dll数据管理组件M ap G isDspC om.dll图形显示组件M ap G is LayerC om.dll图层管理组件M ap G isM apC om.dll地图管理组件、图例管理组件M ap G isDBSC om.dll图库管理组件M ap G isRasterC om.dll图像分析管理组件EditView.ocx图形编辑控件M apT ree.ocx工程管理控件G isAttEdit.ocx属性编辑控件AttS truEdit.ocx属性结构编辑控件2 基于MAPGIS组件的二次开发MAPGIS组件不依赖于某一种开发语言,它可以直接嵌入到通用的开发环境(如VIS UA L BASIC或DE LPHI)中实现GIS功能.通过调用MAPGIS组件的基本功能,并结合其他专业模型和专业模型分析控件,可以快速地开发GIS应用程序,这就大大降低了GIS应用系统的开发难度与开发成本.利用MAPGIS组件开发平台进行GIS应用程序的开发分以下几个步骤进行:(1)选择应用系统的开图2 M APGIS应用程序层次结构Fig.2Architecture of M APGIS application发工具,如VB;(2)将使用到的MAPGIS组件引用到应用程序中;(3)调用MAPGIS组件的属性和方法完成GIS基本功能;(4)开发应用系统专用的功能.基于MAPGIS组件开发平台的GIS应用程序结构如图2所示.3 VB开发示例MAPGIS组件的使用方法与一般组件的使用方法完全相同,在使用MAPGIS组件之前,必须先注册.运行MAPGIS二次开发包中的setup.exe程序,可以自动安装并注册组件;或进行手工注册:将要注册的组件对应的文件(如数据管理组件对应的Map G is2 BasC om1.dll文件)拷贝到MAPGIS的program目录下,假设路径为:“D:\mapgis61\program\”,选择WI NDOWS开始菜单的运行,在命令行中输入:“regsvr32D:\mapgis61\program\map G isBasC om1. dll”,进行组件的注册[6].在VIS UA L BASIC中使用MAPGIS组件对象的步骤是:(1)嵌入MAPGIS对象类型库;(2)建立MAPGIS对象;(3)调用MAPGIS对象和其他VB对象的方法和属性完成GIS应用软件功能;(4)释放MAPGIS对象.下面的例子演示了如何使用MAPGIS 组件(控件)进行GIS应用软件的开发.首先,新建一个VB工程(标准EXE类型),“引用”程序中用到的组件和控件.为了使VIS UA L BA2 SIC能够访问MAPGIS组件对象,需要在VIS UA L BA2 SIC项目中嵌入MAPGIS对象类型库.执行下列步骤:从Project(工程)菜单中选择References(引用), References对话框出现后,选中所需的类型库: Map G isBasC om11.0T ype Library和Map G isDspC om1. 0T ype Library.再从Project(工程)菜单中选择C om po2 nents(组件),C om ponents对话框出现后,选中所需的682地球科学———中国地质大学学报第27卷控件:EditView ActiveX C ontrol M odule和G isAttEdit ActiveX C ontrol m odule.然后,将图形编辑控件、属性编辑控件添加到一个F orm中,并将控件的名称分别改为EditView和G isAttEdit,并定义在此F orm中使用到的变量:Public linAi As LinArea ’线工作区对象Public isBrowAtt As Integer. ’浏览编辑属性标志接着,添加LoadLinFile函数和BrowOrEditAtt函数,并在“装入线文件”和“浏览、编辑线属性”的菜单响应中调用这2个函数.Load LinFile函数,调用线工作区对象LinArea的Load方法,装载一个线文件到工作区中,并设置图形显示范围;BrowOrEditAtt函数,则调用G isAttEdit控件的属性和方法来编辑工作区文件的属性值:Public Function Load LinFile()’装入线文件I f N ot linAi Is N othing ThenSet linAi=N othing ’释放原工作区End I fSet linAi=New LinAreaI f linAi.Load Then ’装入新文件EditView.SetWinMapRange-linAi.rect.xmin,linAi.rect.ymin,-linAi.rect.xmax,linAi.rect.ymax ’设置图形显示范围EditView.RestoreWindow ’复位窗口End I fEnd FunctionPublic Function BrowOrEditAtt(ByVal Editable As Integer)’浏览/编辑属性I f N ot linAi Is N othing ThenG isAttEdit.AttachArea linAi,gis LI N ’添加要编辑的工作区到控件中G isAttEdit.EditEnable=Editable ’浏览或编辑属性标志isBrowAtt=1F orm-Resize ’调整窗口及控件的位置和大小End I fBrowOrEditAtt=1End Function再接着,触发EditView控件的MyDraw事件和F orm的Resize事件,在事件处理过程中分别添加显示工作区和移动、调整控件大小的代码:Private Sub EditView-MyDraw(ByVal M pDC As Object)’显示工作区图3 M APGIS组件开发示例Fig.3Sam ple of application based on M APGIS com ponents Dim mapDC As Map G isDCSet mapDC=M pDC ’设置图形显示对象mapDC.DispArea linAi ’调用图形显示对象的方法显示linAi工作区Set mapDC=N othing ’释放图形显示对象End SubPublic Sub F orm-Resize()’调整窗口及控件的位置和大小I f isBrowAtt=0Then ’不显示实体属性EditView.M ove0,0,Me.ScaleWidth,Me.Scale2 HeightG isAttEdit.M ove0,0,0,0E lse ’显示实体属性EditView.M ove0,0,Me.ScaleWidth,Me.Scale2 Height/332G isAttEdit.M ove0,Me.ScaleHeight/332,Me. ScaleWidth,Me.ScaleHeight/3End I fEnd Sub’最后,释放工作区对象:Private Sub F orm-Unload(Cancel As Integer)’释放对象I f N ot linAi Is N othing ThenSet linAi=N othing782 第3期 周顺平等:基于M APGIS组件的二次开发End I fEnd Sub程序运行结果如图3所示.参考文献:[1]吴信才.地理信息系统的基本技术与发展动态[J].地球科学———中国地质大学学报,1998,23(4):329-333.W U X C.Basic technology and development of geographic in2 formation system[J].Earth Science—Journal of China Univer2 sity of G eosciences,1998,23(4):329-333.[2]李超岭,张克信.基于GIS技术的区域性多源地学空间信息集成若干问题探讨[J].地球科学———中国地质大学学报,2001,25(6):545-550.LI C L,ZH ANG K X.S tudy on regional multi2s ource geologi2 cal spatial in formation system based on techniques of GIS[J].Earth Science—Journal of China University of G eosciences, 2001,25(6):545-550.[3]宋关福,钟耳顺.组件式地理信息系统研究与开发[J].中国图象图形学报,1998,3(4):314-316.S ONG G F,ZH ONG E S.Research and development of com2 ponents geographic in formation system[J].Journal of Image and G raphics,1998,3(4):314-316.[4]周顺平,李雪平.M APGIS二次开发库的设计与实现简介[J].地球科学———中国地质大学学报,1998,23(4):337 -340.ZH OU S P,LI X P.M APGIS design and realization in the secondary2developed functions set[J].Earth Science—Journal of China University of G eosciences,1998,23(4):337-340.[5]袁艳斌,吴冲龙,李伟忠.面向野外地质填图的空间实体对象表达[J].地球科学———中国地质大学学报,2001, 26(2):192-196.Y UAN Y B,W U C L,LI W Z.Object styles of spatial entity for field geological mapping based on object2oriented method [J].Earth Science—Journal of China University of G eo2 sciences,2001,26(2):192-196.[6]R ofail A,Shohoud Y.C OM与C OM+从入门到精通[M].邱仲潘,等译.北京:电子工业出版社,2000.27-34.R ofail A,Shohoud Y.Mastering C OM and C OM+[M].Bei2 jing:E lectronics Industry Press,2000.27-34.Secondary Development of GIS Application B ased on MAPGIS ComponentsZH OU Shun2ping,W ANG Hai2long(Faculty o f Information Engineering,China Univer sity o f G eosciences,Wuhan430074,China)Abstract:C om ponent GIS,combined with GIS and com ponent technology,is a mainstream in GIS technology. This paper introduces the concept of GIS and com ponent GIS and presents the merits of com ponent GIS and the struc2 ture of MAPGIS com ponent development platform.Meanwhile it shows the comm on method of GIS application develop2 ment by using MAPGIS com ponents and the steps of using MAPGIS com ponents in VIS UA L BASIC.Als o,it describes a sam ple to dem onstrate how to develop GIS application based on MAPGIS com ponents.The sam ple is combined with VIS UA L BASIC and MAPGIS com ponents,such as data management com ponent,graphic display com ponent,graphic editing control and attribute data editing control,and thus possesses the functions of graph display and GIS attribute data editing.K ey w ords:GIS;com ponent;com ponent GIS;MAPGIS;secondary development of GIS.882地球科学———中国地质大学学报第27卷。
MAPGIS VirtualEarth 二次开发技术篇目录目录..............................................................................................................................................- 2 -1 概述..............................................................................................................................- 3 -2 开发环境介绍..............................................................................................................-3 -2.1开发环境................................................................................................................- 3 -2.2开发软件---Eclipse................................................................................................- 4 -3 MAPGIS VirtualEarth二次开发技术........................................................................- 14 -3.1 JavaScript脚本语言.............................................................................................- 14 -3.2 Java语言...............................................................................................................- 16 -3.3 HTML语言..........................................................................................................- 18 -3.4 JSP技术................................................................................................................- 19 -3.5 数据库(SQL Server/Oracle)..........................................................................- 20 -3.6 XML语言.............................................................................................................- 21 -1 概述MAPGIS VirtualEarth是中地数码拥有自主产权的一套显示三维地球的软件,它依托MapGIS平台为基础,基于Java applet技术和JOGL技术开发。
Mapgis二次开发(入门)——MFC下的基本步骤作者:刘明瓒成都理工大学QQ:34194203欢迎大家转载此文,但请在转载时保证文章的完整性开发平台:VC++6.0&&Mapgis6.75内容:mapgis二次开发的一些基本概念和基本步骤要求:阅读此文需要一定C++编程基础和一点MFC的知识以及一点mapgis知识。
1概述1.1Mapgis二次开发的作用扩展mapgis产品功能,以达到自己的目的。
简单讲有:简化操作(将mapgis产品提供的功能包装,以前要点几下的现在点一下就可以了),功能扩展(mapgis产品没有的功能,可以通过二次开发自己实现),功能应用(自己开发的某个系统如果想使用mapgis里面的一些功能,可以通过二次开发直接拿到自己的系统中),……等等。
1.2基本概念有一点需要说明,mapgis二次开发所有API函数都是以“_”开头的,如_OpenPntArea、_GetPnt、_GetLin等等。
其他概念在要碰到时在谈。
1.3所需工具1、Microsoft Studio VC++6.02、Mapgis6.75产品及二次开发包以上工具网上均有免费下载, 进行一下步骤时请先下载并安装好。
2Mfc向导与工程设置2.1新建工程(1)打开VC++6.0 【File】->【New】选择【Projects】选项卡、【MFC AppWizard(exe)】、填入工程名称Mapgis_1,点击【OK】如下图:(2)选择Dialog based (为简单起见)点击【Finish】新建工程完毕2.2工程设置(1)点击菜单栏【Project】->【Setting】选择【C/C++】选项卡 Category:中选择【Code Generation】Struct member alignment选择【1 Byte】点击【OK】说明:此步设置是将C++结构体成员的内存对齐方式设置为1字节,因为mapgis6.X的开发就是采用的此对齐方式。
mapgis二次开发教程默认分类 2009-09-08 10:18:14 阅读898 评论1 字号:大中小订阅目前MAPGIS二次开发库主要以API函数、MFC(Microsof t Foundation Class)类库、Com组件、Activ eX 控件四种方式提供。
开发库被封装在若干动态链接库(DLL)中。
API函数在使用方法上与Windows的API函数完全一样,因此是独立于开发工具的。
无论您使用VC++、VB还是BC++、Dephi…,您在这些工具中如何调用Windows的API函数,您就可以怎么调用这些二次开发函数。
MAPGIS类库是为基于MFC类库的C++开发者提供的多个可重用基类,它将应用程序所需的常见基本功能作了封装,使用便利,改动灵活。
开发者只需从类库派生即可使自己的程序获得从窗口显示控制到图形查询编辑的各项功能。
MAPGIS COM组件是MAPGIS新一代体系结构的表现,功能更加强大,使用更加便利。
具有二次开发方便、易于集成、无限扩展等特点。
支持多种开发软件,包括Visual C++、Visual Basic、Delphi、script、InterDev、Power Builder等,开发者可以多层次的访问MAPGIS组件的数据层、功能层和界面层。
Activ eX 控件是MAPGIS完成组件化改造的成果之一,它们使得二次开发更为快捷便利,代码的可复用性更高。
上述各类开发接口提供了从最基本数据单元的读取、保存、更新和维护到MAPGIS地图库的建立和漫游,以及空间分析,图象处理等一系列功能。
其中,API函数是基础,使用上最灵活,但技巧性要求也最高。
所以本书大量篇幅用于介绍C++ API函数。
MAPGIS将不断丰富完善各类二次开发接口,以多种开发手段满足不同层次、不同应用的需求。
这些函数所在的C++头文件表4-1所示:表4-1 二次开发头文件4.2 MAPGIS基本术语下面介绍MAPGIS系统中经常使用的一些基本概念。
文章编号:049420911(2000)1120015203中图分类号:P 208 文献标识码:B利用VB 进行M APG IS 二次开发建立房屋信息管理系统韩丽蓉,过静王君(清华大学土木系,北京100084)Use VB to Rea l ize the Custom iza tion of M APGIS for Establ ish i ng HouseI nforma tion M anagem en t SystemHAN L i 2rong ,GUO J ing 2jun摘要:介绍基于M A PG IS 平台利用VB 语言实现房屋信息管理的二次开发中的关键技术及建立房屋信息数据库时的注意问题。
关键词:地理信息系统;M A PG IS 平台;VB 语言;数据库 收稿日期:2000208215 一、前言随着城市建设规模的扩大及对城市基础信息现代化管理的需要,对各单位房屋管理部门提出了全面、高效、高质的要求。
房屋管理的日常工作要涉及大量与地理信息有关的资料,如地形图、地籍宗地图、土地使用图、房屋图、坐标等,而常规以纸张、表格对基础信息的管理方式已很不适应现代化信息管理的需要。
地理信息系统是一种专门用于管理地理空间分布数据的计算机系统,是房屋信息管理的有利工具。
而VB 语言具有进行可视化程序设计、简单易用、易与外部数据库进行链接、界面友好等优点,因而得以迅速推广。
本文所介绍的系统就是采用M A PG IS 为基础平台,VB 语言为开发工具对航空图像、房屋图进行空间及属性管理的系统,通过SQL 语言查询外部A CCESS 人事档案数据库来获得每间房屋住户及房屋结构的情况,目的是为房屋管理人员提供强有力的空间及非空间信息支持,最大限度地减少或取代以往的手工作业方式,使工作人员方便、高效、准确地处理日常工作。
二、系统功能与组成1.系统功能系统功能图见图1。
本系统主要由数据库、房屋图更新、房屋管理、图表输出几部分组成。
MAGIS二次开发培训教程前言MAPGIS是武汉中地信息工程有限公司研制的具有自主版权的大型基础地理信息系统平台它是一个集当代最先进的图形图像地质地理遥感测绘人工智能计算机科学于一体的大型智能软件系统是集数字制图数据库管理及空间分析为一体的空间信息系统是进行现代化管理和决策的先进工具MAPGIS连续四年在全国GIS测评中名列第一并成为唯一连续四年获得国家科技部向社会推荐的国产GIS软件平台中地软件丛书之MAPGIS二次开发培训教程是根据最新推出的MAPGIS软件平台编写而成主要介绍进行MAPGIS二次开发必须具备的基础知识主流开发工具以及MAPGIS系统的基本概念结构体系和操作方法该教程分为三个部分共十一讲其中第一部分即第一讲的内容介绍Windows编程的概念包括类与数据封装继承重载虚拟函数与多态性以及内存管理该部分为可视化编程的基础有可视化编程经验的读者可以略过此讲直接进入下一部分的学习第二部分即第二讲的内容编程工具VC对于在VC这样一个编程环境中开发应用程序所应熟悉的概念术语和最基本的框架构件实现过程等知识做了一个简明扼要的介绍已掌握一定VC编程基础知识的读者可以略过该部分第三部分即第三讲至第十一讲的内容详细讲述了地理信息系统的基本概念包括GIS原理概述空间数据类型空间数据库空间数据结构与数据管理等内容MAPGIS的基本概念和体系结构简要描述了MAPGIS二次开发的基本概念术语工作区空间实体及其数据C类组织和开发环境介绍的内容MAPGIS空间数据存取和属性编辑包括工作区空间实体和属性的操作及其网络介绍图形显示输出及窗口操作图形编辑类库和控件开发矢量空间分析和属性查询投影变换图框生成和工程管理图库管理和查询系统包括基于图库的应用程序开发MAPGIS图库介绍开发的一般步骤以及结合图库显示说明图库主要函数的功能等方面的内容以及图象分析与处理这一部分为本教程的主要部分能使大家从了解到熟练掌握这个部分的内容也是我们编制本书的主要目的同时它还可被作为MAPGIS二次开发过程中的参考来使用参加本书编写的人员主要是本系统的软件开发人员以及长期从事MAPCAD和MAPGIS培训的教师由于时间仓促书中难免存在错误和不当之处敬请广大用户及读者提出宝贵意见和建议以利改进中地软件丛书编委会2001年10月目录第一讲基于WINDOWS编程的基础知识 111引言 112类与数据封装 113继承 214重载 415虚拟函数与多态性 5第二讲编程工具VC 821熟悉VC开发环境822消息与命令 823文档视结构 1024图形设备接口1125对话框和控件1226编程规范13第三讲地理信息系统基本概念1531 GIS原理概述1532 GIS空间数据类型1733 GIS数据管理1834空间分析2035地理信息系统发展20第四讲 MAPGIS的基本概念和体系结构 2241 MAPGIS二次开发的基本概念2242 MAPGIS基本术语2343 MAPGIS的数据管理工作区2544 MAPGIS的空间实体及其数据组织2745 MAPGIS的C类组织 2946 MAPGIS的VC开发环境介绍 30第五讲 MAPGIS空间数据存取和属性编辑32 51工作区操作 3252空间实体操作3453属性属性结构操作3754网络介绍44第六讲图形显示输出及窗口处理4561图形显示输出4562窗口处理4963类库开发中的图形显示和窗口处理51第七讲图形编辑类库和控件开发5371图形编辑开发概要5372图形编辑API函数开发5373 MAPGIS类库开发5474 MAPGIS控件开发60第八讲矢量空间分析和属性查询6681矢量空间分析6682属性查询检索71第九讲投影变换和图框生成7391投影变换 projdllhcordcvth 7392图框生成 frmdll32h 83第十讲图库管理和工程管理91101 MAPGIS图库简介91102基于图库的应用程序的开发92103结合图库的显示说明图库中主要函数的功能92 104工程管理 prj_disph和map_prjh 96第十一讲 MAPGIS图象处理和分析101111遥感图象处理的基本知识101112处理方法101113主要API 介绍 99114组件介绍107115在VC中的开发过程结合示例程序讲解108116示例程序说明109附录 MAPGIS 二次开发问题集锦1101属性和属性结构1102空间实体操作问题1233显示编辑问题1244空间分析问题1315数字高程模型1316安装问题1347工程问题1358输出问题1369其它 138第一讲基于WINDOWS编程的基础知识11引言111 过程化 procedural programming程序被认为是在一个数据集合上进行的一系列操作112 结构化 structured programming主要思想是功能分解并逐步求精113 面向对象的程序设计 object_oriented programming实质是把数据和处理这些数据的过程合并为一个单独的对象――一个具有确定特性的自完备的实体114 面向对象程序设计的特征1 封装2 继承3 多态12类与数据封装121 什么是类简单的说类就是一种用户定义的数据类型跟结构类似并且类具有自己的成员变量和成员函数方法通过它们可以对类自身进行操作如汽车可以看作是发动机车轮座椅等诸如此类的集合也可以从功能的角度来研究譬如能移动加速减速刹车等例如class CMyClass1protectedCMyClass1publicvirtual CMyClass1122 封装encapsulation定义指能够把一个实体的信息功能响应都装入一个单独的对象中的特性封装的优点如下1 封装允许类的客户不必关心类的工作机理就可以使用它就象驾驶员不必了解发动机的工作原理就可以驾驶汽车一样类的客户在使用一个类时也不必了解它是如何工作的而只需了解它的功能即可2 所有对数据的访问和操作都必须通过特定的方法否则便无法使用从而达到数据隐藏的目的123 对象对象就是类的实例类与对象的关系就如类型和变量的关系所有对类的操作都必须通过对象来实现当一个类定义了多个对象时每个对象拥有各自的成员数据124 类的三种成员类型1 私有成员 private 缺省情况下一个类中的所有成员都是私有的私有成员只能被类本身的成员函数访问并且不具有继承性2 公有成员 public 公有成员可以被类成员函数和外部函数使用3 保护成员 protected 类的保护成员能被类及其派生类的成员函数和友员函数使用具有继承性125 构造函数与析构函数1构造函数a 是特殊的成员函数在创建对象时首先由系统自动调用它的作用是为新创建的对象分配空间或为该对象的成员变量赋值等b 构造函数名必须与其类名称完全相同并且不允许有返回值2析构函数a 析构函数是构造函数的逆操作b 析构函数在类名之前加来命名它不允许有返回值也不允许带参数并且一个类只能有一个析构函数13继承131 传统程序设计的缺点增加功能对程序所作的修改工作量非常大132 继承的优点继承的方法允许在不改动原程序的基础上对其进行扩充这样使得原功能得以保存而新功能也得以扩展这有利于减少重复编码提高软件的开发效率133 基类与派生类1一个类可以继承其它类的成员被继承的类叫基类或父类继承类叫派生类或子类2派生类不但拥有自己的成员变量和成员函数还拥有父类的成员变量和成员函数134 类的保护成员 protected前面介绍了类的私有成员只能被类的成员函数和友员函数使用类的保护成员能被类及其派生类的成员函数和友员函数使用也就是说类的保护成员具有继承性而类的私有成员不具有继承性135 公用基类和私有基类1公用基类中的所有public成员在派生类中仍是public成员所有protected成员在派生类中仍是protected成员2私有基类中的public成员和protected成员在派生类中均变成private 成员136 多重继承1多重继承的定义方法例子class Apublicint ivoid func1class Bpublicint ivoid func1class C public ABvoid Show缺省情况下基类被定义为 private因此基类B为私有基类2继承的不确定性例子class Cpublic ABvoid Showj iifunc1由于基类A和B中同时拥有数据成员i和成员函数func1类C引用基类的成员时系统无法分辨是调用哪一基类的成员而发生错误3解决多重继承的不确定性使用域操作符指明要调用的基类即可解决不确定性问题class Cpublic ABint jvoid Showj AiBiAfunc1137 多层继承定义所谓多层继承指的是从一个类派生出另一个类然后以派生类作为基类派生出另一个类直到最后生成的派生类满足需要为止见MSDN中的Hierarchy Chart138 派生类的构造函数与析构函数在继承关系下派生类的构造函数负责调用基类的构造函数来设置基类数据成员值例class base基类publicint ibase int j构造函数i jclass derivedpublic base派生类publicdouble fderived int doublederivedderived int k double l base k派生类构造函数f l139 构造函数的调用顺序1 在定义派生类对象时系统首先调用基类的构造函数然后调用派生类的构造函数在上例中derived类首先调用base类的构造函数然后调用自身的构造函数2 析构函数的调用顺序与构造函数的调用顺序相反14重载141函数重载1如果函数有相同的名称和返回值而有不同的参数个数或参数类型则这些函数就是重载函数2派生类继承了基类的某一函数并且又自定义了一个同名函数有相同的返回值不同的参数类型或参数个数这种情况不属于重载因为它们属于不同的域3例class basevoid func int ivoid func double fvoid func double f long q142 操作符重载重载操作符的定义返回值类型 operator op 参数表其中op为重载操作符它必须是VC中所定义的运算符然后像定义函数一样定义重载操作符函数例子class personint agevoid operatorvoid personoperatorage15虚拟函数与多态性多态性是面向对象程序设计的精髓之所在也是C中最难理解和掌握的部分在C中多态性是建立在虚拟函数基础上的虚拟函数的使用使类的成员函数表现出多态性151虚拟函数1函数的定义在定义类时在其成员函数前加上关键字virtual2如果基类中成员函数定义为虚函数则派生类中与其定义完全相同的成员函数编译器自动将其视为虚函数3只有类的成员函数才能定义为虚函数4虚拟成员函数的存取要看首次定义它的类中该函数是public还是private 例class Insectvirtual bool CanFlybool Insect CanFlyreturn FALSEclass Butterflypublic Insectbool CanFlybool Butterfly CanFlyreturn TRUE152 虚函数的调用根据对象的不同而去调用不同类的虚拟函数可以使用基类对象调用派生类对象即将派生类对象或指针赋值给基类对象或指针反方向的赋值将基类的对象或指针赋给派生类的对象或指针是危险的例bool rtnInsect inc1pIncButterfly btflypInc inc1 pInc指针指向Insect对象rtn pInc- CanFly 返回FALSEpInc btfly pInc指针指向Butterfly对象rtn pInc- CanFly 返回TRUE153 虚拟函数与重载函数的区别1形式上重载函数要求有相同的返回值类型和函数名并有不同的参数序列而虚拟函数要求三者完全相同2重载函数可以是成员函数或非成员函数而虚拟函数必须是成员函数3调用方法上重载函数根据所传递的参数序列的差别作为调用的依据而虚拟函数则根据调用对象的不同而去调用不同类的函数4虚拟函数在运行时表现出多态功能而重载函数不具有这一功能154纯虚函数定义virtual type funcname parameter 0C中有时设计基类就是为了被继承而基类中的虚拟函数不做任何工作这种情况下可以将基类中的虚拟函数定义为纯虚函数包含纯需函数的类叫抽象类抽象类不能定义对象但可以定义指向它的指针习题11什么是类12理解封装继承和多态第二讲编程工具VC21熟悉VC开发环境211 VC向导提供的帮助以前Windows编程需要程序员编写大量的框架代码这对初学者来说简直就是一个噩梦并且这些框架代码基本相同因此Microsoft提供了向导AppWizard 帮助生成框架代码这极大的方便了我们编写程序212 VC向导可以生成的工程类型ATL COM AppWizardCustom AppWizardDatabase ProjectISAPI Extension WizardMakefileMFC ActiveX ControWizardMFC AppWizard DLLMFC Database WizardWin32 ApplicationWin32 Console ApplicationWin32 DLLWin32 Static Library213 建立第一个应用程序使用向导AppWizard生成典型的应用程序基于多文档的可执行程序214 如何获取帮助Microsoft的MSDN提供了编程所需的绝大部分信息使用F1键可以打开MSDN帮助22消息与命令221 消息消息是Windows编程不同于其它编程方式的地方如DOS环境下编程消息就是操作系统通知应用程序某事已发生的一种方式如用户已输入已单击或移动鼠标打印机已空暇等222 消息传递1 尽管操作系统用整数来引用消息但所有消息都通过它们的名字来引用一个巨大的define语句将消息名同数值联系起来不同消息由操作系统或应用程序的不同部分处理如当用户在窗口上移动鼠标时窗口得到一个WM_MOUSEMOVE消息它几乎全部传送给操作系统去处理2MFC允许程序员忽略底层消息并使得在单独类级别上声明每个类处理哪些消息更容易223 消息循环1任何windows 程序的核心是消息循环这通常包含在WinMain 例程中2MFC 通过消息映射来保持消息处理函数与消息处理信息的一致224 消息映射消息映射是进行windows 编程的一部分MFC 方法用来代替编写向用户的WinProc 发送消息的WinMain 函数及编写检查消息类型的WinProc 函数用户只需编写处理消息的函数并且在用户的类中增加一个消息映射即可其它一切由MFC 处理225 消息映射宏在类声明的结尾部分使用宏 DECLARE_MESSAGE_MAP来声明在类定义部分需要消息映射在CPP文件中使用宏 BEGIN_MESSAGE_MAP和END_MESSAGE_MAP来声明消息映射在两个宏之间声明消息的映射函数226 常用消息映射宏ON_COMMAND 用于将特定命令的处理委派给类的一个成员函数ON_MESSAGE 用于将用户自定义消息的处理委派给类的一个成员函数227 使用ClassWizard帮助用户捕获消息1带标签的ClassWizard对话框通过选择ViewClasswizard或按CtrlW可以显示主Classwizard对话框在对话框的顶部有两个下拉列表框一个用于提示正在处理的工程文件本例是另外一个用于提示哪一个类拥有正在进行编辑的消息映射在这两个组合框下面是一个列表框左边的框列出了类本身和用户局面可以产生的所有命令右边的框列出了这个类可以捕获的所有Windows消息也列出了许多捕获常用消息的虚函数在这些框的右边是一些按钮它们的作用分别是向工程文件增加新类向类中增加一函数以捕获被高亮显示的消息删除正在捕获消息的函数以及为捕获高亮显示消息的函数打开源代码口通常用户选中一个类选中一个消息并单击Add Function来捕获消息下面就是Add Function按钮所做的事情将一个骨架函数添加到应用程序源文件的末尾在源文件的消息映射中增加一个入口在包含文件中的消息映射中增加一个入口更新对话框中的消息和成员函数列表2添加Windows消息处理函数对话框还有另外一种捕获消息的方法用户可以右击ClassView中的类名然后从出现的快捷菜单中选择Add Windows Message Handler这时将出现如下图所示的对话框228 命令命令是一种特殊的消息类型用户在任何时候选择一个菜单项单击一个按钮或告诉系统做什么windows 都将产生一个命令 ClassWizard可帮助用户捕获命令运行界面与消息捕获类似命令消息都通过被选择的菜单或被单击的按钮的资源ID与相应的处理函数进行关联只有从CWnd派生的对象可以接收消息每个资源ID仅关联两个消息COMMAND和UPDATE_COMMAND_UI第一个消息允许增加处理用户选中菜单选项或单击按钮的函数一一也就是说捕获命令第二个使用户可增加一个设置菜单项按钮或者其他控件的状态的函数就像操作系统即将显示它们一样一一也就是说更新命令单击Add Function来增加一个捕获或更新包含额外步骤的命令23文档视结构231 简介MFC的文档视图结构把应用程序的数据从用户实际浏览和操纵数据的方法中分离开来简单的说文档对象负责存储加载和保存数据而视图对象允许用户在屏幕上查看数据并用适合于应用程序的方法编辑数据232 了解文档CDocument类一个文档代表了一个数据集合典型情况下一个文档由用户通过File Open 命令打开并通过 File Save命令保存用户通过与文档关联的CView对象操作文档一个文档可以有多个视图关联233 了解视图视图是显示存储在文档对象中的数据并允许用户修改这些数据视图对象保持了一个文档对象的指针为了显示和修改数据视图对象可用这个指针访问文档的成员变量一个视图对象只能与一个文档对象关联调用OnUpdate 函数可以更新一个视图所有的屏幕显示操作可在从CView继承的派生类的OnDraw成员函数中完成CView类的派生类CCtrlView 实现常用控件的视图CEditView 提供基本的文本编辑功能CRichEditView 提供复杂的文本编辑功能CFormView 通过使用对话框资源实现窗体式窗口CRecordView 提供了显示数据库记录的功能CDaoRecordView 一般与DAO数据库类一起使用其余与CRecordView相同CScrollView 提供滚动功能CListView 在窗口中显示CListView控件CTreeView 在窗口中显示CTreeView控件24图形设备接口241 理解设备环境1户能够显示任何形式的数据因为窗口中显示的所有东西不论是文字表格位图或是其它任何类型的数据都是以图形方式显示的2MFC通过将windows的GDI函数和对象封装到其设备环境DC类中来帮助用户显示数据3一个设备环境DC就是一个数据结构它对窗口的绘制表面的属性保持跟踪这些属性包括当前选择的画笔画刷和用来在屏幕上绘制的字体一个DC一次只能有一种画笔一种画刷和一种字体设备环境对象封装了画线写文本等API函数所有的画图操作都通过DC对象进行4DC帮助Windows实现了设备无关性DC能用来输出到屏幕打印机和元文件什么是元文件 metafile 元文件就是由一系列可变长度结构组成的数组图片以设备无关的格式存储在结构中当元文件的记录被转换成设备命令并被合适的设备处理时元文件被显示5CDC类CDC就是设备环境对象类CDC对象提供了操作DC的成员函数可以通过CDC对象类的成员函数来进行所有的绘图操作6CPaintDC类a CPaintDC 类继承CDC 类b CPaintDC 类的构造函数自动调用OnPaint 函数接着就可以在DC 中绘图类的析构函数自动调用EndPaint 函数c BeginPaint 函数准备绘图的窗口EndPaint 函数表明结束窗口的绘图d在视图类的OnDraw 函数中CPaintDC已经由系统准备好可以直接在OnDraw 中绘图并且CPaintDC由系统自动释放7CClientDC类CClientDC对象封装了所有对Windows客户区DC的操作CClientDC通过调用GetDC函数得到通过ReleaseDC函数释放8CWindowDC类CWindowDC对象封装了对整个window窗口包括框架的操作9CMetaFileDC类CMetaFileDC对象封装了对一个Windows 元文件的绘图操作但是必须自己调用OnPrepareDC函数来准备设备环境242 图形对象 Graphic ObjectWindows 提供了多种在DC 中使用的图形对象类这些类与Windows GDI的句柄类型相对应图形对象类 Windows 句柄类型CPen HPENCBrush HBRUSHCFont HFONTCBitmap HBITMAPCPalette HPALETTECRgn HRGN使用图形对象的一般步骤1定义图形对象使用图形对象类的Create函数如CreatePen创建对应的对象2将创建的图形对象选进当前设备环境DC中并保存旧的图形对象3完成使用当前图形对象后将原图形对象选回DC中4保证分配的图形对象在结束使用后被删除注意如果要反复的使用一个图形对象可以只申请一次然后在需要的时候将其选入DC中但是必须确保在不再需要使用图形对象的时候删除它25对话框和控件251 对话框Windows应用程序可能有多个对话框对于每一个对话框必须开发两个实体对话框资源和对话框类对话框资源用于定义在屏幕上显示的对话框和它的控件的大小和位置等信息对话框类是对话框和它的控件的对应代码用户可以用资源编辑器建立对话框资源向其中增加控件和对它们进行调整对话框及在对话框上的控件都必须有一个用于标识的IDClassWizard帮助用户建立一个对话框类通常由MFC类CDialog派生而来并将资源和类相连通常对话框上的每一个控件对应类中的一个成员变量要显示对话框可调用类的成员函数可以在显示对话框前为控件设置缺省值或使用控件对应的成员变量设定控件值使用ClassWizard中的Member Variables可以为对话框上的控件本身或控件值建立对应的类成员变量单击上图中的Add Variable按钮将弹出如下图所示的Add Member Variable 对话框在这个对话框的Category和Variable type下拉式组合框中可以选择控件对应成员变量的类型Value或Control类型以及它们确切对应的类型然后在程序中就可以使用定义的变量来操纵控件了252 控件1基本控件Windows常用控件MFC对应的类按钮控件CButton 编辑框控件Cedit 复选框控件CCheck 列表框控件CListBox 进度条控件 Progress bar CProgressCtrl 滑块控件CSliderCtrl 上下控件 CSpinButtonCtrl 图象列表 image list CImageList 列表视图控件 list view CListCtrl 树形控件 tree view CTreeCtrl Rich Edit控件CrichEditCtrl2添加自定义控件在应用程序中可以添加一些自己生成的或由他人提供的控件方法如下首先选择菜单projectAdd To ProjectComponents And Controls弹出对话框Components And Control Galley对话框选择Registered ActiveX Controls 然后选择准备插入的控件如GisAttEdit Contro按Insert按钮会在程序中生成控件对应的类接着就可以像使用标准控件一样使用插入的控件了26编程规范261 书写风格大括号的对齐锯齿状对齐缩进使用空白空字符空行以增加可读性262 命名规范匈牙利记法变量具有一个描述性的名字如ClassName名字用大写字母开始如果变量是一多词名则每个单词词头需大写然后在描述性名称前加上表示变量类型的字母如nCount为一整型变量bFlag为一Boolean型变量前缀变量注释 a Array b Boolean d Double h Handle I Integer index into l Long lp Long pointer to lpfn Long pointer to function m Member variable n Integer number of p Pointer to s String sz Zero terminated string u Unsigned integer C Class263 注释规则1函数注释函数开头必须注明函数功能参数返回值2变量注释应说明变量的作用3其它注释每个功能模块应加注释如一个循环体一个判断等都需要加注释习题21建立一个基于多文档的应用程序添加自己的菜单项使用ClassVizard进行消息映射22在上题基础上使用图形设备接口在窗口上绘图要求每按下一次鼠标左键就以鼠标所点坐标为中心画一个圆23建立一个基于对话框的应用程序使用几个基本控件如编辑框按钮组合框等并生成对应的变量然后通过这些变量控制控件的值第三讲地理信息系统基本概念31 GIS原理概述311 GIS概念地理信息系统GIS是在计算机软硬件支持下以采集存贮管理检索分析和描述空间物体的地理分布数据及与之相关的属性并回答用户问题等为主要任务的技术系统312 GIS发展1起始发展阶段 60年代1963年由加拿大测量学家RFTomlinson提出并建立的世界上第一个地理信息系统是加拿大地理信息系统 CGIS1963年美国哈佛大学城市建筑和规划师Howard TFisher设计和建立了SYMAP系统软件1966年美国成立了城市和区域信息系统协会 URISA 1968年国际地理联合会IGU 设立了地理数据收集委员会 CGDSP1969年又建立起州信息系统国协会 NASIS2发展巩固阶段 70年代70年代GIS朝实用方向发展各国对GIS的研究均投入了大量人力物力财力不同规模不同专题的信息系统得到很大发展从1970年到1976年美国地质调查局发展了50多个地理信息系统GIS受到政府商业和学校的普遍重视3推广应用阶段 80年代80年代GIS在全世界范围内全面推广应用应用领域不断扩大开始用于全球性的问题开展GIS工作的国家更为广泛国际合作日益加强GIS软件开发具有突破性的进展仅1989年市场上有报价的软件达70多个代表性的有ARCINFO美国GENAMAP澳大利亚SPANS拿加大MAPINFO美国MGE美国System9瑞士美国ERDAS 美国。
中地软件系列丛书MAPGIS70二次开发教程―入门篇(C++版)中地数码科技有限公司2006年4月武汉内容提要《MAPGIS70二次开发教程-入门篇( C++版)》是根据最新推出的MAPGIS70软件平台编写而成,主要介绍在VC环境下进行MAPGIS70二次开发必须具备的基础知识,通过实例程序一步步的带领大家了解和理解MAPGIS70二次开发的开发模式和开发技巧。
本书作为MAPGIS70地理信息系统系列产品配套使用手册,供使用MAPGIS70地理信息系统进行二次开发的入门用户参考。
版权所有武汉中地数码科技有限公司警告:未经武汉中地数码科技有限公司书面许可,任何单位和个人均不得以任何形式或手段复制或传播本书的任何部分。
在国家“十五”863项目的支持下,历经5年的科技攻关,由中地数码科技有限公司开发的具有完全自主版权的第一套“分布式超大型GIS平台软件MAPGIS70”已经研制成功。
MAPGIS70是属于最新的“第四代GIS”软件产品,具备“纵向多层,横向网格”的分布式体系结构,采用“面向服务”的最新设计思想,支持局域和广域网络环境下空间信息网格(SIG)的分布式计算,实现了面向空间实体及其关系的数据组织、高效海量空间数据的存储与索引、大尺度多维动态空间信息数据库、三维实体建模和分析,具有TB级空间数据处理能力、支持分布式空间信息分发与共享、网络化空间信息服务,支持Unix/Linux大型服务器,支持海量、分布式的国家空间基础设施建设。
《《MAPGIS70二次开发教程-入门篇( C++版)》是根据最新推出的MAPGIS70软件平台编写而成,主要介绍在VC环境下进行MAPGIS70二次开发必须具备的基础知识,通过实例程序一步步的带领大家了解和理解MAPGIS70二次开发的开发模式和开发技巧。
本书共分为两部分:第一部分是基于插件的应用框架开发,通过实例带领大家完成工具,视图插件制作的过程。
第二部分是基于MFC类库的应用框架开发,通过实例带领大家完成地图文档的显示编辑,空间分析功能模块的开发过程。
MAPGIS二次开发培训教程MAPGIS是武汉中地信息工程研制的具有自主版权的大型基础地理信息系统平台。
它是一个集当代最先进的图形、图像、地质、地理、遥感、测绘、人工智能、运算机科学于一体的大型智能软件系统,是集数字制图、数据库治理及空间分析为一体的空间信息系统,是进行现代化治理和决策的先进工具。
MAPGIS连续四年在全国GIS测评中名列第一,并成为唯独连续四年获得国家科技部向社会举荐的国产GIS软件平台。
中地软件丛书之MAPGIS二次开发培训教程是依照最新推出的MAPGIS软件平台编写而成,要紧介绍进行MAPGIS二次开发必须具备的基础知识、主流开发工具以及MAPGIS系统的差不多概念、结构体系和操作方法。
该教程分为三个部分,共十一讲。
其中:第一部分(即第一讲的内容):介绍Windows编程的概念。
包括类与数据封装、继承、重载、虚拟函数与多态性以及内存治理。
该部分为可视化编程的基础,有可视化编程体会的读者能够略过此讲,直截了当进入下一部分的学习。
第二部分(即第二讲的内容):编程工具VC。
关于在VC如此一个编程环境中开发应用程序所应熟悉的概念,术语和最差不多的框架、构件实现过程等知识做了一个简明扼要的介绍。
已把握一定VC编程基础知识的读者能够略过该部分。
第三部分(即第三讲至第十一讲的内容):详细讲述了地理信息系统的差不多概念(包括GIS原理概述、空间数据类型、空间数据库、空间数据结构与数据治理等内容);MAPGIS 的差不多概念和体系结构(简要描述了MAPGIS二次开发的差不多概念、术语、工作区、空间实体及其数据、C++类组织和开发环境介绍的内容);MAPGIS空间数据存取和属性编辑(包括工作区、空间实体和属性的操作及其网络介绍);图形显示输出及窗口操作、图形编辑、类库和控件开发;矢量空间分析和属性查询;投影变换、图框生成和工程治理;图库治理和查询系统(包括基于图库的应用程序开发、MAPGIS图库介绍、开发的一样步骤以及结合图库显示说明图库要紧函数的功能等方面的内容)以及图象分析与处理。
MapInfo教程--二次开发入门摘要:MapBasic是Mapinfo自带的二次开发语言,它是一种类似Basic的解释性语言,利用MapBasic编程生成的*.mbx文件能在Mapinfo软件平台上运行,早期的Mapinfo二次开发都是基于MapBasic进行的。
MapBasic学起来容易,用起来却束缚多多,无法实现较复杂的自定义功能,用它来建立用户界面也很麻烦,从现在角度看,MapBasic比较适合用于扩展Mapinfo功能。
一、利用MapBasic开发MapBasic是Mapinfo自带的二次开发语言,它是一种类似Basic的解释性语言,利用MapBasic编程生成的*.mbx文件能在Mapinfo软件平台上运行,早期的Mapinfo二次开发都是基于MapBasic进行的。
MapBasic学起来容易,用起来却束缚多多,无法实现较复杂的自定义功能,用它来建立用户界面也很麻烦,从现在角度看,MapBasic比较适合用于扩展Mapinfo功能。
二、利用OLE自动化开发1. 建立Mapinfo自动化对象基于OLE自动化的开发就是编程人员通过标准化编程工具如VC、VB、Delphi、PB等建立自动化控制器,然后通过传送类似MapBasic语言的宏命令对Mapinfo进行操作。
实际上是将Mapinfo用作进程外服务器,它在后台输出OLE自动化对象,供控制器调用它的属性和方法。
OLE自动化开发的首要一步就是建立Mapinfo自动化对象,以Delphi为例(后面都是如此),你可设定一个Variant类型的全程变量代表OLE自动化对象,假设该变量名为olemapinfo,那么有:oleMapinfo := CreateOleObject('Mapinfo.Application')一旦OLE自动化对象建立,也就是后台Mapinfo成功启动,你就可以使用该对象的Do方法向Mapinfo发送命令,如:oleMapinfo.Do('Set Next Document Parent' + WinHand + 'Style 1')这一命令使Mapinfo窗口成为应用程序的子窗口,WinHand是地图窗口句柄,style 1 是没有边框的窗口类型。
16 测绘信息与工程 2000 N o .1M A PG IS 地理信息系统的二次开发郭际元 曾 文摘 要 介绍了M A PG IS 地理信息系统的二次开发的环境,工作区概念,空间实体及其数据组织,应用程序类型以及编写应用程序的方法。
关键词 地理信息系统 二次开发 工作区 空间实体 M A PG IS 地理信息系统是中国地质大学(武汉)信息工程学院,在十几年数字制图软件开发的基础上,开展G IS 应用系统研究工作而开发出来的。
该软件于1995年10月通过鉴定,经过这几年的不断完善和扩充,于1998年推出了5.32版本。
M A PG IS 是运行在PC 486以上微机平台的工具型软件,它为用户提供了两种使用方法:其一是利用软件自身的各种功能,建立用户的空间和专业属性数据库,并实现用户所需的各种专业检索和分析;其二是借助软件所提供的完整的二次开发函数库,在M A PG IS 平台上开发面向各自领域的应用系统。
目前,利用该平台已研制开发出通信管网及配线、国土详查、地籍管理、供水管网、煤气管道、城市综合管网、电力配网、城市规划、辅助作战指挥、GPS 导航与监控、环境保护与监测等一系列应用软件系统。
1 M A PG IS 的二次开发环境操作系统,M A PG IS 开发函数库以及M A PG IS 应用程序的相互关系,如图1。
目前,M A PG IS 二次开发库主要是以A P I 函数的方式提供的,这些函数的实现被封装在12个动态链接库(DLL )中,因此,是独立于开发工具的。
用户在所使用的高级语言中,如何调用W indow s 的A P I 函数,可依此调用M A PG IS 的二次开发函数。
M A PG IS 二次开发函数库,有工作区基础函数、图形显示输出、工作区管理函数、图形窗口操作、空间分析函数、地图库读取显示、图形编辑函数、图像输入输出、图像显示函数、彩色变换函数、图像处理函数以及进程控制函数。
mapgis二次开发教程默认分类 2009-09-08 10:18:14 阅读898 评论1 字号:大中小订阅目前MAPGIS二次开发库主要以API函数、MFC(Microsof t Foundation Class)类库、Com组件、Activ eX 控件四种方式提供。
开发库被封装在若干动态链接库(DLL)中。
API函数在使用方法上与Windows的API函数完全一样,因此是独立于开发工具的。
无论您使用VC++、VB还是BC++、Dephi…,您在这些工具中如何调用Windows的API函数,您就可以怎么调用这些二次开发函数。
MAPGIS类库是为基于MFC类库的C++开发者提供的多个可重用基类,它将应用程序所需的常见基本功能作了封装,使用便利,改动灵活。
开发者只需从类库派生即可使自己的程序获得从窗口显示控制到图形查询编辑的各项功能。
MAPGIS COM组件是MAPGIS新一代体系结构的表现,功能更加强大,使用更加便利。
具有二次开发方便、易于集成、无限扩展等特点。
支持多种开发软件,包括Visual C++、Visual Basic、Delphi、script、InterDev、Power Builder等,开发者可以多层次的访问MAPGIS组件的数据层、功能层和界面层。
Activ eX 控件是MAPGIS完成组件化改造的成果之一,它们使得二次开发更为快捷便利,代码的可复用性更高。
上述各类开发接口提供了从最基本数据单元的读取、保存、更新和维护到MAPGIS地图库的建立和漫游,以及空间分析,图象处理等一系列功能。
其中,API函数是基础,使用上最灵活,但技巧性要求也最高。
所以本书大量篇幅用于介绍C++ API函数。
MAPGIS将不断丰富完善各类二次开发接口,以多种开发手段满足不同层次、不同应用的需求。
这些函数所在的C++头文件表4-1所示:表4-1 二次开发头文件4.2 MAPGIS基本术语下面介绍MAPGIS系统中经常使用的一些基本概念。
地图:是按一定的数学法则和特有的符号系统及制图综合原则将地球表面的各种自然和社会经济现象缩小表示在平面上的图形,它反映制图现象的空间分布、组合、联系及在时空方面的变化和发展。
窗口:是用户坐标系中的一个矩形区域。
用户可以改变这个矩形的大小、或移动位置来选择所要观察的图形。
窗口就象照相机的取景框,当我们瞄准不同的地方,就选取了不同的景物。
离景物越远框内包括的景物越多而成像就小;当我们靠近它,所包括的景物越少,成像越大。
利用窗口技术,我们可以有选择的考察图形的某一部分,观察图形的细致部分或全局。
视区:是设备坐标系中的矩形区域,它是图形在设备上的显示区。
可视区是在一定高程和一个或多个视点内,通过计算所得到的一个或多个视点的可见区域。
图层:用户按照一定的需要或标准把某些相关的物体组合在一起,我们称之为图层。
如地图中水系构成一个图层,铁路构成一个图层等。
我们可以把一个图层理解为一张透明薄膜,每一层上的物体在同一张薄膜上。
一张图就是由若干层薄膜叠置而成的,图形分层有利于提高检索和显示速度。
靶区:是屏幕上用来捕获被编辑物体(图形)的矩形区域,它由用户在屏幕上形成。
控制点:控制点是指已知平面位置和地表1 工作区介绍工作区是MAPGIS提出的一个概念,简单的说,工作区就是一个数据池,存放实体的空间数据、拓扑数据、图形数据和属性数据,每个工作区对应一个MAPGIS数据文件。
MAPGIS开发函数库提供对工作区实施操作的一系列函数,如将工作区中的内容存盘,从盘上将数据装入工作区,对工作区中的内容进行添加、修改、删除、检索等等。
对硬盘数据的存取及虚拟内存的管理等等复杂繁琐的工作无需应用程序的编程者去关心,而是有MAPGIS工作区管理模块自动完成。
因此,深入了解工作区的逻辑结构和工作区操作函数的使用,是进行成功的二次开发的关键。
2 工作区操作函数MAPGIS的空间数据和属性数据的读写操作都是在工作区的基础上进行的,工作区是应用程序和数据文件的桥梁,他保证了数据的一致性、完整性。
[工作区操作流程]1)初始化工作区实例(_InitWorkArea)可循环执行2-5步2)打开工作区(点,线,区,网,表)(_OpenArea)3)装文件至工作区(_LoadFile)4)...实体(图形,属性)操作,表格操作......5)关闭打开的工作区(_CloseArea)6)释放工作区实例(_FreeWorkArea)工作区实例是MAPGIS为了便于管理工作区而定义的句柄。
MAPGIS应用程序在结束之前,必须调用_CloseAllArea函数或者_FreeWorkArea函数,以便关闭所有工作区并且释放工作区实例。
_CloseAllArea函数和_FreeWorkArea函数功能相同。
C示范5-1:打开点工作区,装入点文件:AREA_HINST AHInst;short AiPnt;AHInst = _InitWorkArea(NULL);AiPnt =_OpenArea(AHInst,PNT);If(_LoadFile(AiPnt) > 0){…..//实体操作}//关闭工作区if(_IsOpenArea(AiPnt)) //如果工作区打开{_SetChangeFlag(AiPnt, 0); //如果工作区改变了,且不想保留更改的内容_CloseArea(AiPnt);_FreeWorkArea(AHInst);3 工作区函数1)AREA_HINST _InitWorkArea(HINSTANCE hInst);//初始化工作区实例2)int _FreeWorkArea(AREA_HINST ahInst);//释放工作区实例3)short _OpenArea(AREA_HINST,short ty pe);//打开某种类型的工作区4)int _CloseArea(short ai);//关闭指定的工作区5)short _LoadAFile(char * datName,short ai);//将某个文件装入指定的工作区,datName为文件名指针,必须带路径short _LoadFile(short ai);6)char _GetAreaTy pe(short ai); //取工作区文件类型7)short _IsAreaEmpty(short ai); //指定的工作区是否为空8)short _IsOpenArea(short ai); //指定的工作区是否已经打开9)short _GetAreaNumber(AREA_HINST ahInst); //获取打开的工作区数10)short _GetFirstAreaNo(AREA_HINST ahInst);//取属于ahInst实例的第一个工作区号。
11)short _GetNextAReaNo(AREA_HINST ahInst);//取属于ahInst实例的下一个工作区号。
12)short _SetPackFlag(short ai,short f lag);//设置数据压缩标志,f lag=0/1:不压/压缩13)short _SetChangeFlag(short ai,char chg);//设工作区改变标志14)short _Sav eFile(short ai,short v er=VERSION); //将工作区内容存入文件_Sav eAFile //将工作区内容存入指定文件注意:版本号v er只能取VERSION50或VERSION60。
C示范5-2:读取属于AREA_HINST实例的所有工作区(假设工作区已经打开)short i,ai,an;…an = _GetAreaNumber(AHInst);ai = _GetFirstAreaNo(AHInst);f or(i = 0; i < an; i++,ai = _GetNextAreaNo(AHInst))//使用工作区ai...}实体存取主要依据实体数据的唯一标识:实体号实体类型有(Lin,Pnt,Nod,Reg,Net,Path)1 取实体个数_Get...Num: 逻辑数,物理数如:short WINAPI _GetLinNum(short ai,long *logN,long *n);short WINAPI _GetRegNum(short ai,long *logN,long *n);short WINAPI _GetPntNum(short ai,long *logN,long *n);short WINAPI _GetNodNum(short ai,long *logN,long *n);short WINAPI _GetNetNum(short ai,long *logN,long *n);short WINAPI _GetPathNum(short ai,long *logN,long *n);这里lonN返回逻辑数,n返回物理数。
2 取实体空间数据,图形数据_Get...取得实体数据,图形数据信息。
如取线:short WINAPI _GetLin(short ai,long li,D_DOT **dat,long *len,LIN_INFO *inf,short *dim=NULL); dat和inf分别返回线数据和线信息。
3 实体操作1)取实体图形参数 _Get...Inf o2)更新实体图形参数 _Update....Inf o3)添加实体 _Append...4)删除实体 _Del...5)撤销删除实体 _UnDel...对空间实体,上述方法是相似的。
[注意]:函数返回值是short型,则1表示成功;0表示失败;-1表示该图元被删除;返回值是long型,则不同的函数含义有所不同,对于_Append...函数,>0表示实体号,否则表示失败。
C示范5-3:将ai号工作区中所有黑色线改为兰色long i,linN;long len;LIN_INFO linf;D_DOT *lxy;_GetLinNum(ai,&i,&linN); //取线实体数,i返回逻辑数,linN返回物理数f or(i = 1;i < linN; i++){if(_GetLin(ai,i,&lxy,&len,&linf) <= 0)continue;//处理线实体代码if(linf.lclr==1){linf.lclr=5;_UpdateLinInf o(ai,i,&linf);}}C示范5-4:取ai工作区中的所有点,并进行处理long i,pntN;short len;PNT_INFO inf;D_DOT xy;char *dat;_GetPntNum(ai,&i,&pntN); //取点数f or(i=1;i<pntN;i++){if(_GetPnt(ai,i,&xy,&dat,&len,&inf)<=0)continue;switch(inf.ty pe){case PNT_NOTE: … break; //处理字符串case PNT_SUB: … break; //处理子图case PNT_CIR: … break; //处理圆case PNT_ARC: … break; //处理弧case PNT_IMAGE: … break; //处理图象case PNT_TEXT: … break; //处理文本def ault: break;}…}C示范5-5:添加一个字符串类型的点,坐标为(500,500),内容为“中地公司”,颜色为红色,字高宽均为10, PNT_INFO inf;D_DOT xy;char dat[64];xy.x=500;xy.y=500;lstrcpy(dat,”中地公司”);memset(&inf,0,sizeof(PNT_INFO));inf.ty pe=PNT_NOTE;inf.inf o.ch.height=10;inf.inf o.ch.width=10;inf.iclr=6;_AppendPnt(ai,&xy,dat,lstrlen(dat),&inf);C示范5-6:添加一条折线,颜色为绿色,坐标点为(20,50),(100,200),(200,200);LIN_INFO inf;D_DOT xy[3];xy[0].x=20; xy[0].y=50;一、显示输出的基本概念1. 逻辑坐标、设备坐标、窗口坐标、屏幕坐标逻辑坐标:又称图形坐标或用户坐标,是用户处理自己的图形实际所采用的坐标系。