레이어의 고유 ID를 얻거나 Arcmap에서 생성하는 방법은 무엇입니까?

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

  •  13-09-2019
  •  | 
  •  

문제

레이어의 고유 ID를 얻는 방법이 arcobjects에 있습니까?레이어 이름으로 검색하면 중복될 가능성이 있습니다.

속성이 없으면 ID를 생성하는 방법이 있습니까?GetHash()를 사용해 보았지만 일관성이 유지되지 않았습니다.

도움이 되었습니까?

해결책

예쁘지는 않지만 과거에는 레이어 설명에 안내서를 추가했습니다. 이 같은:

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

이 XML 조각을 MXD의 각 층으로 슬램으로 부끄러워하는 DLL이 부착되어 있습니다 (ArcMap 레이어 소품 대화 상자에서 레이어 설명에서 XML 조각을 스크롤하기 위해 충분한 Cr/LF가 앞쪽에 충분한 Cr/LF가 있습니다).

7Z 파일에는 도움말 파일이 있습니다 (다른 일을하고 있기 때문에 문서화가 드물다).http://code.google.com/p/umbriel/downloads/list

다른 팁

레이어에 대한 ID를 설정하거나 가져 오기위한 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 사용의 부작용과 VTABLE가 배치되는 방법은 레이어 자체의 메모리 주소를 고유 식별자로 사용할 수 있다는 것입니다. 많은 Esri Geodatabase 및 Carto Code 자체의 구현 내 에서이 트릭은 모든 곳에서 사용되고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top