arcobjects中是否有办法获取图层的唯一ID?如果按层名进行搜索,则可能存在重复项。
如果没有属性,是否有办法生成ID? 我尝试使用GetHash(),但没有保持一致。
答案 0 :(得分:2)
存在用于设置或获取图层ID的ArcObjects界面。 你应该看一下ILayerDescriptor:ID, http://resources.esri.com/help/9.3/ArcGISDesktop/ArcObjects/esriCarto/ILayerDescriptor_ID.htm
这是一个VBA代码段,展示了如何使用它:
Public Sub layerInfo()
Dim app As IApplication '
Set app = Application
Dim mxDoc As IMxDocument
Set mxDoc = app.Document
Dim myMap As IMap
Set myMap = mxDoc.ActiveView
Dim mapServer As IMxdServer
Set mapServer = New MxdServer
'''Point to your .mxd...
mapServer.Start ("D:\Test.mxd")
Dim myArray As IArray
Set myArray = mapServer.LayerDescriptors(myMap.Name)
MsgBox myArray.Count
Dim x As ILayerDescriptor
Dim intX As Integer
intX = 0
For intX = 0 To myArray.Count - 1
Set x = myArray.Element(intX)
MsgBox x.ID
MsgBox x.Name
Next
End Sub
答案 1 :(得分:1)
它不漂亮,但在过去我在图层描述中添加了一个guid。像这样:
<LAYER guid='a9843c88-3caa-4953-ad96-ca9990b410e9' revision='1' />
我有一个浮动的DLL会将这些xml碎片猛烈地撞到MXD的每一层(前面有足够的cr / lf来将xml碎片滚出ArcMap Layer Prop对话框中的图层描述)。
7z文件中有一个帮助文件(文档稀疏,因为我正在做其他事情): http://code.google.com/p/umbriel/downloads/list
答案 2 :(得分:1)
我喜欢使用GUID的想法。然后可以将其存储在ModelName属性中,该属性是自定义对象的开发人员用来保证对象名称独立于真实名称或别名的工具。
有更多详情和示例代码答案 3 :(得分:0)
易。使用COM的副作用以及vtable的布局方式是,您可以使用图层本身的内存地址作为唯一标识符。在许多ESRI GeoDatabase和Carto代码本身的实现中,这个技巧正在各地使用。