どのようにレイヤーの一意のIDを取得したり、ArcMapで1を生成するのですか?
-
13-09-2019 - |
質問
層の一意のIDを取得するためのArcObjectsでの方法はありますか?あなたはレイヤー名で検索を行う場合は重複の可能性があるかもしれません。
プロパティは、IDを生成するための方法が存在しているではありませんか? 私はGETHASH()を使用してみましたが、それは一貫滞在しませんでした。
解決
これはかなりありませんが、過去に、私は層の説明にGUIDを追加しました。このような何かます:
<LAYER guid='a9843c88-3caa-4953-ad96-ca9990b410e9' revision='1' />
私は(ArcMapのレイヤプロップダイアログの層の記述のうち、XMLフラグメントをスクロールする前に十分なCR / LFで)MXDの各レイヤにこれらのxml fragsスラムだろうと周りの浮動DLLを持っています。
ヘルプファイルには、(私は他のことをやっているので、ドキュメントはまばらである)7Zファイルにあります。 http://code.google.com/p/umbriel/downloads/list
他のヒント
層のための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を使用してのアイデアが好きです。これはその後、本当の名前またはエイリアス名の独立したオブジェクトの名前を保証するために使用するカスタムオブジェクトの開発者のためのツールがあるのModelNameプロパティの中に保存することができます。の
簡単。 COMを使用してのvtableがレイアウトされているか理由の副作用は、あなたがあなたの一意の識別子として層自体のメモリ・アドレスを使用することができるということです。多くのESRIジオデータベースの実装とCartoのコード自体の内部では、このトリックはすべての場所で使用されてます。