2009-08-12 6 views

답변

1

예쁘지 않지만 이전에는 레이어 설명에 guid를 추가했습니다. 이런 식으로 뭔가 :

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

나는에서 레이어 설명 밖으로 XML 조각을 스크롤 앞에 충분한 CR/LF로 (AN MXD의 각 계층에 이러한 XML의 frags 슬램 것이라고 주위에 떠있는 DLL있어 ArcMap Layer Prop 대화 상자).

7Z 파일의 도움말 파일 (나는 다른 일을하고 있어요 때문에 문서 스파 스)있다 : http://code.google.com/p/umbriel/downloads/list

+0

에서 자세한 내용과 예제 코드가 있습니다. ESRI가이 간단한 속성을 추가하거나 적어도 중복 된 이름을 제한한다고 생각할 것입니다. 나는했습니다 http://bit.ly/38PAK –

+1

커크 Kuykendall은 층 레이어 파일로 저장도 함께 ... ILayerExtensions과는 층으로 유지하는 propertyset을 추가하는 언급을했다 이전에는 ILayerDescriptor를 사용하지 않았습니다. 방금 코드를 시도했습니다. 여는 후에 추가되는 레이어의 ID를 제공하지 않습니다 (이전에 mxd 저장이 필요함). MXD를 시작하지 않고도 LayerDescriptors를 얻을 수있는 방법이 있습니까? –

2

가 설정하거나 레이어의 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 
+0

: 덕분에 –

+0

여기에서 같은 질문입니다. –

+0

네가 맞습니다. 이 인터페이스는 기본적으로 ArcGIS Server에서 제공되는 MXD를 의미합니다. MXD를 저장하고 읽을 때도 사용할 수 있습니다. 그러나지도 문서를 저장해야 사용할 수 있습니다. –

0

쉬운. COM 사용의 부작용과 vtable의 레이아웃 방법 때문에 레이어 자체의 메모리 주소를 고유 한 식별자로 사용할 수 있다는 점이 다릅니다. 많은 ESRI GeoDatabase 및 Carto 코드 구현 과정에서이 트릭이 계속 사용되고 있습니다.

+0

메모리 주소는 어떻게 구합니까? 또한이 주소가 mxd에서 작동하거나 저장하는 동안 변경됩니까? –

+0

언어에 따라 다릅니다. C++에서 인터페이스 * 포인터 * 자체는 포인터입니다. VB6 (또는 VBA)에서도 마찬가지입니다. 즉 : 컬렉션/사전에있는 키와 i 레이어 세트 플레이어 = pMap.Layers (0) 사용 플레이어와 같은 희미한 플레이어. 아니요, COM 개체의 수명 동안 (동일한 MxD에서 계속 작동하는 동안) 변경되지 않습니다. 그들이 저장하고 세션을 계속하면 * 동일하게 유지됩니다 ... 그러나 문서를 닫고 다시 열면 다른 것입니다. – rburhum

1

나는 GUID를 사용하는 것을 좋아합니다. 그런 다음 ModelName 속성 에 저장할 수 있습니다.이 도구는 실제 이름이나 별칭 이름과 관계없이 개체 이름을 보장하는 데 사용하는 사용자 지정 개체 개발자를위한 도구입니다.

내가 내 도구를 처음 시작할 때 모든 계층이 추가하는 루틴을 실행할 수 있습니다 추측 http://geographika.co.uk/?p=58