Оновлення відкритої таблиці атрибутів у ArcMap, використовуючи ArcPy, а не ArcObjects?


11

Я запускаю інструмент «Обчислити поле GP» від arcpy в ArcMap. Коли значення рядка оновлюється, воно не з’являється доти, коли я використовую інструмент «Перезавантажити кеш» (Параметри таблиці> Перезавантажити кеш). Як автоматично оновити таблицю атрибутів без використання ArcObjects?

Я спробував оновити запит на визначення, як @ blah238 запропонував Використовуючи python, як ви "перезавантажуєте кеш" відкритої таблиці атрибутів , але це не допомагає. Скидання джерела даних не є можливим, оскільки клас функції може бути в сеансі редагування, і я не хочу втрачати з'єднання з вихідними даними.


Ви використовуєте ArcGIS 10.1? Якщо так, ви використовуєте надбудову Python або інструмент сценарію Python для запуску обчислення поля?
PolyGeo

1
Це насправді має значення? Я закликаю інструмент «Обчислити поле GP» з надбудови Python, але те саме спостерігається під час запуску інструмента GP у вікні Python.
Олексій Терешенков

1
Я завжди вважаю, що якщо я збираюся спробувати відтворити проблему, то найімовірніший спосіб я це побачу, якщо я виконаю точно (або настільки близько, наскільки я можу дістатись) ті ж кроки в тій же конфігурації, що і раніше бачили раніше.
PolyGeo

Відповіді:


4

Ви, здається, стикаєтесь з обмеженням ArcPy, за відсутності ArcObjects.

Обмеження ArcPy.mapping були широко описані тут , як:

Arcpy.mapping - це не заміна для ArcObjects, а скоріше альтернатива різним сценаріям, які він підтримує. ArcObjects як і раніше необхідний для розробки більш дрібного зерна та налаштування додатків, тоді як arcpy.mapping призначений для автоматизації вмісту існуючих картографічних документів та файлів шарів.

Якщо інша пропозиція @ blah238 щодо використання ArcObjects від ArcPy не є для вас варіантом, то вам, можливо, найкраще подати ідею ArcGIS, щоб ця функціональність піддавалася ArcPy. Якщо ви опублікуєте посилання на таку ідею ArcGIS тут, я буду радий проголосувати за неї.


Дякую PolyGeo, шкода, що ми не можемо знайти спосіб оновити таблицю атрибутів при обчисленні значень поля поза сеансом редагування.
Олексій Терешенков

1
Ви можете надіслати запит на покращення технічній підтримці ESRI. Я попросив можливість просто мати кнопку, параметр меню або клавішу F, щоб оновити таблицю, щоб відображати зміни без закриття та відкриття вручну. Мені сказали, що таблиця повинна оновлюватись самостійно, і питання було закрито, оскільки воно не відтворювалось на місці. Зазвичай вони корисні. У мене склалося враження, що вони навіть не знають про обмеження.
Джона

Я рекомендую виконувати обидва вищесказані, але ідеї ArcGIS дозволяють стежити за популярністю та прогресом впровадження набагато легше, ніж місцева підтримка тут.
PolyGeo

1
@johns, чи знаєте ви, що вам не потрібно закривати та відкривати таблицю атрибутів, щоб оновити її? Поточний спосіб зробити це - натиснути кнопку Параметри таблиці> Перезавантажити кеш. Інша справа, що працює - це запустити операцію «Обчислити поле» в режимі редагування, після чого значення в таблицях атрибутів оновлюються негайно.
Олексій Терешенков

1
@ Алекс, дякую за пропозицію; це змусило мене знову перевірити проблему. Я використав кеш перезавантаження, але він не вдався / вийшов з ладу, коли я додав полігони в режимі редагування у перегляді макета, використовуючи додаток, щоб отримати розмір макета. Коли в режимі перегляду даних я використовую той самий аддін, кеш перезавантаження працює. Тож якимось чином передбачає подання макета.
Джона

3

Це може бути або не корисно для вашого конкретного робочого процесу. Я виявив, що якщо ви змінюєте виділення на своєму шарі, то таблиця атрибутів також оновлюється.

Тому я часто використовую

arcpy.SelectLayerByAttribute_management("MY-LAYER","CLEAR_SELECTION")

Звичайно, якщо у вас насправді є щось вибране, що ви не хочете втрачати, то це не корисно. У такому випадку ви можете вибрати з шару, де OID знаходиться в списку OID, з нині вибраних функцій (в основному змінити виділення на те, що вже вибрано). Це може зайняти довго, щоб це практично не було, я ніколи цього не пробував у реальному житті.


1

Ти намагався:

arcpy.RefreshCatalog(target) # Set the target to your layers data source

або

arcpy.RefreshActiveView() # Refreshes the map

або

arcpy.RefreshTOC() # I highly doubt this will do anything, but you never know

Я думаю, що одна з них спрацює, але я знаю, що іноді в ArcMap мені доводиться вручну закривати таблицю атрибутів, а потім знову відкривати її, щоб побачити деякі зміни. Я не впевнений, чи можна закрити та відкрити таблицю за допомогою ArcPy, але це також було б варіантом.


Танськ, Коді, на жаль, нічого з цього не працює. Закриття та відкриття таблиці атрибутів вручну робить трюк, проте я шукаю те, що б це зробити програмно. Таблиця атрибутів відкриття та закриття також недоступна для Python.
Олексій Терешенков

Жодне з них не призначене для оновлення таблиці атрибутів.
Радар

1

Це працює:

    import arcpy

    definition_query = layer.definitionQuery
    # Change the Definition Query into something different
    if definition_query == '':
        oid = arcpy.ListFields(dataset = layer, field_type = 'OID')[0]
        layer.definitionQuery = '{} > 0'.format(oid.name)
    else:
        layer.definitionQuery = ''
    arcpy.RefreshActiveView()

    # Restore the Definition Query
    layer.definitionQuery = definition_query
    arcpy.RefreshActiveView()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.