Odświeżanie otwartej tabeli atrybutów w ArcMap przy użyciu ArcPy zamiast ArcObjects?

11

Korzystam z narzędzia Calculate Field GP z arcpy w ArcMap. Gdy wartość wiersza jest aktualizowana, nie pojawia się, dopóki nie użyję narzędzia Przeładuj pamięć podręczną (Opcje tabeli> Przeładuj pamięć podręczną). Jak odświeżyć tabelę atrybutów automatycznie bez użycia ArcObjects?

Próbowałem zaktualizować zapytanie definicji, jak sugeruje @ blah238. Używając Pythona, jak „przeładować pamięć podręczną” otwartej tabeli atrybutów , ale to nie pomaga. Resetowanie źródła danych nie jest opcją, ponieważ klasa funkcji może znajdować się w sesji edycji i nie chcę utracić połączenia z danymi źródłowymi.

Alex Tereshenkov
źródło
Czy korzystasz z ArcGIS 10.1? Jeśli tak, czy używasz dodatku Python lub narzędzia skryptowego Python do uruchomienia funkcji Oblicz pole?
PolyGeo
1
Czy to naprawdę ma znaczenie? Dzwonię do narzędzia Calculate Field GP z dodatku Python, ale to samo można zaobserwować podczas uruchamiania narzędzia GP z okna Python.
Alex Tereshenkov
1
Zawsze sądzę, że jeśli spróbuję odtworzyć problem, to najbardziej prawdopodobny sposób, w jaki go zobaczę, to wykonanie dokładnie (lub tak blisko, jak to możliwe) tych samych kroków w tej samej konfiguracji, co poprzednio. widział.
PolyGeo

Odpowiedzi:

4

Wygląda na to, że osiągasz ograniczenie ArcPy, przy braku ArcObjects.

Ograniczenia ArcPy.mapping zostały szeroko opisane tutaj jako:

Arcpy.mapping nie zastępuje ArcObjects, ale raczej alternatywę dla różnych obsługiwanych scenariuszy. ArcObjects jest nadal niezbędny do tworzenia drobniejszych ziaren i dostosowywania aplikacji, podczas gdy arcpy.mapping jest przeznaczony do automatyzacji zawartości istniejących dokumentów map i plików warstw.

Jeśli inna sugestia @ blah238 dotycząca korzystania z ArcObjects z ArcPy nie jest dla Ciebie opcją, być może najlepiej jest przesłać pomysł ArcGIS, aby ta funkcjonalność została udostępniona ArcPy. Jeśli opublikujesz tutaj link do takiego pomysłu ArcGIS, chętnie zagłosuję za nim.

PolyGeo
źródło
Dzięki PolyGeo, szkoda, że ​​nie możemy znaleźć sposobu na odświeżenie tabeli atrybutów podczas obliczania wartości pól poza sesją edycji.
Alex Tereshenkov
1
Możesz przesłać prośbę o ulepszenie do pomocy technicznej ESRI. Poprosiłem o możliwość posiadania przycisku, opcji menu lub klawisza F w celu odświeżenia tabeli w celu wyświetlenia zmian bez ręcznego zamykania i otwierania. Powiedziano mi, że tabela powinna aktualizować się sama, a sprawa została zamknięta, ponieważ nie jest lokalnie odtwarzalna. Zwykle są pomocni. Mam wrażenie, że nawet nie zdają sobie sprawy z ograniczeń.
john
Zalecam wykonanie obu powyższych, ale ArcGIS Ideas pozwala znacznie łatwiej monitorować popularność i postęp wdrażania niż wsparcie lokalne.
PolyGeo
1
@ johns, czy wiesz, że nie musisz zamykać i otwierać tabeli atrybutów, aby ją odświeżyć? Obecnym sposobem na to jest kliknięcie przycisku Opcje tabeli> Przeładuj pamięć podręczną. Kolejną rzeczą, która działa, jest uruchomienie operacji Oblicz pole w trybie edycji, a następnie wartości w tabelach atrybutów są natychmiast aktualizowane.
Alex Tereshenkov
1
@Alex, dzięki za sugestię; sprawiło, że wróciłem do dalszego testowania problemu. Użyłem pamięci podręcznej przeładowania, ale nie powiodło się / nie powiedzie się, gdy dodałem wielokąty w trybie edycji w widoku układu za pomocą dodatku, aby uzyskać zasięg układu. Kiedy w widoku danych używam tego samego dodatku, pamięć podręczna przeładowania działa. To w jakiś sposób wiąże się z widokiem układu.
john
3

To może, ale nie musi być przydatne dla twojego określonego przepływu pracy. Przekonałem się, że jeśli zmienisz zaznaczenie na warstwie, tabela atrybutów również się zaktualizuje.

Więc często używam

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

Oczywiście, jeśli rzeczywiście wybrałeś coś, czego nie chcesz stracić, nie jest to dobre. W takim przypadku możesz wybrać warstwę, na której OID znajduje się na liście OID z aktualnie wybranych funkcji (w zasadzie zmień zaznaczenie na to, co jest już wybrane). Może to zająć dużo czasu, nigdy nie próbowałem tego w prawdziwym życiu.

Patrick
źródło
1

Czy próbowałeś:

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

lub

arcpy.RefreshActiveView() # Refreshes the map

lub

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

Myślę, że jeden z nich będzie działał, ale wiem, że czasami w ArcMap muszę ręcznie zamknąć tabelę atrybutów, a następnie otworzyć ją ponownie, aby zobaczyć niektóre zmiany. Nie jestem pewien, czy zamknięcie i otwarcie stołu można zrobić za pomocą ArcPy, ale to też byłaby opcja.

Cody Brown
źródło
Thansk, Cody niestety nic z tego nie działa. Ręczne zamknięcie i otwarcie tabeli atrybutów załatwia sprawę, jednak szukam czegoś, co zrobiłoby to programowo. Otwieranie i zamykanie tabeli atrybutów nie jest również dostępne w Pythonie.
Alex Tereshenkov
Żadne z nich nie zostały zaprojektowane do odświeżania tabeli atrybutów.
Radar
1

To działa:

    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()
Eddy Opperdoes
źródło