Я хочу получить доступ к слоям аннотаций с помощью 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)? Любое решение?
Спасибо !
источник
Ответы:
ArcPy не предоставляет доступ ко всем объектам ArcObject. Из того, что я могу сказать, это один из многих интерфейсов, которые не представлены в ArcPy. В arcpy отображаются только элементы макета страницы: ListLayoutElements (arcpy.mapping)
Если вам нужно сделать это, ваш единственный выбор - ArcObjects. Если вы хотите использовать Python, см. Как получить доступ к ArcObjects из Python?
В противном случае вы можете захотеть найти или создать идею ArcGIS об этом (единственная существующая существующая идея, которую я нашел, была эта ).
источник
Я добавляю ответ на случай, если другие наткнутся на это. Аннотации доступны через arcpy и могут рассматриваться как слои. Код не работал, потому что в нем отсутствует индекс, а НЕ потому, что аннотации недоступны. Эти функции возвращают список каждый раз, поэтому даже если вы используете подстановочный знак (в данном случае « Слои » и « current_annotation_layer »), вам все равно нужно указать индекс для его извлечения и присвоить его объекту ( df & lyr соответственно ).
Код должен быть:
Вот пример, который я использовал arcpy для доступа к своему слою аннотации. Для моей карты я хотел, чтобы аннотация была перемещена ниже маски с прозрачностью 20%, если она находилась за пределами моей области интересов.
источник