用VC实现GIS系统基本功能
C-GIS介绍
1 概述1.1 C─GIS 的发展简史及特点柜式气体绝缘金属封闭开关设备,国际上简称C-GIS或有称GIS,是一种用于10~35kV或更高电压输配电系统以接受或分配电能并能对电力系统正常运行和故障情况下实行控制、保护、测量、监视、通讯等功能的新型开关设备。
把GIS的SF6的绝缘技术、密封技术与空气绝缘的金属封闭开关设备制造技术有机地相结合,将各高压元件设置在箱形密封容器内,使之充入较低压力的绝缘气体,利用现代加工手段而制成的成套系列化产品称之为柜式气体绝缘金属封闭开关设备,简称C-GIS(Cubicle type Gas Insulated Switchgear),俗称的充气柜往往指的是C-GIS 与充气环网柜的统称。
在上世纪70 年代末、80 年代初日本首先开发了84kV C-GIS,当时采用厚钢板焊接的密封箱体。
随后,有更多的公司开发C-GIS产品,电压等级7.2~126kV;起初母线全部置于SF6气体中;有配真空断路器,也有配SF6断路器;上下隔离开关、接地开关、快速接地开关一一配齐,主接线与常规高压GIS基本一致;方箱形、圆筒形密封箱体均有;内置电流互感器、电压互感器、避雷器等元件。
那时的绝缘技术主要是应用低压力SF6气体绝缘,充气压力一般在0.2MPa(表压)以下。
现场安装需要进行抽真空、充气。
到了90年代中期,C-GIS在24~36kV电压等级上有了更快的发展,以配真空断路器为主,且以方箱形密封箱体占多数;在圆筒形密封箱体中也是以三相共筒为主;对部分元件已开始外置,如:电压互感器通过电缆连接到密封箱体外部;在一次主接线方面已开始简化,下隔离逐渐开始取消;充气压力一般在0.07MPa以下,密封箱体钢板厚度多在6mm及以下。
这时除了应用低压力SF6气体绝缘技术外,固体的界面绝缘技术已开始在高压元件的插接上进行运用。
到了2000年左右,中压C-GIS的发展有了一个飞跃,新的技术、结构、工艺、装备进入推广使用阶段,引入计算机技术、传感技术使产品进入智能化时代。
MAPGIS图形编辑、类库和控件开发
7.3.2 CGisView 类概述 CGisView 类继承了 Visual C++的 CView 类,它封装了与图形显示有关的操作,如放大
(Debug 版本) (Release 版本) (Debug 版本) (Release 版本)
CGisEditView 包含的内容 1) 基本函数;包括对当前编辑工作区的一系列操作,如设置当前编辑工作区,取得当 前编辑工作区、设置压缩存盘标志、扩展工具以及后悔类处理等; SetEditArea(short ai) GetEditArea(short aitype) ClearEditArea(short aitype) …… SetExtTool(BaseGisTool *extool)
1)_CreatEditWindow 2)_DeleteEditWindow 3)_CloseEditWindow 4)_edProcCommand 5)_edProcMouse 6)_edProcKey 7)_edProcPaint 8)_edProcSize 9)_edProcTimer
7.2.3 示例 见二次开发手册 271 面例子。
_GetAreaList(short **dspAi) 获得显示的工作区列表,不能对该列表进行写操作
_SetAreaList(short *dspAi) 用 dspAi 中的工作区替换当前显示工作区列表
_AppendArea(short ai)
添加一个工作区到显示列表
_DeleteArea(short ai)
MapGIS的基本功能及图形数据的输入与编辑
实验一、MapGIS的组成及基本功能一、MAPGIS 的主要功能1.数据输入在建立数据库时,我们需要将各种类型的空间数据转换为数字数据,数据输入是GIS的关键之一。
MAPGIS 提供的数据输入有数字化仪输入、扫描矢量化输入、GPS 输入和其它数据源的直接转换。
2.数据处理输入计算机后的数据及分析、统计等生成的数据在入库、输出的过程中常常要进行数据校正、编辑、图形整饰、误差消除、坐标变换等工作。
MAPGIS 通过图形编辑子系统及投影变换、误差校正等系统来完成,下面分别介绍之。
(1) 图形编辑该系统用来编辑修改矢量结构的点、线、区域的空间位置及其图形属性、增加或删除点、线、区域边界,并适时自动校正拓扑关系。
图形编辑子系统是对图形数据库中的图形进行编辑、修改、检索、造区等,从而使输入的图形更准确、更丰富、更漂亮。
(2) 投影变换地图投影的基本问题是如何将地球表面(椭球面或圆球面)表示在地图平面上。
这种表示方法有多种,而不同的投影方法实现不同图件的需要,因此在进行图形数据处理中很可能要从一个地图投影坐标系统转换到另一个投影坐标系统,该系统就是为实现这一功能服务的,本系统共提供了20 种不同投影间的相互转换及经纬网生成功能。
通过图框生成功能可自动生成不同比例尺的标准图框。
(3) 误差校正在图件数字化输入过程中,通常的输入法有:扫描矢量化、数字化仪跟踪数字化、标准数据输入法等。
通常由于图纸变形等因素,使输入后的图形与实际图形在位置上出现偏差,个别图元经编辑、修改后可满足精度要求,但有些图元由于发生偏移,经编辑很难达到实际要求的精度,说明图形经扫描输入或数字化输入后,存在着变形或畸变。
出现变形的图形,必须经过数据校正,消除输入图形的变形,才能使之满足实际要求,该系统就是为这一目的服务的。
通过该系统即可实现图形的校正,达到实际需求。
(4) 镶嵌配准图象镶嵌配准系统是一个32 位专业图象处理软件,本系统以MSI 图象为处理对象。
(完整版)基于VC++的电子导航系统_毕业设计
基于VC++的电子导航系统摘要地理信息系统(GIS)自二十世纪六十年代开始发展至今,已经逐渐成为一门成熟的技术,其在交通、旅游、环境等诸多领域的应用使地理信息系统被越来越多的用户所接受,成为人们工作、生活中一个强有力的工具。
本设计以VC++为开发平台,以MapX控件为图形平台,以MSComm 控件为通信平台,设计具有电子导航的基本功能(如地图的放大缩小、全图、漫游等)、自定义工具测量折线距离、图层控制、最优路径分析、GPS 导航等功能的GIS应用软件。
本文介绍了电子导航系统设计的背景及设计中需要用到的MapX控件、VC++、MSComm控件,分析了GIS开发三种实现方式,提出系统设计方案:集成二次开发。
在集成二次开发的基础上,首先实现了地图的导入、地图放大缩小及图层控制等电子导航的基本功能,其次以测量折线距离为例实现了自定义工具的功能,再次介绍了最优路径分析,最后实现GPS导航功能。
关键词:电子导航;GIS开发;VC++;MapX控件;最优路径Electronic Navigation Systems Based On VC++AbstractSince the beginning of 1960s,Geographic Information System (GIS) transportation, tourism, environment and many other fields of application GIS accepted by an increasing number of users for the people working and living as a powerful tool.The design used VC + + as a development platform, MapX control as a graphics platform, MSComm control as a communications platform.It Basic functions(zoom control,the whole map,Roaming, for example), Calculating the distance, Layer Control, Analysis of the optimal path and GPS Navigation Features.This article of electronic navigation systems background, MapX control,VC++ and MSComm control. It three ways and proposed system design:Secondary development of integrated. First of all, It the integrated development of the basis of secondary. Second, it example to measure the distance, and then it .Key words: Electronic navigation; GIS Development;VC++; MapX control; Optimal path目录摘要.......................................................................................................................................... Abstract.. (I)第一章引言............................................................................................................................1.1设计背景 ....................................................................................................................1.2系统设计方案 .......................................................................... 错误!未定义书签。
基于VisualNet平台的资源管理系统实施方案
基于VisualNet平台的资源管理系统实施方案建议书一、常见的信息管理系统的现状目前市面上常见的地理信息管理系统有两类,一类是基于原始的基础地理数据,用各种代码编写工具,如VC、VB、JAVA+GIS数据进行开发的系统。
一类是基于成熟的开放性平台,只需进行系统配置就能完成实施的系统,如VisualNet开发平台。
1、开发实施现状:在采用第一类常规方式去实施一个项目的过程中,我们经常会听到开发商说:●“更新这个功能可以,但是需要另外支付费用。
”●“更新这个功能需要的时间比较长,我们无法很快满足你的要求。
”●“我们的开发工具变了、应用环境变了,原来的程序必须重新开发。
”●“可以更新程序,但是原来的数据可能需要迁移或重新录入,需要时间和费用。
”●“这套系统只能用在这里,没法实现其它管理或应用。
”等等这些状况一再表明:常规应用系统的开发设计理念和过程是有重大缺陷的。
一方面这种开发方式让我们最终用户始终处于一个弱势地位,因为用户每次的需求更新都必须求助于开发商。
另外一方面,一旦一个系统开始实施,用户的需求肯定会和开发商的理解有出入,也肯定会随着工作的展开,要求功能不断完善,这自然就需要开发商去不断地更改程序。
而作为开发商,如果用户提出的更改要求、更新难度以及成本控制在他们还能承受的范围之内,那么双方的“供求”关系还能保持一定的平衡。
但是一旦双方的“供”与“求”的差距太大,最终就往往会造成系统实施久拖不决、双方关系紧张甚至破裂。
极端情况下,用户的系统还没实施完成,他们连人影都不见了。
因此,在整个软件开发行业中,双方都迫切需要一种新的机制来解决这个问题。
即:用户的需求设计、应用目标、管理对象、管理范围、结构变更、更新周期都能由用户自己来决定,而不是取决于开发商所开发的应用软件,更不是开发商本身。
2、常规GIS系统的优缺点:这类系统的特点是,管理地理数据的经度维度比较精确,但是投资成本高昂,用户把大量的投资都沉淀在了地图数据上,后续更新费用也昂贵,需要不断地投入更新。
基于Visual C++和MapX的甘蔗地理信息系统的开发
基于Visual C++和MapX的甘蔗地理信息系统的开发彭秋连;杨华;冯璐;邓军【摘要】In recent years, GIS (geographic information system) component technologies have become the tendency of GIS development. The sugarcane GIS was developed by applying MapX control with Visual C++, and basic methods of programming with Visual C++ and MapX were introduced in the paper, and foundation for further development of GIS application software by using MapX control was discussed.%在Visual C++环境下利用MapX控件开发了甘蔗地理信息系统(GIS),着重介绍了利用Visual C++与MapX控件进行混合编程的基本方法,为进一步利用MapX控件开发GIS 应用软件奠定基础。
【期刊名称】《中国糖料》【年(卷),期】2014(000)004【总页数】4页(P39-41,44)【关键词】甘蔗地理信息系统;MapX;Visual C++【作者】彭秋连;杨华;冯璐;邓军【作者单位】云南省农业科学院甘蔗研究所,开远661699;云南省农业科学院甘蔗研究所,开远661699;云南省农业科学院甘蔗研究所,开远661699;云南省农业科学院甘蔗研究所,开远661699【正文语种】中文【中图分类】S566.1近年来,随着计算机技术和地理信息的迅猛发展,图像技术、计算机绘图和数据库也逐渐结合起来并创建了地理信息系统(Geographic Information System,简称GIS)[1]。
ArcGIS Engine9.2 + C#实例开发详细教程
第一讲桌面GIS应用程序框架的建立本讲主要是使用MapControl、PageLayoutControl、ToolbarControl、TOCControl四个控件建立起基本的桌面GIS应用程序框架。
最终成果预览如下:1、新建项目启动VS2005,选择“文件|新建|项目”,在项目类型中选择Visual C#,再选择Windows应用程序模板,输入名称“3sdnMap”,点击确定。
在解决方案管理器中将“Form1.cs”重命名为“3sdnMap.cs”,在设计视图中,选中窗体,将其属性中的“Text”改为“3sdnMap”。
2、添加控件选择工具箱中的“菜单和工具栏|MenuStrip”,将其拖入窗体。
选择工具箱中的“ArcGIS Windows Forms”节,将“ToolbarControl”控件拖入窗体,并将其属性中的Dock设置为Top。
选择工具箱中的“菜单和工具栏|StatusStrip”,将其拖入到窗体。
选择工具箱中的“容器|SplitContainer”容器拖入窗体,并将其属性中的Dock设置为Fill。
将TabControl控件拖入Panel1,将Alignment属性设置为Bottom,Dock属性设置为Fill。
点击TabPages属性右边的按钮,弹出TabPage 集合编辑器,将tabPage1的Name设置为tabPageLayer,Text设置为图层,将tabPage2的Name设置为tabPageProperty,Text设置为属性。
如下所示。
选择“图层”选项卡,拖入TOCControl控件,设置Dock属性为Fill。
选择“属性”选项卡,拖入DataGridView控件,设置Dock属性为Fill。
拖入TabControl控件到Panel2,设置Dock属性为Fill。
并上述类似的方法,将两个选项卡的Name和Text分别设置为:(tabPageMap、地图),(tabPageLayout,制版)。
数字三维景观信息展示系统(适合本科毕业论文的发表)
技术创新中文核心期刊《微计算机信息》(测控自动化)2007年第23卷第2-1期360元/年邮局订阅号:82-946《现场总线技术应用200例》GPSGIS数字三维景观信息展示系统Digital3-DLandscapeSystem(1.中国测绘科学研究院;2.东华理工学院)王永平1李英成1肖金城1苏小霞2WANGYONGPINGLIYINGCHENGXIAOJINCHENGSUXIAO-XIA摘要:本文详细介绍了我们用VC研制开发的数字河北三维景观展示系统技术流程。
该系统具有场景三维漫游控制、航线设计、信息查询与分析、分层注记显示、三维坐标查询、实时定位等功能。
具有使用方便、直观等特点。
关键词:数字城市;三维景观;多级分辨率卫星影像数据中图分类号:TP393文献标识码BAbstract:Thispaperhaspresentedthetechnologicalprocedureofthethe3-DdigitalviewofHebeiprovinceindetail,whichisde-velopedbyVC.Thesystemhavefunctionofthree-dimensionroamscenecontrol,flightdesign,informationinquiryandanalyze,annotationanddisplaybydividelayer,three-dimensionalcoordinateinquire,positionfunctioninrealtime.Thesystemhavecharac-teristicsofeasytouseandocular.KeyWorlds:DigitalCity,3-DLandscape,SateliteImageDataofMulti-levelresolution.文章编号:1008-0570(2007)02-1-0220-031前言数字地球的概念是1998年由美国前副总统戈尔提出的。
《用Visual C++开发GIS系统》第1章 VC++开发GIS的思路
上的各种重点工程等,而系统的主要功能则是实现铁路 建设中的管理功能,如施工组织计划的制定、施工组 织进度图的辅助制定和绘制、重点工程工期的管理、 施工质量、施工进度、工程投资的管理等等,整个系 统应该属于MIS的范畴,但结合了GIS技术后,使MIS 的操作功能具有了很大的改进,在实用性、直观性等 方面达到了新的高度。再比如,作者开发的“铁路建 设前期决策系统”,通过实现铁路GIS,在以铁路网 为主的全国平面图中记录了路网信息、路网中的各种 属性信息(如通过能力、地形条件等)、各经济据点 的信息、粗略的数模信息等,而系统最终的设计功能, 并不是为了单纯完成对信息的管理、查询以及对路网 平面图的管理等功能,而是以此为基础,通过对路网 通路的评价(如最短路径选择,路网性能的分析和评 价,路网中流量的分析等),得到路网的薄弱环节,
网络分析等功能,实现了一个基本GIS。 本书是在作者2000年出版的《C++开发GIS系 统——开发实例剖析》一书的基础上,总结 近几年实际开发的经验和技术,进行修订 并补充了很多新的内容而写成的。本书既 保持了集开发思路、系统构筑、编程技术、 实现代码于一体的特点,又在具体内容上 进行了更新,融合了许多新的技术,更加 强调了实用性。 本书适用于GIS、CAD、MIS等领域的软件开发 人员,以及大专院校的师生。本书的代码 适用于VC++5.0,VC++6.0及其新版本。
这些支撑平台。对于GIS开发者来说,没有自己的产品, 没有自身的系统版权,还要受到软件升级各种因素的 制约。
1.1.5 VC++开发GIS的优缺点及应用前景
本小节将介绍应用VC++从底层开发GIS的优缺点和应用 前景。实际上,目前比较流行的一些GIS专业开发工 具很多都是用C++开发完成的。在短时间内,我们用 有限的开发力量和资金,很难开发出像专业GIS开发 工具那样的软件系统,但是应用VC++开发以信息管理、 决策服务及设计为主的实用GIS系统时,具有良好的 应用前景。在1.1.2小节,我们讨论过,在很多情况下, 建立GIS的目的,不是为了能够管理图纸、海量的坐 标数据及属性数据,而只是利用GIS技术来完善MIS、 CAD、DSS等系统的功能,在这种对空间坐标数据的管 理要求并非很高的情况下,应用VC++可以迅速开发出 满足要求的实用GIS系统,并在灵活性、可操作性等
Mapgis二次开发(入门)
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的开发就是采用的此对齐方式。
VC++在GIS系统开发中的应用
科技资讯科技资讯S I N &T NOLOGY I NFORM TI ON 2008N O .12SC I ENCE &TEC HN OLO GY I NFO RM ATI O N I T 技术1概述一个最基本的GI S 系统,通常包括以下组成部分:管理坐标数据的图形系统、管理性质数据的性质数据系统、图形系统与性质数据系统的连接系统。
一般而言,一个G I S 成图系统需要具备下面几个主要功能:测量数据的导入和修改、图形的绘制和修改、旧图纸的扫描和矢量化、图形及属性信息的存储和输出、图形格式转换、一般属性信息分析以及与典型测量设备的通信和控制等。
Vi s ua l C++简称VC,是微软公司推出的一个面向对象的、功能丰富的可视化重量级的开发工具.在目前流行的Vi s u a l C++,V i sua l B a si c ,Del phi 等众多开发工具中,其功能最为强大。
2具体思路及实现2.1底层开发模式2.1.1思路可行性分析在GI S 中,涉及大量的空间统计与分析计算工作,如统计一个灰白多边形区域、圆形区域的某种对象的数量、分布情况,计算一条高速公路(可理解为连续直线)与其它地市、行政区(可理解为圆形区域或多边形区域)是何关系(如相交、相邻及相交方式等),所有这些功能的核心是各种矢量图形间的拓扑结构关系,即它们间的相互位置关系,将上述各种实体进行一般层次上的空间抽象,则可归纳为以下几种矢量图形间的相对位置关系。
第一类:点与一般图形的位置关系。
(1)点与点的位置关系;(2)点与直线的位置关系;(3)点与圆、圆弧的位置关系;(4)点与多边形区域的位置关系;第二类:直线与多边形区域的位置关系。
(1)直线与直线的位置关系;(2)直线与多边形区域的相交关系;(3)连续直线与多边形区域的相交关系。
第三类:圆弧与多边形区域的位置关系。
(1)直线与圆的位置关系;(2)直线与圆弧的位置关系;(3)连续直线与圆弧的位置关系;(4)圆弧与多边形区域的位置关系。
《用Visual-C开发GIS系统》第2章-MFC应用程序设计的开发工具PPT课件
.ቤተ መጻሕፍቲ ባይዱ
9
视化管理的工具。利用它调用AppStudio可以对 程序所拥有的各种资源(菜单、工具条、对话 框、加速键、热键等)进行可视化管理。
FileView(文件视图)是管理一个开发项目所包含 的所有文件的工具。通过它可以用来管理一个 开发项目所包含的源文件。
.
20
.
21
.
22
.
23
.
24
⑦ 在图2-7所示的MFC AppWizard-Step 5 of 6对话框中, 用户需要对是否在生成的程序源代码中加入注释进 行选择。在本例中,选择“Yes, please”(加入注释) 选项。另外有一个选项是选择在产生的应用程序中 如何应用MFC,有两种选择:“As a shared DLL”(作 为共享动态链接库)和“As a statically linked library”(作为静态链接库)。选择“As a shared DLL” 选项,单击Next按钮,就会进入图2-8所示的MFC AppWizard-Step 6 of 6对话框。
.
16
2.1.2 利用MFC AppWizard产生MFC应用程序的步骤
在这一节中,应用MFC AppWizard生成一个叫做Draw的应 用程序。以下是利用AppWizard产生MFC应用程序框架 的步骤:
首先,进入VC++的工作区,运行工作区上的“File”菜单 下的“New”命令,打开New对话框,然后进行如下步 骤的操作:
.
13
图2 AppWizard创建.框架程序对话框
14
表2-1 AppWizard创建的应用程序类型
GIS系统调试手册.
VCarServer 0.1参考1.规范服务器接受ASCII编码的指令,如果某指令返回为一字符串,则以+ok表示执行成功,-fail便是执行失败。
指令返回的字符串结果,以<CR><LF>结尾,并且返回字符串后不会关闭Socket连接;但是以二进制数据流为返回的指令,在数据传送完成时,关闭Socket链接。
服务器指令区分大小写,小写有效。
对于无效指令服务器不作出任何响应。
有效指令,将返回字符串或者二进制数据流。
每条指令应当以<CR><LF>结尾。
对于多条指令,服务器将按照其先后顺序,依次执行,并且逐条返回。
如果指令存在异常,服务器将关闭Socket连接。
这种情况下的关闭,可能导致用户配置文件的错误,即,用户下次无法登陆系统,遇到此情况与管理员联系。
用户的状态是持久化的,无论是否正常退出,每次登录时,将自动恢复上次操作状态。
用户所执行过的指令将被日志系统记录。
2.用户说明一个独立的登录名与密码对应一个用户帐户,帐户由管理员分发。
每个账户同一时间不建议具有多个登录。
多个登录将视为并行操作,由此可能引发用户帐户锁定或者数据传输的错误。
用户可以修改密码,但是密码应当由可见字符构成,不允许含有空格,引号等字符。
3.系统登录用户,可以通过自行利用Socket连接到本系统(202.120.39.120,8888端口)。
程序设计时可以利用SocketTest或者Telnet设计。
当新Socket连接成功,系统将返回4行信息(以<CR><LF>结尾,下同)。
+++++++++++++++++++++++++++++++| Welcome to VCarServer v 0.1 || Send 'Quit' to exit |+++++++++++++++++++++++++++++++User ID :用户需要留意系统版本号。
利用Socket Send用户名值服务器后,将提示输入密码Password :输入Send密码(明文)。
gis软件开发课程设计
gis软件开发课程设计一、课程目标知识目标:1. 让学生理解GIS软件的基本原理,掌握GIS软件开发的核心技术;2. 使学生掌握GIS软件的操作方法,能独立进行地图制作、空间分析和地理信息可视化;3. 帮助学生了解我国GIS软件发展的现状和趋势,拓宽知识视野。
技能目标:1. 培养学生运用GIS软件解决实际地理问题的能力;2. 培养学生独立进行GIS软件操作和简单二次开发的能力;3. 提高学生团队协作、沟通表达和问题解决的能力。
情感态度价值观目标:1. 培养学生对地理信息科学和GIS技术的兴趣,激发学习热情;2. 培养学生严谨的科学态度,注重实践操作和问题分析;3. 增强学生的国家意识,认识到GIS技术在国家发展和国防建设中的重要作用。
课程性质:本课程为实践性较强的专业课程,以培养学生的实际操作能力和技术应用能力为主要目标。
学生特点:高中生具备一定的地理知识和计算机操作能力,对新鲜事物充满好奇,具备较强的学习意愿。
教学要求:结合课本知识,注重理论与实践相结合,充分调动学生的主观能动性,提高学生的实际操作能力和创新能力。
在教学过程中,将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. GIS基本概念与原理:介绍地理信息系统的定义、功能、发展历程,以及GIS的基本组成和原理,对应课本第一章内容。
2. GIS软件操作与使用:讲解主流GIS软件(如ArcGIS、SuperMap等)的基本操作、地图制作、空间分析等功能,对应课本第二章内容。
3. GIS二次开发技术:学习GIS软件的二次开发方法,包括WebGIS开发、桌面应用开发等,对应课本第三章内容。
4. 实际案例分析:分析我国GIS软件在地理信息产业、城市规划、环境保护等领域的应用案例,对应课本第四章内容。
5. 实践操作与项目实践:安排实践操作环节,让学生动手操作GIS软件,完成地图制作、空间分析等任务。
同时,组织项目实践,培养学生团队协作和问题解决能力。
关于VisualC++开发GIS系统——开发实例剖析
关于VisualC++开发GIS系统——开发实例剖析xxxxxxxxxxx摘要:本文全面介绍和分析了MFC程序的框架结构和各种MFC辅助工具的使用方法,实例剖析了MFC中与图形和数据库应用程序设计有关的类。
介绍了GIS系统开发的方法和思路,结合具体代码开发实现了矢量图形系统、数据库管理系统、矢量系统和数据库管理系统之间的链接、信息查询功能、空间信息设计和分析功能等,实现了一个基本GIS系统。
关键词:MFC程序框架矢量图形系统数据库管理系统近几年来,GIS技术在全球得到了迅猛的发展,已经成为了IT的重要组成部分,用于开发GIS系统的专业开发工具得到了飞速发展。
本文以开发一个基本GIS系统为主线,介绍面向程序设计的精髓,全面分析MFC程序框架的组成和结构,呈现GIS系统的开发思路和开发方法。
(一)、用MFC AppWizard产生的应用程序Draw的基础上,去具体组织一个基本矢量图形系统的开发,讲解与矢量图形系统设计有关的类及其主要操作,从矢量图形系统的类组织、文档管理、视图组织、图形绘制、图形操作、图形选中、图形删除、文档你操作、图形保存等各个方面,实例开发一个用于GIS系统的基本矢量图形系统。
用MFC AppWizard产生了一个应用程序Draw,我们将在这个应用程序基础上来组织矢量图形系统的开发工作。
把这些图形元素中共性的东西组织存放在一个图形元素基类中,直线类、连续直线类、圆类、圆弧类、标注文本类由这个类派生,具体代码如下:class CCircle :public CDraw,class CArc:public CCircle,class CLine:public CDraw,class CPline:public CDraw,class CText:public CDraw。
组织实现了一个基本矢量图形系统的图形元素类后,将使用这些类,利用MFC应用程序的文档管理体系组织文档,实现基本矢量图形的文档管理功能。
CGIS手册
第一章系统简介CGIS是一个面向对象的专业化GIS系统,其特点如下:1. 简单直观、易学。
◆具备图形学基础者可在二十分钟内初步掌握系统的使用,两天内熟练掌握。
◆具备Windows基本操作经验者,可在两天内基本掌握,一周内熟练使用。
2. 面向对象的图形系统,精心的设计。
方便使用、方便用户的编辑和修改。
对图形对象可以用鼠标选定后,直接操作结点或双击后以活页夹方式来修改图形的属性和形态。
3. 成图自动化◆图形组合法、最小厚度法可直接生成高质量的柱状类图形。
◆分层平移法,可处理剖面中的任意的断层组合。
◆预定义边界凸包插入算法,可处理平面等直线过断层的问题,可以解决平面断层的任意组合。
4. 专业化的设计专业人员的专业化设计使系统尤其适合于地质、测量、采矿、水文和储量的日常设计制图和计算。
5. 任意的比例尺特设的图素比例尺和多种比例尺标准化点库、线库和图案符号库,使图形可以完全自动地从一种比例尺,平滑地转换为另一种比例尺,同时可根据需要保持局部图片的局部(插图)、不同图类(平面、剖面、柱状)组合图形的相关或独立。
6. 支持图形的局部窗口文件另存;图形文件的插入和图形文件的参考◆窗口另存可使我们从一幅大图中取出一个矩形的局部区域图形,(如从一幅矿图中取出一个局部作为采区图件的底图);图形嵌入可解决如图签、图例这样的可共用的图形文件插入问题,以及图幅的合并和拼接问题;图形参考可解决图形内容共用时的统一性问题,如:有十幅图参考了某一个图形文件,则当图形被修改和保存后,这十幅图可以自动改变,从而维护了不同图形文件中相关内容的一致性。
◆图形的嵌入和参考类似于复合文档中的文件的嵌入和连接。
7. 撤消和恢复功能,使用户可轻松操作,选择操作中的哪一步作为结果保存下来。
8. 动态、自由放缩技术。
9. 结点参数直接鼠标修改技术;支持Windows粘贴技术。
第二章系统安装和一般性操作2.1 系统组成系统组成文件如下:CGIS.Exe ____Windows 32位可执行文件。
C#开发MapInfo教程1
C#开发GIS应用简明教程2009-11-15 来自:CSDN Blog 字体大小:【大中小】∙摘要:这篇是C#开发GIS应用简明教程,从工具开始将其,包括设计窗体、创建永久图层等等。
希望本文能对大家有所帮助。
∙C#开发GIS,这里将介绍MapX为开发人员提供一系列的工具,包括C#对MAPX图元的编程技术。
这些工具的使用,可以通过MapX的帮助文档中查到。
1.工具(ToolConstants)MapX为开发人员提供一系列的工具,这些工具的作用各有不同,我们通过开发一个应用程序来了解这些工具的作用,至于这些工具的具体说明,可以在MapX的帮助文档中,通过查找"Available Standard Tools" 看到相应的解释.一些MapX的相关资料也有介绍.在.NET编程环境中新建一个C#的WindeosApplication(Windows应用程序)项目,然后在菜单中选择”项目/添加引用”,打开如下图的窗口,在窗口中选择COM标签,在组件名称列表中双击MapInfo MapX V5.单击"确认"按钮,将Map5控件加入到.Net的工具箱中.接着,将MapInfo MapX V5 控件画到窗体上,再在窗体上画一个ComboBox控件comboBo x1.如下图:双击设计窗体,编写Form1_Load代码如下:1.private void Form1_Load(object sender, System.EventArgs e)2.{3.ArrayList ToolsList=new ArrayList();4.ToolsList.Add(MapXLib.ToolConstants.miArrowTool);5.ToolsList.Add(MapXLib.ToolConstants.miCenterTool);6.ToolsList.Add(abelTool);7.ToolsList.Add(MapXLib.ToolConstants.miPanTool);8.ToolsList.Add(MapXLib.ToolConstants.miPolygonSelectTool);9.ToolsList.Add(MapXLib.ToolConstants.miRadiusSelectTool);10.ToolsList.Add(MapXLib.ToolConstants.miSymbolTool);11.ToolsList.Add(MapXLib.ToolConstants.miTextTool);12.ToolsList.Add(MapXLib.ToolConstants.miZoomInTool);13.ToolsList.Add(MapXLib.ToolConstants.miZoomOutTool);boBox1.DataSource=ToolsList;15.}以上代码通过一个数组ToolsList,将MapXLib的工具加入到comboBox1中.MapX还有一些其它的工具,它们的作用是往地图上加上点,线,多边型和圆.因为这些工具要求有操作图层,一并在介绍图层的时候介绍.关于ArrayList的用法,请参考C#的有关资料.接着,双击comboBox1,并编写代码如下1.private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e)2.{3.axMap1.CurrentTool=(MapXLib.ToolConstants)comboBox1.SelectedItem;4.}应注意,在C#中必须要显式地把comboBox1的选择项目SelectedItem(数据类型为obje ct)转换为MapXLib.ToolConstants.因为ToolConstants是MapX自己定义的一个枚举数据类型,C#不能自动完成这种枚举成员变量到object的数据转换.编译执行程序,从comboBox1中选择不同的工具,在地图上进行操作,你可以了解到MapX 工具集的强大功能.实际上,MapX提供的工具集就好像Photoshop,AutoCAD的工具栏一样,为你提供了一些控制地图的工具.但是,在开发GIS的时候,这些工具是不能完全满足要求的.所以,还应该学会自定义工具.下面,通过一个在地图上测距的例子,来介绍一下如何在C#下自定义MapX工具如前所述建立一个C#的Windows应用程序并将Mapinfo MapX V5 控件加到窗体上.并加入一个Button控件button1.将button1的Text属性改为"测距",再在窗口中放上两个Lab el控件label1,label2,将它们的Text属性设置为""空字符串,如下图:双击设计窗体,编写Form1_Load代码如下:1.private void Form1_Load(object sender, System.EventArgs e)2.{3.axMap1.CreateCustomTool(100,MapXLib.ToolTypeConstants.miToolTypePoly,4.MapXLib.CursorConstants.miCrossCursor,null,null,null);5.}在加载窗口的时候,我们定义了一个工具.它的编号是100(不要和MapX本身的工具编号重复),它的类型是一个多义线,采用十字光标.关于此函数的用法,建议查看MapX的开发手册和相关资料.现在我们定义了一个编号为100的工具,可以在程序中使用它了.双击设计窗体中的but ton1,编写它的Click事件处理代码如下:1.private void button1_Click(object sender, System.EventArgs e)2.{3.axMap1.CurrentTool=(MapXLib.ToolConstants)100;4.}现在编译运行,单击button1,就可以在地图上使用这个工具了.但是还有一部分重要的代码没有完成:测距!完成测距功能的代码在C#使用MapX开发GIS中非常具有代表性,也比较有难度.我在首次使用C#+MapX开发GIS的时候,被这个问题困扰了很久.项目经理也来研究,过两天说有结果了,但他给出的例子根本就行不通.当然,会了就不难了.其实,也很简单.首先,在窗口类中声明两个私有全局变量以保存测出的距离和总距,注意声明代码的位置:1.public class Form1 : System.Windows.Forms.Form2.{3.private AxMapXLib.AxMap axMap1;4.private System.Windows.Forms.Button button1;5.private bel label1;6.private bel label2;7.///8./// 必需的设计器变量。
基于C#的GIS校园电子地图实现
基于C#的GIS校园电子地图实现1.简介地理信息系统(Geographic Information System, GIS)是融计算机图形和数据于一体,存储和处理空间信息的高新技术。
它是以地理空间数据库为基础,在计算机硬、软件环境的支持下,对空间相关数据进行采集、管理、操作、分析、模拟和显示,并采用地理模型分析方法,适时提供多种空间和动态的地理信息,为地理研究、综合评价、管理、定量分析和决策服务而建立起来的一类计算机应用系统。
校园电子地图是利用GIS技术实现对校园地物位置的实时显示,具有漫游,鹰眼,缩放,定位,量算,查询等功能。
本系统以中北大学校园地图信息为基础,在.NET环境下通过C#语言对MapX控件进行二次开发来实现的。
MapX是MapInfo公司的地图化的ActiveX,在利用面向对象程序设计语言的开发应用中嵌入MapX,可以非常简便的使其应用程序具有强大的地图控制功能。
在应用程序设计前期还用到了MapInfo Professional软件。
MapInfo Professional是目前世界上比较完备、功能强大、全面直观的桌面地理信息系统,是一套强大的基于Windows平台的地图化信息解决方案。
MapInfo Professional主要提供地图绘制、编辑、地理分析、网格影像等功能。
2.系统设计本系统设计可分为两个部分,第一部分为地图数据的设计和.GST地图文件的生成,第二部分为具体代码的设计。
这样设计有以下目的:1)当出现校园规划地图变更时,只需变更地图数据并重新生成.GST文件,然后覆盖应用程序下maps文件夹下的地图文件即可。
2)当地图软件功能变更时,需要开发人员进行相关功能的完善与增删。
采用这种设计可以使程序的代码量大大降低,便于维护,提高了程序运行性能。
2.1系统功能与目标本系统设计目标是提供校园各地物的具体位置及相关地物信息阅览,为新生以及其他第一次到访者提供便利的图文信息查询。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用VC实现GIS系统基本功能文档说明:此文档适合VC++的初学者,高手也可参考(希望能提出宝贵意见)。
开发前准备:前提:必须在你的电脑上安装了MapX控件,并且准备好需要用到的电子地图(Mapinfo格式的)VC++嵌入MapX进行二次开发可分为以下几个步骤来实现:1 对应用工程的预设置在创建MapX控件之前,必须将MapX.h和MapX.cpp文件加入到工程中。
对于Visual C++5.0及以上版本,从Project菜单中选择Add To Project -> Files命令,打开InsertFiles into Project对话框,选择MapX.cpp和MapX.h 文件加入到工程中(在MapX自带的C++例子中有这两个文件)。
注意:不要选择Project菜单中的Add TO Project->Components And Controls命令。
如果选择该命令加入MapX 控件,将创建一新的.cpp文件,但是该文本没有包括所有的MapX对象。
2 对MapX属性的操作对于C++程序来说,每个MapX对象(Objects)都在MapX.h 和MapX.cpp中用一个类来实现,类的名字和MapX对象的名字相同,且已经在CmapX中定义了。
例如,DataSet对象用类CmapXDataset实现。
这和C++类的定义相一致。
而每个MapX对象的属性(Properties)是用类的成员函数来实现的。
比如DataSet对象的名字(Name),就是用Name()函数来实现的,不过,Name ()有两种使用方法,即Get和Set。
如:CString GetName();//获取对象名字void SetName(LPCTSTR);//设置对象名字3 部分MapX工具的应用(1)“全图”工具的改进一般全图工具的代码为:m_ctrlMapX.SetZoom(m_ctrlMapX.GetGeoSetWidth());此方法的缺点是重新显示全图后,实际上是以上一个视图的中心作为屏幕中心进行显示,如果上一个视图在全图中的边缘位置,点击全图工具后实际上不是初始设置的全图。
因此可以用如下代码实现:CString mapname=m_ctrlMapX.GetGeoSet();//取得当前地图的名字m_ctrlMapX.SetGeoSet(mapname);//设置该地图为主视区显示图(2)创建“信息”工具MapX没有提供信息工具,该工具是自定制工具。
有两种实现方法,其基本思想是:(1)创建工具的鼠标指针类型(一般为“+”),当在工具栏上选择此工具后,设置为当前工具,然后跟踪鼠标在地图上点击的位置,触发ToolUsed事件,根据位置信息确定相应的对象,然后读取对象属性或绑定的数据库,弹出对话框,实现信息显示。
此种方法只适用于显示地图的最上层对象(在MapX自带的C++例子“Buffer”中有具体实现代码)。
(2)用选择工具选中地图上所要显示信息的对象,然后再点击工具栏上的信息工具,弹出对话框,实现信息显示。
此信息工具的实现代码与(1)不同,没有鼠标指针,实际上就是读取选中对象的属性或绑定的数据库的操作。
此方法适合显示地图上的任意图层。
两种方法各有特点,第一种方法直接,但在实际应用中容易出现异常,第二种方法要多点击一次,但应用稳定,而且适用地图上的任意图层。
(3)“测距”工具的使用注意事项MapX的Distance()函数是针对地球地图的,在非地球地图中使用要注意数值转换。
否则测出的数据与实际相差甚远。
4 用MapX进行GIS二次开发(1)创建数据库空间数据库可以通过两种方法创建,一种是通过MapX的图层生成功能创建。
MapX生成的每一图层都对应一张表(table),该表中除了存有地理对象的位置坐标以外,还可以包含其他属性字段;另一种方法是通过导入带有地理位置信息的其他数据库生成。
MapX可以通过数据绑定把这些数据库中的地理信息映射到地图图层上,MapX支持对多种常用数据库的访问。
(2)设置图层控制和地图投影在把地图加入到MapX之前,我们可以使用MapX附带的图层管理工具Geoset Manager把要加入的图层匹配在一起,建成一个图层组,该图层组规定了其中各个图层的名称、内容、属性及各图层之间的显示顺序。
MapX 中可以给图层设置四种属性:可显示、可选择、可编辑和自动标注。
一般图层的属性是可显示的,需要查询的图层设置为可选择,需要修改的图层设置为可编辑,而自动标注可以自动显示图层中地理对象的标签。
合理地设置这些属性将有助于系统实现地理信息的维护和查询功能。
在匹配各个图层时,应该注意各个图层投影的设置。
全部图层必须使用一致的投影方法才能精确匹配。
MapX中的地图分为地球地图和非地球地图,地球地图中对象的坐标用经纬度来表示,非地球地图中对象的坐标通常是相对坐标,是相对于图中的某个基准点来设置的。
如果图层的坐标不一致的话,必须先转换坐标才能进行匹配。
(3)设计编辑功能MapX提供标准的地理对象类型定义,在MapX所提供的点、线、面类型选择对话框中可以方便地选择地理对象的类型,包括所使用的符号的形状、颜色、大小等属性。
利用MapX提供的画图工具,可以为用户设计出多种多样的地理对象生成工具。
利用MapX提供的多种地理信息对象的选择工具(如矩形、圆形选择工具),用户可以调用这些选择工具并和MapX所提供的编辑(删除、修改等)地理对象功能相结合,以完成地理信息系统中地理对象的编辑操作。
但要注意,对于地理数据和非地理数据要分别对待。
(4)设计查询功能和分析统计功能对于地理信息系统中所要求的有关地理信息查询功能和分析统计功能,MapX提供了一定的查询和分析手段,如MapX可以根据图层表中的字段值查询相对应的地理对象;可以提供对应于图层表中某个或某几个字段的分析饼图等。
对于非地理信息,就要依据系统的具体要求用面向对象的语言设计查询和分析统计功能。
开发过程:1.前期学习,因为是利用别人的空间进行二次开发,所以必须先熟悉别人提供的函数接口一起定义的数据结构(类)。
2.主要实现的功能:地图的显示,放大,缩小,移动,显示某一点的信息等。
很多功能只需要用一个函数就可以解决了。
3.具体实现:定义一个CMapX的全局或成员变量,m_ctrlMapX(1)放大:m_ctrlMapX.SetCurrentTool(miZoomInTool);(2)缩小:m_ctrlMapX.SetCurrentTool(miZoomOutTool);(3)漫游:m_ctrlMapX.SetCurrentTool(miPanTool);(4)各种类型的选择工具设置:m_ctrlMapX.SetCurrentTool(miSelectTool);m_ctrlMapX.SetCurrentTool(miRectSelectTool);m_ctrlMapX.SetCurrentTool(miRadiusSelectTool);m_ctrlMapX.SetCurrentTool(miPolygonSelectTool);(5)设置用户自定义工具:m_ctrlMapX.SetCurrentTool(INFO_TOOL);(6)设置整张图显示try{m_ctrlMapX.SetZoom(m_ctrlMapX.GetGeoSetWidth());}catch (COleDispatchException *e){e->ReportError();e->Delete();}catch (COleException *e){e->ReportError();e->Delete();}(7)设置居中工具:m_ctrlMapX.SetCurrentTool(miCenterTool);(8)地图属性信息:m_ctrlMapX.PropertyPage();(9)设置鼠标滚动放大缩小功能:m_ctrlMapX.SetMousewheelSupport(miMousewheelNoAutoScroll);(10)实现经纬度信息:这里稍微要麻烦一些,需要用到OLE的消息处理机制,相当于需要自定义消息处理,在自动生成的消息映射代码后面添加如下(CPP文件里面):在MSDN里面有具体的使用方法,以及里面参数的意义。
还有就是需要看MapX的帮助文档看里面对应的消息。
BEGIN_EVENTSINK_MAP(CMapXSampleView, CView)//鼠标单击别选择了用户自定义的工具ON_EVENT(CMapXSampleView, IDC_MAP, MAPX_DISPID_TOOLUSED, OnInfoToolUsed,VTS_I2 VTS_R8 VTS_R8 VTS_R8 VTS_R8 VTS_R8 VTS_BOOL VTS_BOOLVTS_PBOOL)//这是后面用到的ON_EVENT(CMapXSampleView,IDC_MAP,DISPID_MOUSEMOVE,OnMouseMoveInMap, VTS_I2 VTS_I2 VTS_XPOS_PIXELS VTS_XPOS_PIXELS)//视图内容改变时ON_EVENT(CMapXSampleView, IDC_MAP1, MAPX_DISPID_MAPVIEWCHANGED, OnMapViewChanged, VTS_NONE)END_EVENTSINK_MAP()响应函数://鼠标点击取图元信息void CMapXSampleView::OnInfoToolUsed(short ToolNum, double X1, double Y1, double X2, double Y2, double Distance, BOOL Shift, BOOL Ctrl, BOOL *EnableDefault){if (ToolNum == INFO_TOOL){m_gX = X1;m_gY = Y1;CInfoDlg dlg;dlg.DoModal();}}其中在CInfoDlg有一个比较主要重要函数实现实现某一图元的具体信息:void CInfoDlg::InfoToolUsed(){int iCount = 0;iCount = m_ctrlMapX.GetLayers().GetCount();//这点是搜索中心CMapXPoint pt;//这将搜索所有功能CMapXFeatures fs;//这将保留我们目前正在客户的功能CMapXFeature feature;CMapXLayer layer;//创建一个调度的点pt.CreateDispatch(pt.GetClsid());pt.Set(m_gX, m_gY);double dLayerZoomMax,dLayerZoomMin;double dMapZoom;dMapZoom = m_ctrlMapX.GetZoom();for (int i=1; i<=iCount; i++){layer = m_ctrlMapX.GetLayers().Item(i);dLayerZoomMax = layer.GetZoomMax();dLayerZoomMin = layer.GetZoomMin();if ((dLayerZoomMax >= dMapZoom && dLayerZoomMin <= dMapZoom) || (dLayerZoomMax == 0 && dLayerZoomMin ==0)){fs = m_ctrlMapX.GetLayers().Item(i).SearchAtPoint(pt);if (fs.GetCount() != 0){CString buffer;CMapXDataset ds;feature = fs.Item(1);layer = feature.GetLayer();COleVariant layerVt;layerVt.vt = VT_DISPATCH;layerVt.pdispVal = layer.m_lpDispatch;layerVt.pdispVal->AddRef();ds = m_ctrlMapX.GetDatasets().Add(miDataSetLayer, layerVt);COleVariant ValueVt;int iFieldCount = ds.GetFields().GetCount();for (int i=0; i<iFieldCount; i++){buffer = ds.GetFields().Item(i+1).GetName();m_ctrlInfoList.InsertItem(i, buffer);COleVariant vVal;for (int j=0; j<iFieldCount; j++){vVal = ds.GetValue(feature.GetFeatureID(), j+1);//判断是否有对应的值if (vVal.vt == VT_NULL){continue ;}vVal.ChangeType(VT_BSTR);buffer = vVal.bstrVal;m_ctrlInfoList.SetItemText(j, 1, buffer);}// end for (int j = 0; j < iFieldCount; j++)}// end for (int i = 0; i < iFieldCount; i++)break;}// end if(fs.GetCount() != 0)}// end if (dLayerZoomMax >= dMapZoom && dLayerZoomMin <= dMapZoom) }// end for (int i = 1; i <= iCount; i++)}(11)实现地图投影m_ctrlMapX.GetDisplayCoordSys().PickCoordSys();CMapXDatum datum;datum.CreateDispatch(datum.GetClsid());datum.SetFromList(0);m_ctrlMapX.GetDisplayCoordSys().Set(1, datum, COptionalVariant(), COptionalVariant(), COptionalVariant(), COptionalVariant(), COptionalVariant(), COptionalVariant(), COptionalVariant(),COptionalVariant(), COptionalVariant(), COptionalVariant(), COptionalVariant(), COptionalVariant());(12)图层控制:try{V ARIANT vHelpFile, vHelpID;vHelpFile.vt = VT_ERROR;vHelpFile.scode = DISP_E_PARAMNOTFOUND;vHelpID.vt = VT_ERROR;vHelpID.scode = DISP_E_PARAMNOTFOUND;CMapXLayers layers = m_ctrlMapX.GetLayers();yersDlg(vHelpFile, vHelpID);}catch (COleDispatchException *e){e->ReportError();e->Delete();}catch (COleException *e){e->ReportError();e->Delete();}(13)打开图形文件:void CMapXSampleView::OnFileOpen(){CFileDialog dlgFile(TRUE, "*.gst", NULL, OFN_HIDEREADONL Y , szTabFilter, this);dlgFile.m_ofn.lpstrTitle = "Open MapInfo Map";if (dlgFile.DoModal() == IDCANCEL){return ;}m_strFilePath = dlgFile.GetPathName();try{// Close the existing set of map layers and load the Canada mapTRACE0("Old Geoset: " + m_ctrlMapX.GetGeoSet());m_ctrlMapX.SetGeoSet(m_strFilePath);((CMainFrame*)AfxGetApp()->GetMainWnd())->m_wndMyDialogBar.SetDlgItemText( IDC_EDIT_GE OSET_NAME, m_ctrlMapX.GetTitleText() );m_ctrlMapX.SetTitleText("");TRACE0("New Geoset: " + m_ctrlMapX.GetGeoSet());}catch (COleDispatchException *e){e->ReportError();e->Delete();}catch (COleException *e){e->ReportError();e->Delete();}}4. 总结:开发GIS系统是相对比较复杂的,如果完全从零开始开发周期相对较慢,不过灵活性更高。