Comment obtenez-vous un identifiant unique pour une couche ou générer un dans ArcMap?

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

  •  13-09-2019
  •  | 
  •  

Question

Y at-il une façon ArcObjects pour obtenir un identifiant unique pour une couche? Si vous effectuez une recherche par nom de couche il pourrait y avoir des doublons possibles.

S'il n'y a pas une propriété est-il un moyen de générer un identifiant? J'ai essayé d'utiliser la getHash () mais cela n'a pas rester cohérent.

Était-ce utile?

La solution

Il est pas joli, mais dans le passé, je l'ai joint une guid dans la description de la couche. Quelque chose comme ceci:

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

J'ai une DLL flottant autour qui claquent ces xml frags dans chaque couche d'un MXD (avec assez cr / lf devant pour faire défiler le fragment XML de la description de la couche dans ArcMap couche de dialogue Prop).

Il y a un fichier d'aide dans le fichier 7z (la documentation est rare parce que je fais d'autres choses): http://code.google.com/p/umbriel/downloads/list

Autres conseils

Il existe une interface présente ArcObjects pour obtenir un réglage ou Id pour une couche. Vous devriez regarder ILayerDescriptor: ID, http://resources.esri.com/help/9.3/ ArcGISDesktop / ArcObjects / esriCarto / ILayerDescriptor_ID.htm

Voici un extrait VBA qui montre comment il peut être utilisé:

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

J'aime l'idée d'utiliser un GUID. Cela peut ensuite être stocké dans la propriété ModelName qui est un outil pour les développeurs d'objets personnalisés à utiliser pour garantir les noms des objets indépendants du vrai nom de nom ou pseudonyme.

Il y a plus de détails et des exemples de code à http://geographika.co.uk/?p = 58

facile. Un effet secondaire de l'utilisation de COM et parce que la façon dont les vtables sont disposés, est que vous pouvez utiliser l'adresse mémoire de la couche elle-même comme votre identifiant unique. A l'intérieur de la mise en œuvre de plusieurs codes et Esri GeoDatabase Carto lui-même, cette astuce est utilisée dans tous les sens.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top