0

我的程序的目的是遍历给定目录中的每个 .mxd 文件,删除它们旧的和损坏的注记图层,并为特定的要素类添加新的注记图层。地理数据库中的旧注记源按要素类类型组合成一个注记文件。(所以不要使用 bAnno1、b​​Anno2...而是 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 文件。

4

1 回答 1

0

我找到了答案。

我有这个的地方:

IFeatureLayer newlayer = new FeatureLayerClass();

它必须是这样的:

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

不幸的是,在我做了一个深度复制预先存在的注释类并编辑源代码的解决方法后,我发现了这一点。所以还有另一种方法,如果有人对拼凑感兴趣。

于 2013-03-07T21:59:54.183 回答