Обрабатывать слои аннотаций с помощью arcpy

10

Я хочу получить доступ к слоям аннотаций с помощью arcpy (целью является проверка нескольких текстовых строк в текстовых аннотациях). Под аннотацией я подразумеваю аннотации инструмента рисования , а не динамические метки. Эти слои аннотаций находятся под слоем групп с именем «По умолчанию».

Документация 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 для доступа к аннотациям (сравнимый с IAnnotationFeature2 из ArcObject SDK)? Любое решение?

Спасибо !

Akheloes
источник
Удалось ли вам изменить группу аннотаций документа карты с помощью comptypes и ArcObjects? Любые указатели для получения дополнительной информации? Большое спасибо!!
Элен

Ответы:

3

ArcPy не предоставляет доступ ко всем объектам ArcObject. Из того, что я могу сказать, это один из многих интерфейсов, которые не представлены в ArcPy. В arcpy отображаются только элементы макета страницы: ListLayoutElements (arcpy.mapping)

Если вам нужно сделать это, ваш единственный выбор - ArcObjects. Если вы хотите использовать Python, см. Как получить доступ к ArcObjects из Python?

В противном случае вы можете захотеть найти или создать идею ArcGIS об этом (единственная существующая существующая идея, которую я нашел, была эта ).

blah238
источник
Привет, я ожидал такого ответа, но спасибо и +1 за ссылки, это может помочь.
Ахелес
@Akheloes Удалось ли вам изменить группу аннотаций документа карты с помощью comptypes и ArcObjects?
Элен
0

Я добавляю ответ на случай, если другие наткнутся на это. Аннотации доступны через arcpy и могут рассматриваться как слои. Код не работал, потому что в нем отсутствует индекс, а НЕ потому, что аннотации недоступны. Эти функции возвращают список каждый раз, поэтому даже если вы используете подстановочный знак (в данном случае « Слои » и « current_annotation_layer »), вам все равно нужно указать индекс для его извлечения и присвоить его объекту ( df & lyr соответственно ).

Код должен быть:

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")
Эдвард
источник