Обновить открытую таблицу атрибутов в 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 Idea, чтобы эта функция была доступна ArcPy. Если вы разместите здесь ссылку на такую ​​идею ArcGIS, я буду рад проголосовать за нее.

PolyGeo
источник
Благодаря PolyGeo, жаль, что мы не можем найти способ обновить таблицу атрибутов при вычислении значений полей вне сеанса редактирования.
Алекс Терешенков
1
Вы можете отправить запрос на улучшение в службу технической поддержки ESRI. Я запросил возможность иметь только кнопку, пункт меню или клавишу F, чтобы обновить таблицу, чтобы показать изменения без ручного закрытия и открытия. Мне сказали, что таблица должна обновляться сама по себе, и вопрос был закрыт как не воспроизводимый локально. Обычно они полезны. У меня сложилось впечатление, что они даже не знают об ограничениях.
Джон
Я рекомендую выполнить оба вышеперечисленных вопроса, но ArcGIS Ideas позволяет отслеживать популярность и прогресс внедрения гораздо проще, чем локальная поддержка здесь.
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()
Эдди Оппердоус
источник