どのようにレイヤーの一意のIDを取得したり、ArcMapで1を生成するのですか?

StackOverflow https://stackoverflow.com/questions/1268747

  •  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プロパティの中に保存することができます。

http://geographika.co.uk/?pの詳細およびサンプルコードがあります。 = 58

簡単。 COMを使用してのvtableがレイアウトされているか理由の副作用は、あなたがあなたの一意の識別子として層自体のメモリ・アドレスを使用することができるということです。多くのESRIジオデータベースの実装とCartoのコード自体の内部では、このトリックはすべての場所で使用されてます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top