Frage

Gibt es eine Möglichkeit in ArcObjects eine eindeutige ID für eine Ebene zu bekommen? Wenn Sie eine Suche nach Layer-Namen tun könnte es möglich Duplikate.

Wenn es keine Eigenschaft ist es eine Möglichkeit, eine ID zu generieren? Ich versuchte, den GetHash mit (), aber das hat nicht konsistent bleiben.

War es hilfreich?

Lösung

Es ist nicht schön, aber in der Vergangenheit habe ich eine GUID in der Schicht Beschreibung angehängt. So etwas wie folgt aus:

<LAYER guid='a9843c88-3caa-4953-ad96-ca9990b410e9' revision='1' />

Ich habe eine DLL dazu gekommen, dass Floating würde diese xml frags in jede Schicht eines MXD Slam (mit genügend cr / lf vor dem XML-Fragment blättern aus der Schicht Beschreibung in ArcMap Layer-Prop-Dialog).

Es gibt eine Hilfedatei in der 7z-Datei (Dokumentation ist spärlich, weil ich andere Dinge mache): http://code.google.com/p/umbriel/downloads/list

Andere Tipps

Es ist ein Geschenk ArcObjects-Schnittstelle zur Einstellung oder eine ID für eine Schicht zu bekommen. Sie sollten bei ILayerDescriptor aussehen: ID, http://resources.esri.com/help/9.3/ ArcGISDesktop / ArcObjects / esriCarto / ILayerDescriptor_ID.htm

Hier ist ein VBA-Snippet, das zeigt, wie es verwendet werden kann:

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

Ich mag die Idee, eine GUID zu verwenden. Dies kann dann in der Modelname-Eigenschaft gespeichert werden , die ein Werkzeug für Entwickler von benutzerdefinierten Objekten zu verwenden, um die Namen von Objekten unabhängig von dem wahren Namen oder Alias-Namen zu gewährleisten.

Es gibt mehr Details und Beispielcode unter http://geographika.co.uk/?p = 58

Einfach. Ein Nebeneffekt der Verwendung von COM und weil, wie die vtables angelegt sind, ist, dass Sie die Speicheradresse der Schicht selbst als eindeutige Kennung verwenden können. Innerhalb der Umsetzung vieler ESRI GeoDatabase und Carto Code selbst wird dieser Trick überall verwendet wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top