我的程序的目的是遍历给定目录中的每个 .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 将这些添加的文件视为多边形的要素类,而不是带有单词的注记类。查看我的代码,我可以明白为什么。
那么如何让它成为一个专门的注释层呢?或者如何使用地理数据库数据集中的现有源制作注记图层?
失败的尝试包括使用:
AnnotationFeatureClass tempLayer = new AnnotationFeatureClass();
IAnnoClass newlayer = (IAnnoClass)tempLayer;
和
IAnnotationLayerFactory annofactory = new FDOGraphicsLayerFactoryClass();
IAnnotationLayer annoLayer = annofactory.CreateAnnotationLayer(...);
上述方法之一实际上可能是答案;我可能做错事了。
其他详细信息:使用 ArcGIS 10,使用由 ArcGIS 9.3 和 10 制作的 .mxd 文件。