Comment obtenez-vous un identifiant unique pour une couche ou générer un dans ArcMap?
-
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.
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.