第7章 使用Catalog.docx
《第7章 使用Catalog.docx》由会员分享,可在线阅读,更多相关《第7章 使用Catalog.docx(80页珍藏版)》请在冰点文库上搜索。
第7章使用Catalog
第七章:
使用Catalog
目录在你能够处理所需要的数据的连接的地方。
当需要选择一个连接时,能得到数据所连接的路径,无论它是存在一个本地磁盘还是在网络数据库。
同时,你的连接也能生成地理数据库资源的目录。
这章将介绍ArcObjects成员的对象组成包括:
浏览地图和数据;检查内容中的特点;细致的检查数据;用地图的方法察看地图数据;用表格来察看地图数据的属性;查看和生成元数据;查询地图和数据;在 ArcMap和ArcToolbox中使用数据;处理数据资源;用目录才制作图层。
7.1相关知识
7.1.1ArcCatalog概念
ArcCatalog是能用来浏览和处理你本地和远程的GIS数据的应用。
它能方便易行的供Windows浏览器使用。
用户接口有三个主要的组成部分组成:
树查看,标签查看以及一系列的工具和菜单。
树查看能描述数据的名字和图标的等级;标签查看是真正意义上的数据查看,每一个都有它相应得标号,在某个时刻有一个是起作用的。
工具条和菜单包括能让你处理和操作的数据的各种工具和命令。
三个主要的数据查看包括内容查看,元文件查看和预览查看:
内容查看显示子选择位置的图标列表,就像在windowsExplorer种的图标哪像。
当你启动ArcCatalog时用所用的查看方式就是这样。
元文件查看显示所有与当前选择相关的元文件。
在默认是,格式来自于ESRI方式,当它们也能被指定。
预览是在任何时刻都可以起作用的,默认时,预览能选择那种数据是最自然适合显示的。
例如,选定了一个Shapefile,预览能默认的显示他的地图。
然而,在预览下边的菜单能使你不顾忌这些,是你能够选择自己喜欢的预览形式。
体系结构
ArcCatalog对象模型很好的显示实际的用户接口经历。
应用的运行由GxAPPlication对象展现。
它主要的作用酒食处理三个主要的接口元素。
它也能够带表用户指定和增加标准换得成员。
在实际的应用当中能够用ArcCatalog操作所有的对象,并对它们执行各种操作。
对象模型包括三种独立但相互联系得功能,对象等级,查看等级,应用等级。
对象等级
对象等级在对象模型的底层,GxObjects代表单独的数据项目,它们出现在树查看和内容查看中。
不同类型的GxObjects对象用于不同的数据。
例如,Gxlayer对象代表图层文件,而GxMap对象代表压缩的地图文档。
在GxObjects层次中有两个对象很重要:
目录对象(GxCatalog),当前选择(GxSelection).
7.1.2ArcCatalog对象模型的概览
目录代表实际的数据树,像显示在树查看当中的那样。
从GxCatalog对象中可以从对它们的后继来操作它们,但更多的时候你会用到选择,包括俩部分:
一个地点和一组选择的对象。
当在树查看中选中一个项目时,就变成了选择的地点。
在内容中选中的项目则变成了那个地点对应得对象,在ArcCatalog中的操作都是针对当前的选定的。
对象是可以扩展的。
加入定义的GxObjexts,定义至少支持IGxobjects的对象。
你也需要写一个GxObjectsFactory来说明怎么来产生你定义的GxObjexts。
查看等级
查看等级时中间层次。
它能以不同的方式查看单独的GxObjects类。
它们代表不容的GxObjects接口。
不同的GxViews有不同的任务。
例如,快速的查看数据,可能会用到GxContentsView,它有不同的显示方法。
当用某些属性来查找数据时则用GxDocumentation查看。
GxGeographic查看在打算用的数据时特别的有用。
ArcCatalog给GxView提供了一个很好的框架。
树查看总是可以执行的,它主要的操作工具就是ArcCatalog来建立当前的选择的位置。
位置选择管理由GxView显示的其他对象。
ArcCatalog有两种方法来显示其他的查看:
标签查看或预览。
标签查看能在主ArcCatalog窗口中显示各个单独的标签。
当默认时有三种预览:
内容,预览,元数据。
然而开发者能添加他想要的方式。
预览能以有预览标签的结合箱子的形式显示,通常用来查看静态数据。
不论选择那种选择查看哪种方式,GxView的操作都是不用影响的。
在两种查看方式上仅有不大的区别。
标签查看方式能手工的选定。
然而预览自动选择是决定于当前所选定的对象的。
如果预览是激活的,当用户改变选择的位置,ArcCatalog使用IGxView:
:
Applies方式询问注册的预览是否能处理选定的类。
如果当前的预览能够支持,第一个查看方式就说明它能够支持选定的方式为激活状态。
当然用户之后又能选择其他的方式,当选择改变是自动改变逻辑也会随之改变。
应用等级
ArcCatalog的最高等级application是由GxApplication控制的,它与菜单和工具条相联系,它操作GxCatalog的生命周期,显示和操作GxViews。
7.1.3GxCatalog初始化和对象删除
当应用启动时,AtcCatalog生成GxDiskConnection对象来连接和安装目录树。
如果是首次启动ArcCatalog,它会在你的本地驱动加入文件联系。
此时ArcCatalog生成和加入在CATID_GxRootObjects中注册的GxObjects对象。
几个根对象是默认的提供的,数据库连接文件夹,坐标系统文件夹,地图编码服务文件夹,因特网服务文件夹,查询结果文件。
代表地,这些根对象通常都是作为其他对象的容器,因此执行IGxObjectContainer但这并不是必须的。
数据转移
ArcCatalog用户使用标准的OLE数据转换机制来拖动、放弃、复制、粘贴,它常起到操作源,目的,或者同时起到这两个作用。
为了充分理解drag/drop,copy/paste是怎么工作的,最好观察当他同时既是源又是目的时候再ArcCatalog中的行为。
ArcCatalog中的DRAG/DROP操作。
ARCCATALOG中的DRAG/DROP操作
当检测到DRAG操作时,ArcCatalog就会将选定的GxObjects打包到数据对象并发送至OLE。
ArcCatalog就会按照如下方式将选定的GxObjects打包。
首先,选定的GxObjects被鉴别。
每一个选中的GxObjects会从Internal-NameObjects成员得到一个内部的名称。
不能返回的成员将不会被考虑。
所有在内部得到命名的对象都会形成通向OLE的数据流。
为了保证能通向这个流,ArcCatalog声称NameFactoryutility对象,然后调用PackageNames方法。
这个数据对象然后传送至OLE。
如果操作是drag/drop,当drag发生的时候OLE会产生一个模型时间循环。
在循环运行时,OLE会检测鼠标的位置。
当鼠标键入在drop中注册过的bWnd,OLE就调用IDropTarge接口,先是DragEnter,然后是DragOver,如有必要还会调用DragLeage。
如果用户释放bWnd,OLE会调用Drop方法。
因为在这个例子中ArcCatalog是数据转换得目的地址,ArcCatalog从OLE中处理IDropTarget请求。
其操作如下,ArcCatalog检测GxObjects的请求是否有效,任何支持IGxPasteTarget的对象都会考虑,接口如下:
interfaceIGxPasteTarget:
FunctionCanPaste(namesasIEnumName,moveOperationasBoolean)asBoolean
FunctionPaste (namesasIEnumName,moveOperationasBoolean)asBoolean
ArcCatalog将drag数据转换成更好用的形式,命名为枚举的Name对象(IEnumName)。
然后调用CanPaste决定drop目标是否能够接受现在的名字。
作为反应,潜在的枚举类型会列举一系列的名字看能否处理它们,例如,GxDatabase对象会确保Name对象会支持IFileName。
当目标的GxObject决定能接受drop,它就返回真。
如果数据不能支持,GxObject必须支持drag操作是否代表移动或复制,通过设置moveOperation参数为真或假来实现。
当用户释放时标时,OLE调用IDropTarget:
:
Drop,ArcCatalog通过调用IGxpasteTarget:
:
Paste方法来响应。
它也能通过返回真或假来显示操作是否是移动或是复制。
就这一点而言,GxObjects必须传输实际的数据。
当moveOpoeration默认为真时,GxObjects也需要显示实际的移动是否执行。
它通过设置参数为真或假来表达。
最终,当传输成功则返回值为真,否则为假。
在ARCCATALOG中的复制/粘贴操作
当操作不是drag/drop,而是复制/粘贴时,情况也十分类似,仅有很小的一部分不尽相同。
当复制启动时,ArcCatalog将选中的GxObjects打包到数据对象。
无论当前的选定什么时候改变,ArcCatalog都能够检查paste命令是否能够执行,
通过在当前位置调用IGxPasteTarget:
:
CanPaste。
所需的行为就是对IGxPasteTarget的执行,这取决于drag/drop的情况,如果用户选择粘贴命令,ArcCatalog就在当前的位置调用粘贴的方法。
7.2GxView对象,GxApplication和相关的对象
7.2.1GxApplication组件类
GxApplication代表可以执行的ArcCatalog对象。
它可以生成和管理用户的接口,树查看,标签查看,菜单和工具,通过生成GxCatalog根对象来初始化Catalog树。
典型的,开发者会从GxApplication来开始对对象类的向导。
所有的命令和工具都能在他们的OnCreate方法中来传递对GxApplication的引用。
GxApplication支持IApplication和IGxApplication。
IApplication对于ArcMap和ArcCatalog都是常用的,在第三章中详细的讨论过。
IGxApplication接口是ArcCatalog所独有的,通常用于控制它某个方面的行为。
比如,通过IGxApplication接口,你能够删除或扩展当前的选定或促使Catalog树在某个部分的更新。
Catalog成员返回代表Catalog数据数的根GxCatalog对象,在那你能够通过Catalog的后继来使用IGxObjects-Container:
:
Children.来枚举。
TreeView成员能提供到ArcCatalog树查看的路径。
它可以使建立好的查看比如,GxContentsView,GxPreview,orGxMetadataView,也可以是用户自行添加上去的,在这,你能够控制激活了窗口,无论他本身的属性是怎么样的。
IGxCatalogEvents接口是由GxApplication执行的重要的接口,这个接口允许开发者添加各种ArcCatalog允许的代码,比如说对象的添加或是删除。
当ArcCatalog出现更新是,只有本地的对象会传递给OnObjectRefresher,然而这个对象下所有的类都会得到更新。
7.2.2GxSelection和GxObjectArray组件类
GxSelection对象能保存在树查看和标签查看中选定的项目。
GxSelection对象能被生成,但通常都是从GxApplication中得到的,当用户右击鼠标决定复制和粘贴时选择那个中类来决定是很重要的。
下边的VBA代码就是使用GxSlelection对象来循环选定的对象和展示他们的目录的。
DimpAppAsIGxApplication,pGxSelAsIGxSelection,_
pEnumGxObjAsIEnumGxObject
DimpGxObjAsIGxObject
SetpApp=Application
SetpGxSel=pApp.Selection
SetpEnumGxObj=pGxSel.SelectedObjects
SetpGxObj=pEnumGxObj.Next
DoWhileNotpGxObjIsNothing
Debug.PrintpGxObj.Category
SetpGxObj=pEnumGxObj.Next
Loop
IGxselection接口由GxSelection唯一执行,能提供到选定到ArcCatalog目录中树查看和标签查看的路径。
当需要决定选择了什么或对己选定的类作修改时就使用则这个接口。
Location方法返回在树查看中选定的IGxObject,而SelectedObjects方法返回在标签查看中选定的对象的枚举。
FirstObject返回在标签查看中选定的第一个对象。
改变选定的方法需要一个可以设置为空的初始化参数。
调用这些方法能激活SelectionChanged事件来传送初始化参数。
选定的方法在标签查看中的选定的对象中。
下边的VBA代码显示了如何调用SetLocation方法来改变在树查看中的选定。
DimpAppAsIGxApplication
DimpSelAsIGxSelection
DimpObjectAsIGxObject
DimlnAsLong
SetpApp=Application
SetpObject=pApp.Catalog.GetObjectFromFullName_
("d:
\tools\various\labeling.txt",ln)
SetpSel=pApp.Selection
pSel.SetLocationpObject,Nothing
GxObjectArray对象有一系列的GxObjects,这个对象同过一个方法或对象返回。
因此,取决于开发者如何开发和操作这种类型的对象。
一些在ArcCatalog对象中的方法将IEnemGxObject变量作为输出,如果没有GxObjectsArray类,开发者能定义他们自己的类来执行IEnumGxObject
IGxObjectsArray接口适于由GxObjectsArray类来执行,提供对保存在类中的GxObject系列的操作。
通过这个接口,用户可以插入,移动,重新取回队列中的对象。
7.2.3GxView抽象类
有两种查看:
标签查看和预览。
它们的执行非常相似,但基于外观的不同在各自的目录里注册。
标签查看在ArcCatalog主窗口中显示独立的标签。
不论当前的选定它们通常都是能够执行的。
预览则有些不同,他们在预览的标签可以得到,只有显示当前的选定的适合的形式。
应用成员能决定这些。
如果应用能够执行,它会在预览允许的前提下显示尽可能多的可行方法。
若不能,则不会显示。
当注册为标签查看时,应用不会起作用。
在适当的时候,ArcCatalog能使GxView激活或非激活。
作为响应,查勘能更形自己或建立/释放既有的连接。
GxView必须最大限度的支持IGxView接口,ArcCatalog通常用它来与查看操作。
它从查看得到bWnd来展示bWnd成员。
它也保证事件能正确的传送到bWnd,当ArcCatalog窗口调整大小时它也随之调整大小。
开发者可以自己定义查看来执行接口。
使用Active成员来控制GxApplication,GxCatalog对象以参数的形式传递。
Deactivate成员来释放应用。
DefaultToolbarCLSID提供特殊查看的默认工具引用。
查看默认的工具对当前的GxView类型相适应。
下边的VBA代码使用IGxView接口名字成员来判断你是否在预览。
如果是的,预览的ID类就会更改成表格查看。
DimpAppAsIGxApplication,pGxViewAsIGxView
SetpApp=Application
SetpGxView=pApp.View
IfUCase(pGxView.Name)="PREVIEW"Then
'Theabovelinecouldbereplacedwith"IfTypeOfpGxViewIsIGxPreviewThen"
DimpPrevAsIGxPreview,pUIDAsNewUID
SetpPrev=pGxView
Debug.PrintpPrev.ViewClassID
pUID="{9C34344D-99DC-11D2-AF6A-080009EC734B}"
pPrev.ViewClassID=pUID
EndIf
GxView随意的支持IGxViewPrint接口允许用户打印当前的展示。
这更有利于元数据查看的操作,因为它允许生成代码来打印格式化的元数据。
7.2.4GxContentsView和GxContentsViewColumn
GxContentView派生类显示当前选定为之的子类,大图标,列表,报道。
通过IGxCintentsView中的DisplayStyle成员来改变风格。
下边的VBA代码就是用来检查当前的查看看它是否是GxContentsView。
代码也允许成员和查看相联系。
DimpAppAsIGxApplication,pViewAsIGxView
DimpContViewAsIGxContentsViewColumns,pColAsIGxContentsViewColumn
SetpApp=Application
SetpView=pApp.View
IfTypeOfpViewIsIGxContentsViewColumnsThen
SetpContView=pView
SetpCol=pContView.ColumnByIndex(0)
Debug.PrintpCol.Caption&","&pCol.PropertyName
EndIf
EndSub
IGxContentsView接口由GxContentsView对象来执行。
它能提供改变用户与查看类型的方式。
那种类型的文件在展示,怎么显示,是否能一次选定多个都是于由接口控制的。
用ObjectFilter成员来强制一系列的对象用过滤类来显示。
就什么样的过滤以及怎么生成自己的过滤,查看在本章中对GxDialog和GxObjectsFilter的介绍。
IGxContentsViewColumns接口起到对GxContentsView对象中的GxContentsViewConlumn对象的容器。
集合中的容器代表查勘中显示的标签项。
在使用InsertColumn方法加入到你的项目中,执行UpdateColumn
方法来更新项目列表。
RemoveAllColumns将不会移动名称和类型项目。
这些项目不会被移动,一定要谨记对项目的移动不是暂时的永久性的,
GxContentsViewColumn对象代表展示的项目信息。
开发者有生成和加入额外的项目信息来自定义展示特定信息的查看。
IGxContentsViewColumn接口提供包含到保存GxContentsView对象的成员。
Column成员能让你设置宽度,可见性,项目的标题。
固有的成员包括名字,目录,大小等。
除非你将它们加入到你自己的GxObject工程当中,它们是不会起作用的。
如果你这样做,你就能够加入特定的对象成员。
PropertyName成员是基于工程元文件的关键词的。
在使用一个PropertyName之前确保你的元文件有一个特定关键词。
7.2.5GxDocumentationView组件类
在ArcCatalog中元文件的查看是由GxDocumentView代表的。
因为它本身就是GxView,它自然就支持IGxView。
然而要操作他,你就必须要用到IGxDocumentation查看。
接口允许你做三种操作:
通过Edit来编辑元数据,通过EditProperties来编辑元文件,通过Syncbronize来给当前的对象付值。
建立一个定义的编辑,生成一个执行IMentadataEditer接口执行的对象,然后通过IMetadataHelper:
:
Editor成员来通知元数据的扩展的对象。
GxDocumentationView执行IGxViewPrint来让你打印格式化的元数据。
IGxDocumentationView是由GxDocumentationView执行的。
它提供一系列操作与对象相关的元数据相关的操作。
通过这个接口,开发者能打开于元数据相关的编辑,或者将编辑应用到元数据。
下边的VBA代码将默认的编辑应用到与选定的对象类相关的元数据。
DimpAppAsIGxApplication,pGxViewAsIGxView,_
pDocViewAsIGxDocumentationView
SetpApp=Application
SetpGxView=pApp.View
IfTypeOfpGxViewIsIGxDocumentationViewThen
SetpDocView=pGxView
pDocView.Edit
EndIf
7.2.6GxGeographicView组件类
当想预览你的数据时,就使用GxGeographicView,这可以在ArcCatalog中预览图标实现,它能在框口中显示选定的数据的地理图形。
默认时,GxGeographicView对象来在预览页中显示,然而,对象会像执行GxView对象那样来执行IGxView。
一系列的标准操作工具被用来zooming,组装,鉴别身份。
然而,你可以添加你自己的工具,在这个查看里你可以选择自己喜欢的方式。
能在IGxGeographicView接口中得到地图或显示地图。
用户有两个对象来展示选中的项目,你也可以操作他们。
下边的VBA代码能得到查看地图查看的地图
PublicSubZoomIn()
DimpAppAsIGxApplication
SetpApp=Application
IfNotTypeOfpApp.ViewIsIGxPreviewThenExitSub
DimpPreviewAsIGxPreview
SetpPreview=pApp.View
IfNotTypeOfpPrev