2013-03-06 7 views
0

내 프로그램의 목적은 주어진 디렉토리의 모든 .mxd 파일을 검토하고 이전 및 손상된 주석 레이어를 삭제 한 다음 특정 피쳐 클래스에 대해 새로운 주석 레이어를 추가하는 것입니다. 지오 데이터베이스의 이전 주석 소스는 피쳐 클래스 유형별로 하나의 주석 파일로 결합됩니다. (따라서 bAnno1, bAnno2 ... 대신 bAnnos가 될 것입니다. 공간을 절약하고 ArcGIS 편집 시간을 줄입니다.)기존 주석 레이어 추가

제 문제는 새로운 주석 레이어를 만드는 것입니다. 내 원래 코드는 (처음 다섯 개 개의 변수를 한 번만 외부 루프를 생성)이 라인을 따라했다 :

추가 된 레이어
IMapDocument mapdoc = new MapDocumentClass(); 
IWorkspaceFactory iwf = new FileGDBWorkspaceFactoryClass(); 
IFeatureWorkspace workspace = (IFeatureWorkspace)iwf.OpenFromFile(path, 0); 
IFeatureDataset dataset = workspace.OpenFeatureDataset(datasetName); 
IFeatureClassContainer container = (IFeatureClassContainer)dataset; 

// Here is where it enters the loop for .mxd files 

IMap pMap = mapdoc.get_Map(0); 

// Here it removes old annotation layers first 

IFeatureLayer newlayer = new FeatureLayerClass(); 
newlayer.DataSourceType = "File Geodatabase Feature Class"; 
newlayer.Name = "Anno Name"; 
newlayer.FeatureClass = container.get_ClassByName(annoName); 
pMap.AddLayer((ILayer)newlayer); 

이 심볼로지를 제외한 모든 원래 주석 층을 일치합니다. 다시 말해 ArcGIS는 이러한 추가 된 파일을 단어가있는 Annotation Class 대신 Feature Class of Polygons로 간주합니다. 내 코드를 보면 이유를 알 수 있습니다.

어떻게 주석 레이어를 독점적으로 만들 수 있습니까? 또는 지오 데이터베이스의 데이터 세트에서 기존 소스를 사용하여 주석 레이어를 만들려면 어떻게해야합니까?

실패한 시도를 사용하여 다음과 같습니다

AnnotationFeatureClass tempLayer = new AnnotationFeatureClass(); 
IAnnoClass newlayer = (IAnnoClass)tempLayer; 

및 위의 방법의

IAnnotationLayerFactory annofactory = new FDOGraphicsLayerFactoryClass(); 
IAnnotationLayer annoLayer = annofactory.CreateAnnotationLayer(...); 

실제로 해답이 될 수있다; 나는 일을 잘못하고있을 수 있습니다.

추가 세부 사항 : 사용는 ArcGIS 10, .mxd는 ArcGIS 9.3에서 만든 파일과 10

답변

0

작업은 내가 답을 발견했다. 나는이 있었다

가 :

IFeatureLayer newlayer = new FeatureLayerClass(); 

그것은이 일 필요가 : 나는 깊은 복사의 해결 방법을 만든 후 나는이 발견, 불행히도

ILayer nlayer = (ILayer)(new FDOGraphicsLayer()); 
IFeatureLayer newlayer = (IFeatureLayer)nlayer; 

을 기존 주석 클래스와 소스를 편집합니다. 그래서 누군가가 kludging에 관심이 있다면 또 다른 방법이 있습니다.