使用arcpy处理注释层


10

我想使用arcpy访问注释层(目的是验证文本注释中的几个文本字符串)。注释指的是绘图工具注释,而不是动态标签。这些注释层位于名为“ Default”的组层下。

ESRI的文件平局注释的会谈为层本身:

地图文档中基本上有三类图层:要素图层,组图层和栅格图层。使用isFeatureLayer,isGroupLayer和isRasterLayer属性可以识别或隔离大多数图层类型,但不能识别或隔离所有图层类型。有一些特殊的图层和数据集不属于以下三类之一:注释子类,尺寸特征,网络数据集,terrain数据集,拓扑数据集等。在这些情况下,您可能需要先测试其他属性以隔离感兴趣的层,​​然后再对其进行处理。

要注意的一件事是ArcGIS如何处理绘图注释,可能有两种平均配置:

ArcGIS完全支持两种类型的注释:地理数据库和地图文档

就我而言,它是地图文档。


根据所有这些文档,看起来绘制注释仅仅是层,因此像这样的简单代码应该可以工作:

mxd = arcpy.mapping.MapDocument("some\mxdpath\here")
df = arcpy.mapping.ListDataFrames(mxd,"Layers")
lyr = arcpy.mapping.ListLayers(mxd,"current_annotation_layer",df) 

但是问题是注释似乎无法通过数据框获得(考虑到我的每个注释层都与要素层相关联,这很奇怪)。


是否有任何特定的arcpy类可以访问注释(一个类似于ArcObject SDK的IAnnotationFeature2的类)?任何解决方法?

谢谢 !


您是否通过comptypes和ArcObjects修改了地图文档注释组?有更多信息的指针吗?非常感谢!!
海伦

Answers:


3

ArcPy不会公开所有ArcObjects。据我所知,这是ArcPy中未公开的许多接口之一。仅页面布局元素在arcpy中公开:ListLayoutElements(arcpy.mapping)

如果需要执行此操作,则唯一的选择是ArcObjects。如果要使用Python,请参阅如何从Python访问ArcObjects?

否则,您可能想要查找或创建与此有关的ArcGIS Idea(我发现的唯一相关的现有想法就是这个)。


嗨,我有点期待这个答案,但是感谢您和+1的链接,这可能会有帮助。
Akheloes

@Akheloes是否通过comptypes和ArcObjects修改了地图文档注释组?
埃琳(Hélène)2015年

0

我正在添加一个响应,以防其他人偶然发现。注释可通过arcpy访问,并且可以视为图层。该代码不起作用,因为它缺少索引,而不是因为注释不可访问。这些函数每次都会返回一个列表,因此,即使您使用通配符(在本例中为“ Layers ”和“ current_annotation_layer ”),仍然需要指定索引来检索它并将其分配给对象(分别为dflyr))。

代码应为:

df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
lyr = arcpy.mapping.ListDataFrames(mxd, "current_annotation_layer", df)[0]

这是我使用arcpy访问我的注释层的示例。对于我的地图,如果注释不在我感兴趣的范围内,我希望将其移动到具有20%透明度的蒙版下。

my_annotation_lyr = arcpy.mapping.Layer("Long_ProjectsAnno")
reference_lyr = arcpy.mapping.Layer("counties_mask")
arcpy.mapping.MoveLayer(df, reference_lyr, my_annotation_lyr, "AFTER")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.