Как получить уникальный идентификатор слоя или создать его в Arcmap?

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

  •  13-09-2019
  •  | 
  •  

Вопрос

Есть ли способ в arcobjects получить уникальный идентификатор слоя?Если вы выполните поиск по имени слоя, возможно, найдутся дубликаты.

Если свойства нет, есть ли способ сгенерировать идентификатор?Я пробовал использовать GetHash(), но это не помогло.

Это было полезно?

Решение

Это некрасиво, но раньше я добавлял руководство в описание слоя.Что-то вроде этого:

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

У меня есть DLL, которая помещает эти фрагменты xml в каждый слой MXD (с достаточным количеством cr/lf впереди, чтобы прокрутить фрагмент xml из описания слоя в диалоговом окне свойства слоя ArcMap).

В файле 7z есть файл справки (документация скудная, потому что я занимаюсь другими делами):http://code.google.com/p/umbriel/downloads/list

Другие советы

Существует интерфейс 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 и того, как расположены виртуальные таблицы, является то, что вы можете использовать адрес памяти самого слоя в качестве уникального идентификатора.В реализации многих кодов ESRI GeoDatabase и Carto этот трюк используется повсеместно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top