내 프로그램의 목적은 주어진 디렉토리의 모든 .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