レイヤーの一意のIDを取得する方法はarcobjectsにありますか?レイヤー名で検索すると、重複する可能性があります。
プロパティがない場合、IDを生成する方法はありますか?GetHash()を使用してみましたが、一貫性が保たれませんでした。
レイヤーの一意のIDを取得する方法はarcobjectsにありますか?レイヤー名で検索すると、重複する可能性があります。
プロパティがない場合、IDを生成する方法はありますか?GetHash()を使用してみましたが、一貫性が保たれませんでした。
レイヤーの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
きれいではありませんが、過去にレイヤーの説明にGUIDを追加しました。このようなもの:
<LAYER guid='a9843c88-3caa-4953-ad96-ca9990b410e9' revision='1' />
これらのxmlフラグメントをMXDの各レイヤーにスラミングするDLLが浮かんでいます(ArcMapレイヤープロップダイアログのレイヤーの説明からxmlフラグメントをスクロールするのに十分なcr / lfが前にあります)。
7zファイルにヘルプファイルがあります(他のことをしているのでドキュメントはまばらです): http ://code.google.com/p/umbriel/downloads/list
GUIDを使用するというアイデアが好きです。これは、カスタムオブジェクトの開発者が実際の名前やエイリアス名に関係なくオブジェクトの名前を保証するために使用するツールであるModelNameプロパティに保存できます。
詳細とサンプルコードはhttp://geographika.co.uk/?p=58にあります。
簡単。COMを使用することの副作用と、vtablesのレイアウト方法により、レイヤー自体のメモリアドレスを一意の識別子として使用できるようになります。多くのESRIGeoDatabaseとCartoコード自体の実装の中で、このトリックは至る所で使用されています。