用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年由美国前副总统戈尔提出的。
- 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系统是相对比较复杂的,如果完全从零开始开发周期相对较慢,不过灵活性更高。