Обробляйте шари анотації за допомогою arcpy


10

Я хочу отримати доступ до шарів анотацій за допомогою arcpy (мета - перевірити кілька текстових рядків у текстових анотаціях). Під анотацією я маю на увазі малювання інструментів для інструментів , а не динамічних міток. Ці шари анотацій знаходяться під шаром групи під назвою "За замовчуванням".

Документація Esri говорить про те, що малює анотацію як самі шари:

По суті, у картографічному документі є три категорії шарів: представлені шари, групові шари та растрові шари. Властивості isFeatureLayer, isGroupLayer та isRasterLayer дозволяють ідентифікувати або ізолювати більшість типів шарів, але не всі типи шарів. Існує кілька спеціалізованих шарів і наборів даних, які не належать до однієї з цих трьох категорій: підкласи анотацій, розмірні функції, мережеві набори даних, набори даних про місцевість, набори даних топології тощо. У цих випадках вам може знадобитися протестувати інші властивості, щоб виділити шар, що цікавить, перш ніж щось робити з ним.

Слід пам’ятати, як 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)? Будь-яке вирішення?

Дякую !


Чи вдалося вам змінити групу анотацій для документа на карті через comptypes та ArcObjects? Будь-які покажчики для отримання додаткової інформації? Дуже дякую!!
Hélène

Відповіді:


3

ArcPy не виставляє всіх ArcObjects. Як я можу сказати, це один з багатьох інтерфейсів, які не піддаються впливу в ArcPy. У аркпії відкриті лише елементи макета сторінки: ListLayoutElements (arcpy.mapping)

Якщо вам потрібно зробити це, ваш єдиний вибір - ArcObjects. Якщо ви хочете використовувати Python, див. Як я можу отримати доступ до ArcObjects з Python?

Інакше ви можете пошукати або створити ідею ArcGIS щодо цього (єдиною наявною у мене ідеєю, яку я знайшов, була ця ).


Привіт, я якось очікував на цю відповідь, але спасибі та +1 за посилання, це може допомогти.
Ахелої

@Akheloes Чи вдалося вам змінити групу анотацій для документа на карті за допомогою компетитів та ArcObjects?
Hélène

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")
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.