如何扩展ArcGIS中的元数据编辑器
http://www.esrichina-bj.cn/old../library/arcnews16/Metadata.htm
http://www.esrichina-bj.cn/old../library/arcnews13/new13-MATEDATA.htm
http://resources.esri.com/help/9.3/ArcGISDesktop/dotnet/4981b7d8-a5b0-4955-826e-5e25352718db.htm
ArcCatlog自带了两个元数据编辑器,分别为FGDC元数据编辑器,ISO元数据编辑器。分别符合FGDC标准和ISO标准。关于FGDC元数据标准的详细信息,请查看 www.fgdc.gov/metadata。
除了以上两个元数据编辑器,用户还可以定制自己的元数据编辑器。定制元数据的方法为编写实现esriCore、IMetadataEditor接口的类,然后做成dll或者独立运行的exe文件,实现对元数据进行编辑。
IMetaDataEditor接口中包含一个属性和一个方法:1、Name属性用来设置该元数据编辑器的名称;2、Edit方法在ArcCatlog调用Metadata Editor的时候被调用。一般在这个方法里面调用一个编辑界面,使用户可以在界面中编辑数据,然后保存到属性中,如果Edit方法返回为true,那么ArcCatlog就会更新元数据。
新建一个VB的Active DLL工程,如图1所示:
图 1 :新建 ActiveX DLL 工程
添加对ESRI Object Library的引用,如下图2所示:
图2:添加对ESRI Object Library的引用
用下面代码添加对ImetadataEditor的引用:
Implements esriCore.IMetadataEditor
VB开发环境会自动为该类添加IMetadataEditor的一个属性和方法,如下面代码所示:
1、Private Property Get IMetadataEditor_Name() As String
‘设置元数据编辑器名字
IMetadataEditor_Name = "ESRI中国元数据编辑器"
End Property
该属性的Get方法将被ArcCatlog调用,得到元数据编辑器的名字,供用户对不同的元数据编辑器进行选择。
2、Private Function IMetadataEditor_Edit(ByVal props As esriCore.IPropertySet, ByVal hWnd As esriCore.OLE_HANDLE) As Boolean
‘拦截编辑事件
Set g_pPropSet = metadata ‘将全局变量g_pPropSet指向传入的元数据
simpleDialog.Show vbModal ‘显示编辑对话框
Set g_pPropSet = Nothing ‘编辑完成,释放全局变量
IMetadataEditor_Edit = g_bModified ‘返回是否已经编辑
End Function
该方法将在用户点击编辑元数据工具时被ArcCatalog调用,第一个参数的类型为IPropertySet,该参数就是用户所选择的空间数据的元数据,该参数由ArcCatlog传入,里面包含了元数据的标签和元数据的值,比如:("idinfo/citation/citeinfo/title", "北京一级道路")。将全局变量g_pPropSet指向metadata,使编辑对话框可以对元数据进行存取操作。
编辑界面显示前,用IPropertySet的GetProperty方法读取g_pPropSet中得元数据,显示在编辑界面中供用户对元数据进行修改。修改完成后,用IPropertySet的SetProperty方法保存修改到g_pPropSet。
如果用户需要添加自定义的元数据标签,那么也可以使用IPropertySet的SetProperty方法直接添加到g_pPropSet,ArcCatlog会自动将自定义的元数据保存,比如要添加输入人员的名字,那么可以直接使用g_pPropSet. SetProperty(“name”,”UserName”),将该元数据标签和值添加到IPropertySet中。
其中要注意的是,FGDC元数据标准对数据类型和关键字等类型有特别的规定,比如数据类型只能从如下类型中选择:Live Data and Maps、Downloadable Data、Offline Data、Static Map Images、Other Documents、Applications、Clearinghouses、Downloadable Data。保存到元数据distinfo/resdesc标签的值必须是上述几个数据之一。可以通过下拉框让用户对这些值进行选择,为了符合中文习惯,可以用两个数组对元数据进行替换,使界面显示中文,当用户选择数据后,通过索引找到相应的数据类型的关键字存入元数据标签。
该AcitveX DLL编写完成后,需要注册后才能被ArcCatlog调用。第一步使用regsvr32将该DLL进行注册,第二步将该类注册到注册表中相应的目录,可以使用ESRI提供的专门的工具进行注册,该工具在%ARCGISHOME%\bin\categories.exe,界面如图3所示:
图3、注册到Metadata Editor目录
运行该工具后,选中Metadata Editors目录,然后按Add Object按钮,选中编写完成的DLL就可以完成注册。移除已经注册的DLL用Remove Object按钮。
注册完成后,可以在ArcCatlog中看到多了一个元数据编辑器。选择Tools->Options,出来一个选择元数据编辑器界面,如图4所示:
图4:选择元数据编辑器
选中新添加的FGDC元数据编辑器为系统默认的元数据编辑器。点击工具栏上的元数据编辑按钮,如图5所示:
图5:编辑元数据按钮
ArcCatlog会自动调用刚才注册的DLL,显示自定义的元数据编辑器,如图6所示:
图6:自定义元数据编辑器界面
通过实现IMetadataEditor接口,可以方便地对元数据编辑器进行定制。使开发者有机会定制元数据修改界面,使元数据编辑更加符合用户的需求,并且可以添加自定义的元数据标签,保存用户自定义的元数据。
- 关于元数据
- ArcCatalog中的元数据管理
- XSL处理器
- 元数据客户化
- NAME属性
- EDIT函数