ArcObjects 대신 ArcPy를 사용하여 ArcMap에서 열린 속성 테이블을 새로 고치겠습니까?


11

ArcMap의 arcpy에서 Calculate Field GP 도구를 실행 중입니다. 행 값이 업데이트되면 캐시 다시로드 도구 (테이블 옵션> 캐시 다시로드)를 사용할 때까지 표시되지 않습니다. ArcObject를 사용하지 않고 속성 테이블을 자동으로 새로 고치는 방법은 무엇입니까?

@ blah238이 python을 사용하여 제안한대로 정의 쿼리를 업데이트하려고 시도했지만 열린 속성 테이블을 "캐시 다시로드"하는 방법은 있지만 도움이되지 않습니다. 피처 클래스가 편집 세션에 있고 소스 데이터와의 연결을 끊고 싶지 않기 때문에 데이터 소스를 재설정하는 것은 옵션이 아닙니다.


ArcGIS 10.1을 사용하고 있습니까? 그렇다면 Python Add-in 또는 Python 스크립트 도구를 사용하여 Calculate Field를 실행하고 있습니까?
PolyGeo

1
정말 문제가 되나요? Python Add-in에서 Calculate Field GP 도구를 호출하고 있지만 Python 창에서 GP 도구를 실행할 때도 마찬가지입니다.
Alex Tereshenkov

1
나는 항상 문제를 시도하고 재현하려고 할 때 가장 유사한 방법은 동일한 구성으로 동일한 단계에서 동일한 단계를 정확하게 수행하거나 가능한 한 가깝게 수행하는 것입니다. 전에 본.
PolyGeo

답변:


4

ArcObject가 없으면 ArcPy의 한계에 도달 한 것으로 보입니다.

ArcPy.mapping의 한계는 다음 과 같이 광범위하게 설명 되었습니다.

Arcpy.mapping은 ArcObject를 대체하는 것이 아니라 지원하는 다른 시나리오를위한 대안입니다. ArcObjects는 여전히 세밀한 개발 및 응용 프로그램 사용자 정의에 필요하지만 arcpy.mapping은 기존 맵 문서 및 레이어 파일의 내용을 자동화하기위한 것입니다.

@ Blah238의 ArcPy에서 ArcObjects 사용에 대한 다른 제안이 귀하에게 적합한 옵션이 아닌 경우 ArcGIS Idea 를 제출 하여이 기능을 ArcPy에 노출 시키는 것이 가장 좋습니다 . 이러한 ArcGIS 아이디어에 대한 링크를 여기에 게시하면 기꺼이 투표하겠습니다.


PolyGeo에게 감사합니다. 편집 세션 외부에서 필드 값을 계산할 때 속성 테이블을 새로 고치는 방법을 찾을 수 없습니다.
Alex Tereshenkov

1
ESRI 기술 지원에 개선 요청을 제출할 수 있습니다. 버튼을 수동으로 닫거나 열지 않고 변경 사항을 표시하기 위해 버튼, 메뉴 옵션 또는 F 키를 사용하여 테이블을 새로 고치는 기능을 요청했습니다. 나는 테이블을 자체적으로 업데이트해야한다고 들었고 문제는 로컬에서 재현 할 수없는 것으로 닫혔습니다. 일반적으로 도움이됩니다. 나는 그들이 한계를 모르고 있다는 인상을 받았습니다.
johns

위의 두 가지를 모두 수행하는 것이 좋지만 ArcGIS Ideas를 사용하면 현지 지원보다 인기 및 구현 진행 상황을 훨씬 쉽게 모니터링 할 수 있습니다.
PolyGeo

1
@ johns, 속성 테이블을 닫고 열지 않아도 새로 고칠 필요가 없다는 것을 알고 있습니까? 이를 수행하는 현재 방법은 테이블 옵션 단추> 캐시 다시로드를 클릭하는 것입니다. 작동하는 또 다른 방법은 편집 모드에서 필드 계산 작업을 실행 한 다음 속성 테이블의 값이 즉시 업데이트됩니다.
Alex Tereshenkov

1
@Alex, 제안 해 주셔서 감사합니다. 다시 문제를 테스트하기 위해 다시 돌아 왔습니다. 다시로드 캐시를 사용했지만 레이아웃 범위를 얻기 위해 addin을 사용하여 레이아웃보기에서 편집 모드로 다각형을 추가하면 실패 / 실패합니다. 데이터보기에서 동일한 애드 인을 사용하면 다시로드 캐시가 작동합니다. 그래서 어떻게 든 레이아웃보기가 필요합니다.
johns

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로 테이블을 닫고 열 수 있는지 확실하지 않지만 옵션이기도합니다.


Thansk, Cody, 불행히도이 중 아무것도 작동하지 않습니다. 속성 테이블을 닫고 수동으로 열면 트릭이 수행되지만 프로그래밍 방식으로 수행 할 수있는 작업을 찾고 있습니다. 파이썬에서도 속성 테이블 열기 및 닫기를 사용할 수 없습니다.
Alex Tereshenkov

이들 중 어느 것도 속성 테이블을 새로 고치도록 설계되지 않았습니다.
레이더

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()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.