ArcObjects二次开发.docx
- 文档编号:7131223
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:26
- 大小:816.86KB
ArcObjects二次开发.docx
《ArcObjects二次开发.docx》由会员分享,可在线阅读,更多相关《ArcObjects二次开发.docx(26页珍藏版)》请在冰豆网上搜索。
ArcObjects二次开发
ArcObjects二次开发
摘要:
从20世纪末到21世纪初,随着组件技术的显现,给地理信息系统(GIS)软件领域带来了新的进展契机。
因此组件式GIS应运而生,完全改变了传统GIS开发模式,人们开始运用崭新的工具来构架GIS应用系统。
在VB环境中咱们利用Arcobject(AO)作为平台,对GIS进行了简单的二次开发,包括放大、缩小、查询、缓冲区、三维分析等功能,同时咱们在VisualC++的工作环境中,制作出了COM控件。
另外,咱们利用DEM对三维模块进行了系统的分析。
关键词:
ArcGISArcObjectsVisualBasicVisualC++
Summary:
Befromendof20centuriestothebeginningof21centuries,alongwiththetechnicalemergenceofmodule,broughtnewdevelopmentchanceforthegeographyinformationsystem(GIS)softwarethemoduletypeGISemergewiththetideofthetimes,changingthetraditionalGISdevelopmentmodethoroughly,thepeoplestartthetoolofmakeuseofthenewnesscomingtotheframeGISapplicationmakeuseoftheArcobject(AO)tobetheterraceintheenvironmentofVB,carryingontotheGISsimpledeveloptwotimes,includingenlarge,contract,search,bufferarea,thethree_dimensionalanalysisfunctionetc.AtthesametimeintheVisualC++ofworkenvironment,wecreatedtheCOMcontrolsthepiece.Moreover,wemakeuseoftheDEMthatanalyzethethree_dimensionalmodulethoroughly.
Keyword:
ArcGISArcObjectsVisualBasicVisualC++
第一章地理信息系统(GIS)
地理信息系统是一个搜集、存储、治理、分析、显示和应用地理信息的运算机系统,是处置、分析和应用海量地理数据的交叉学科。
地理信息系统已经被普遍应用于城市计划、国土资源调查与治理、环境监测与分析、公安消防预警、交通与平安治理、配电网治理等方面。
但是,各类GIS软件在提供了壮大的处置和分析空间数据的功能的同时,还涉及复杂的GIS算法和数据模型。
一般用户除要熟悉自己的业务外,还必需为这些复杂的操作所苦恼,这给GIS的普及带来专门大的难度。
GIS技术的二次开发是解决这一艰巨任务的途径。
§组件技术与地理信息系统
组件式对象模型(COM)不是一种面向对象的语言,而是一种二进制标准,其作用是使各类软件组件和应用软件能够用一种统一的标准方式进行交互,而成立在组件基础上的应用程序几乎不用修改,大大提高了代码的应用性。
组件式GIS的大体思想是把GIS的各大功能模块划分为几个控件,每一个控件完成不同的功能。
各个GIS控件之间,和GIS控件与其他非GIS控件之间,能够方便地通过可视化软件开发工具集成起来,形成最终的GIS应用。
一些GIS软件公司纷纷推出了基于COM技术,由一系列ActiveX控件组成的GIS二次开发软件环境。
这些软件具有以下要紧优势:
(1)小巧灵活、价钱廉价;
(2)不必专门的GIS开发语言;
(3)壮大的GIS功能;
(4)面向公共,扩展领域。
采纳面向对象技术的GIS软件,其二次开发能够利用可视化开发工具的高效方便的编程功能,结合GIS系统完备的空间数据的分析处置功能,采纳COM技术进行组件式二次开发,提高应用系统的开发效率,使GIS系统面向对象,具有良好的外观和完善的功能,这也是现今地理信息系统的一个新的研究领域。
§组件式GIS概述
组件式GIS,即将复杂的GIS功能依照对象、功能、应用等层次分解为能够互操作和自我治理的组件,并由一种特定的平台或语言开发,能够在其他的平台或语言中重复利用。
目前,组件式GIS要紧有两种形式,一种是由能够实现制图与一样GIS功能的ActiveX控件集组成的组件式GIS。
这些控件既能够通过属性、事件、方式等接口与应用程序进行交互,也能够在可视化开发环境中集成组成应用系统。
国内外具有代表性的有:
ESRI公司出品的MapObject,MapInfo公司推出的MapX,武汉吉奥公司研发的GeoMap等。
另一种形式的组件式GIS是基于MicrosoftCOM技术构建一系列COM组件集,用户能够利用这些组件开发各类GIS功能,并在此基础上构建GIS应用系统。
这种开发模式更为底层,开发较为复杂,功能更为壮大,以ESRI公司的ArcObjects(简称AO)组件为典型。
两种开发形式的软件都具有地图显示、图层操纵、数据查询、地图符号化、专题地图等大体功能。
传统GIS开发平台均采纳专门的设计开发语言,加上庞大的函数和命令库进行开发,如此就面临着开发难度大,投入高,周期长,可重用性差的问题;而组件式GIS专门好地解决了这些问题,使构建系统就像搭积木一样便利。
第二章二次开发的平台———VisualBasicVisualC++ArcGISArcObjects的简介
§VisualBasic
BASIC是Beginner'sAll-purposesymbolicinstructionCode的缩写,是国际上普遍利用的一种运算机高级语言。
BASIC简单、易学,目前仍是运算机入门的要紧学习语言之一。
BASIC是种易学易用的高级语言,超级适合初学者学习运用。
经常使用的编译软件有TrueBASIC,TurboBASICQuickBASIC,VisualBASIC,CAREALIZER,GFABASIC,POWERBASIC,等等......
VisualBasic中文版是一种应用程序开发工具,它的功能确实是用来编程——Windows下的应用程序。
”Visual”一词在运算机程序设计领域中意为:
”可视化的”,Microsoft公司的其冠以Visual的产品都含有那个意思。
VB确实是可视化程序设计语言。
可视化程序设计指的是一种开发图形用户界面的方式,利用这种方式,程序员不须编写大量代码去描述界面元素的外观和位置,只要把预先成立的界面元素用鼠标拖放到屏幕上适当的位置即可。
VisualBasic在原有BASIC语言的基础上进一步发那,至今包括了数百条语句、函数及关键词,其中很多和WindowsGUIe直接关系。
专业人员能够用VisualBasic实现其他任何Windows编程语言的功能,而初学者只要把握几个关键词就能够够成立有效的应用程序。
VisualBasic的大体特点有两个:
1)VB提供可视化的编程工具;2)程序采取“事件驱动”方式。
§VisualC++
VisualC++是一个开发工具包,它可能能够分成三个要紧的部份:
(1)DeveloperStudio,这是一个集成开发环境,日常工作的99%都是在它上面完成的,DeveloperStudio提供了一个专门好的编辑器和很多Wizard,事实上它没有任何编译和链接程序的功能,DeveloperStudio并非是专门用于VC的,它也一样用于VB,VJ,VID等VisualStudio家族的其他同胞兄弟。
因此不要把DeveloperStudio当做VisualC++.
(2)MFC。
从理论上来讲,MFC也不是专用于VisualC++,BorlandC++,C++Builder和SymantecC++一样能够处置MFC。
同时,用VisualC++编写代码也并非意味着必然要用MFC,只要情愿,用VisualC++来编写SDK程序,或利用STL,ATL,一样没有限制。
只是,VisualC++本来确实是为MFC打造的,VisualC++中的许多特点和语言扩展也是为MFC而设计的,因此用VisualC++而不用MFC就等于抛弃了VisualC++中专门大的一部份功能。
可是,VisualC++也不等于MFC。
(3)PlatformSDK。
这是VisualC++和整个VisualStudio的精华和灵魂。
大致说来,PlatformSDK是以MicrosoftC/C++编译器为核心,配合MASM,辅以其他一些工具和文档资料。
上面说到DeveloperStudio没有编译程序的功能,那么这项工作是由谁来完成的呢?
是CL,是NMAKE,和其他许许多多命令行程序,这些咱们看不到的程序才是组成VisualStudio的基石。
§ArcGIS
ArcGIS是开放的地理信息处置平台,具有壮大的地理数据治理、编辑、显示、分析等功能。
它要紧有ArcMap、ArcCatalog、ArcToolbox、ArcScene(Desktop———桌面系统)等14个功能子系统。
组成DesktopArcGIS的ArcMap、ArcCatalog和ArcScene的基础是微软的组件对象模型(COM)。
由于ArcGIS完全COM化,关于需要进行结构定制和功能扩展和独立程序开发的高级应用来讲具有超级大的吸引力,并提供了前所未有的灵活性。
ESRI的ArcObjects是ArcGIS的功能核心,是ArcMap、ArcCatalog、ArcScene等Desktop应用程序的开发平台。
ArcObjects是一种集成的面向对象的地理数据模型的软件组件库,提供了ArcGIS中全数的功能,是开发GIS应用程序的基础。
开发人员能够利用ArcObjects框架进行编程,以提高ArcGIS的性能或扩展其应用。
它是以完整有序的对象组件的集合形式发布的。
§ArcObjects
一、ArcObjects简介
ArcObjects是ESRI公司推出的ArcGIS家族中应用程序ArcMap、ArcCatalog和ArcScene的开发平台,是基于微软的组件对象模型(COM)技术开发的一系列COM组件集。
它提供了1800多个单独的基于COM的组件,几百个具有良好文档说明的接口和数千个方式,其中囊括了ArcInfo和ArcView中实现的所有功能,开发人员能够利用任何一种兼容COM的编程语言扩展AO组件,定制符合自己要求的组件。
因为基于COM工业标准,用AO开发的应用程序与主流IT是兼容的、开放的、可移植的,很容易融合到一个机构的系统中。
在目前经常使用的ArcGIS的AO开发中,有2个要紧的高级通用控件:
MapControl和PageLayoutControl。
它们都是由AO基础组件集成而成,向用户提供地图视图窗口。
MapControl控件提供了类似ArcMap中的数据视图(DataView)的视图窗口,该窗口能够使地图数据布满整个客户区,便于对地图数据进行操作,如地图显示、要素编辑、空间和属性数据查询、地图数据分析等。
PageLayoutControl控件提供了类似ArcMap中的版面视图
(LayoutView)的视图窗口,该窗口要紧用于制图输出,能够进行以下操作:
制图版面设置、辅助要素设置、制图数据操作、地图整饰操作等。
通过以上两个控件能够实现ArcMap中的绝大部份功能。
另外,ArcGIS版本还提供了SceneViewer控件,要紧为ArcGIS3D分析扩展模块提供三维可视化视图窗口,一样可应用于AO组件编程。
二、AO组件开发类型
(1)VB的开发方式
利用嵌入ArcCatalog和ArcMap中的VB宏进行嵌入式开发。
利用系统内置的VB语言,能够快速地实现针对特殊需求的功能扩展和界面的定制。
这是最简单快速的方式,是有效利用现有平台与数据的首选开发方式。
其缺点是不能离开桌面软件独立运行。
(2)创建自己的COM组件
采纳任意一种支持COM的高级语言(如VC、VB、Delphi等),在AO组件的基础上进一步创建自己的COM组件,知足各类特殊的需求。
能够新创建一个DLL或OCX工程,引用AO核心库,概念自己的接口、属性、方式,底层功能挪用AO组件加以实现。
所生成的COM组件具有专门大的灵活性,能够应用在由任何支持COM的语言开发的独立应用程序中,但这种开发方式需要较高的组件开发技术。
(3)开发独立的应用程序
在支持COM的高级编程语言环境下,应用AO组件提供的壮大的GIS和制图功能,自行开发符合要求的专业化GIS系统。
这种开发方式第一要引用AO组件的核心库,然后依照COM编程的特点,利用接口编写代码。
其优势是:
开发人员能够依照系统的实际需要,从组件库当选择需要应用的组件快速整合系统,所生成的应用程序不依托于ArcGIS桌面版软件而独立运行,为专业人士提供了方便、友好的操作方式。
缺点是该方式开发难度较大。
三、AO开发方式
AO组件提供了3种类型的类:
抽象类(AbstractClass)、组件类(CoClass)和类(Class)。
抽象类是不能被创建的,只能作为其他类的父类。
类也不能被创建,但该类的对象能被其他类所创建,并作为该类的一个属性,或被其他类的对象实例化。
组件类能够被显式地创建。
AO组件是基于COM标准概念的,在实现上也完全遵循该标准,每一个功能都需要通过接口来实现。
下面别离以目前经常使用的VB和VC两种开发环境举例说明AO组件的开发方式。
(1)VB开发环境的应用。
在VB开发环境中,第一通过[References]将ESRIObjectLibrary库)引用进来。
然后依照应用,选择或查找相关的AO组件类及其接口和要利用的方式与属性,编写实现代码。
如以在MapControl控件中添加一个空的Feature图层为例,其操作为:
DimpLayerAsIFeatureLayer头文件中添加如下语句:
#import"D:
\arcgis\arcexe83\bin\"raw_interfaces_only,raw_native_types,no_namespace,named_guids,exclude("OLE_COLOR","OLE_HANDLE"),就可运用AO提供的接口编程。
可是,VC中的概念方式与VB中不同,VC采纳智能指针来概念接口,接口概念时须在接口名后添加“Ptr”,实例化既可同时进行也能够另行概念。
以上例中的功能为例,要紧代码如下:
IFeatureLayerPtrpLayer(CLSID_FeatureLayer);reateInstance(CLSID_Map);
弹出的对话框中(如以下图所示),选中“bankworkspace”,并把工作区命名为“com”,选择存储位置,点击确信.
选中“workspace‘com’:
oproject(s)”,单击鼠标右键,选择“AddNewPorjecttoWorkspace…”.在弹出的对话框中(如以下图所示)选中工程中的“ATLCOMAppWizard”,并给工程命名为“hu”,选择存储位置.选择“A添加至现有工作区”,平台选择“Win32”.点击确信.
在弹出的对话框里(如以下图所示),选择“DynamicLinkLibrary(DLL)”,点击完成.
2)增加ATL对象类
点击“插入”,选择“新建ATL对象”并点击.在弹出的对话框里(如以下图所示),选中“objects”,并选择“SimepleObjects”.点击“Next”.
在弹出的对话框里(如以下图所示),点击“Name”,在“ShortName”中输入“fun”,其他项那么自动生成.
点击“Attributes”(如以下图所示),在“ThreadingModel”中,选择“Apartment”;在“Interface”中,选择“Custom”;在“Aggregation”中,选择“Yes”.点击确信.
3)添加接口函数
选中“IFun”点击鼠标右健(如以下图所示).点击“AddMethod…”.
在弹出的对话框中(如以下图所示),在“MethodName”中输入“Add”;在“Parameters”中输入“[in]longn1,[in]longn2,[out,retval]long*pVal”.点击“OK”.
再次选中“IFun”点击鼠标右健.点击“AddMethod…”.在弹出的对话框中(如以下图所示),在“MethodName”中输入“cat”;在“Parameters”中输入“[in]BSTRS1,[in]BSTRS2,[out,retval]BSTR*pVal”.点击“OK”.
接口函数完成后的图如以下图所示:
4)实现接口函数
鼠标双击CFun\IFun\Add([in]longn1,[in]longn2,[out,retval]long*pVal)开始输入函数:
STDMETHODIMPCFun:
:
Add(longn1,longn2,long*pVal)
{
*pVal=n1+n2;
returnS_OK;
}
鼠标双击CFun\IFun\cat([in]BSTRS1,[in]BSTRS2,[out,retval]BSTR*pVal)开始输入函数:
STDMETHODIMPCFun:
:
Cat(BSTRs1,BSTRs2,BSTR*pVal)
{
intnLen1=:
:
SysStringLen(s1);§VB环境中的开发
1)添加部件
从VB的工作环境中,在菜单项选择项中的工程里的下拉菜单(部件)ESRIArcobjects(Superseded)、ESRIMapControl、MicrosoftCommon等等,其目的是为了创建对象。
2)添加后台引擎(引用)
在VB的工作环境中的工程菜单里的下拉菜单(引用),其目的是支持AO后台环境的工作。
3)成立界面—地理信息系统二次开发设计
要紧包括:
主显示模块、编辑模块、三维显示模块、WebGIS访问模块、关于本系统、退出本系统,这是VB开发AO的全数工作。
(1)主显示模块
实现了放大、缩小、添加图层、拖动、查询、打印等工具,大体上完成了软件中功能的实现。
下面是运行后(加载了图形)的主界面的显示:
完成此工程实现的要紧的程序如下:
添加图层
PrivateSubCommand1_Click()
DimpgxdialogAsIGxDialog
DimpEnumGxobjectAsIEnumGxObject
DimpFilter1AsIGxObjectFilter
SetpFilter1=NewGxFilterFeatureDatasetsAndFeatureClasses
Setpgxdialog=NewGxDialog
=True
="f:
"
="添加矢量数据"
="OK"
Set=pFilter1
pEnumGxobject
IfpEnumGxobjectIsNothingThenExitSub
DimpGxObjectAsIGxDataset
DimpFLayerAsIFeatureLayer
SetpFLayer=NewFeatureLayer
SetpGxObject=
IfpGxObjectIsNothingThenExitSub
WhileNotpGxObjectIsNothing
'***IfTypeOfIsIFeatureClassThen
Set=
=pFLayer
SetpGxObject=
Wend
EndSub
查询的程序如下:
PrivateSubcmdGeometryButton_Click(IndexAsInteger)
OnErrorGoToErrorHandler
DimiAsLong
DimpCombEnvAs
DimpFeatGeomAs
DimpSelectedAs
DimpFeatureAs
DimpPointCollectionAs
DimpPolygonAs
DimpPointAs
DimpActiveViewAs
DimpPolyTopoAs
DimpMinorPolyAs
DimpTopoAs
DimpRubberBandAs
DimpRubberBandGeometryAs
DimpEnvAs
'Oneoftheiconsthatsetsthesearchareahasbeenpressed.Selectwhichone
'andthenperformtheactionrequired.
SetpActiveView=GetMap
SetpPolygon=NewPolygon
SetpPointCollection=pPolygon
SelectCaseIndex
Case0'Selectfeature
DoEvents
If(NotBlockForPoint())Then
SetpRubberBand=NewRubberPoint
SetpRubberBandGeometry=,Nothing)
If(NotpRubberBandGeometryIsNothing)Then
'Usingthisgeometryasthesearchcriterialookforthenearestfeature
'intheorderofpts,linesthenareas
'Thesearchenvelopeis16x16pixels
SetpEnv=
=ConvertPixelsToRW(16)
=ConvertPixelsToRW(16)
pRubberBandGeometry
GetNearestObjectpEnv,pFeature
'MakesurepFeatureisvalidandifitisgrapthegeometryfromit
If(pFeatureIsNothing)Then
Beep
MsgBox"NoFeatureSelected.Spatialextentnotupdated.",
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ArcObjects 二次开发