Pergunta

Existe uma maneira em ArcObjects para obter um ID único para uma camada? Se você fizer uma pesquisa por nome da camada poderia haver possíveis duplicatas.

Se não houver uma propriedade é Existe uma maneira de gerar um id? Eu tentei usar o GetHash (), mas isso não ficar consistente.

Foi útil?

Solução

Não é bonito, mas no passado eu já anexado um guid na descrição camada. Algo parecido com isto:

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

Eu tenho uma DLL por aí que iria bater esses frags XML em cada camada de um MXD (com suficiente cr / lf em frente para rolar o fragmento xml fora da descrição da camada no diálogo Prop ArcMap Layer).

Há um arquivo de ajuda no arquivo 7z (documentação é escassa, porque eu estou fazendo outras coisas): http://code.google.com/p/umbriel/downloads/list

Outras dicas

Há uma ArcObjects interface presente para definir ou obter um ID para uma camada. Você deve olhar para ILayerDescriptor: ID, http://resources.esri.com/help/9.3/ ArcGISDesktop / ArcObjects / esriCarto / ILayerDescriptor_ID.htm

Aqui está um trecho VBA que mostra como ele pode ser usado:

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

Eu gosto da idéia de usar um GUID. Este pode então ser armazenado na propriedade ModelName que é uma ferramenta para desenvolvedores de objetos personalizados para usar para garantir os nomes de objetos independentes do verdadeiro nome ou apelido nome.

Há mais detalhes e código de exemplo em http://geographika.co.uk/?p = 58

Easy. Um efeito colateral do uso COM e porque como os vtables são definidos, é que você pode usar o endereço de memória da própria camada como o seu identificador exclusivo. Dentro da implementação de muitas código ESRI GeoDatabase e Carto-se, este truque está sendo usado em todo o lugar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top