添加一个现有的注释层

本文关键字:注释 一个 添加 | 更新日期: 2023-09-27 18:02:47

我的程序的目的是遍历给定目录中的每个.mxd文件,删除它们的旧的和损坏的注释层,并为特定的特性类添加新的注释层。geodatabase中的旧注释源被组合到每个特性类类型的单个注释文件中。(所以不是bAnno1, bAnno2…应该是班诺斯。这节省了空间,减少了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);

添加的层在所有方面都与原始注释层匹配,除了Symbology。换句话说,ArcGIS将这些添加的文件视为多边形的特征类,而不是带有单词的注释类。看看我的代码,我就知道为什么了。

那么我如何使它成为一个专门的注释层呢?或者如何使用geodatabase中数据集中的现有源创建注释层?

失败的尝试包括:

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

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

上述方法之一实际上可能是答案;我可能做错了事情。

添加一个现有的注释层

我找到了答案。

我写这个的地方:

IFeatureLayer newlayer = new FeatureLayerClass();

它应该是这样的:

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

不幸的是,在我使用了一种变通方法——深度复制一个预先存在的注释类并编辑源代码之后,我发现了这个问题。还有另一种方法,如果有人对组合感兴趣的话