Làm mới bảng thuộc tính mở trong ArcMap bằng ArcPy thay vì ArcObjects?


11

Tôi đang chạy công cụ Tính toán trường GP từ Arcpy trong ArcMap. Khi một giá trị hàng được cập nhật, nó sẽ không hiển thị cho đến khi tôi sử dụng công cụ Tải lại bộ đệm (Tùy chọn bảng> Tải lại bộ đệm). Làm cách nào để tự động làm mới bảng thuộc tính mà không cần sử dụng ArcObjects?

Tôi đã thử cập nhật truy vấn định nghĩa như @ blah238 đã đề xuất Sử dụng python, làm thế nào để bạn "tải lại bộ đệm" một Bảng thuộc tính đã mở , nhưng điều này không giúp ích gì. Đặt lại nguồn dữ liệu không phải là một tùy chọn vì lớp tính năng có thể nằm trong phiên chỉnh sửa và tôi không muốn mất kết nối với dữ liệu nguồn.


Bạn đang sử dụng ArcGIS 10.1? Nếu vậy bạn có đang sử dụng bổ trợ Python hoặc công cụ tập lệnh Python để chạy Trường tính toán không?
PolyGeo

1
Thật sự nó có ảnh hưởng sao? Tôi đang gọi công cụ Tính toán Trường GP từ Bổ trợ Python, nhưng điều tương tự được quan sát thấy khi chạy công cụ GP từ cửa sổ Python.
Alex Tereshenkov

1
Tôi luôn nghĩ rằng nếu tôi sẽ cố gắng tái tạo một vấn đề, thì cách có khả năng nhất tôi sẽ thấy đó là nếu tôi thực hiện chính xác (hoặc gần nhất có thể) các bước tương tự trong cùng một cấu hình như đã từng Đã từng nhìn thấy trước đây.
PolyGeo

Câu trả lời:


4

Bạn dường như đang đạt được một giới hạn của ArcPy, trong trường hợp không có ArcObjects.

Các hạn chế của ArcPy.micking đã được mô tả rộng rãi ở đây là:

Arcpy.micking không phải là sự thay thế cho ArcObjects mà là một sự thay thế cho các kịch bản khác nhau mà nó hỗ trợ. ArcObjects vẫn cần thiết cho việc phát triển ứng dụng và tùy biến ứng dụng tốt hơn, trong khi arcpy.micking dành cho tự động hóa nội dung của các tài liệu bản đồ và tệp lớp hiện có.

Nếu đề xuất khác của @ blah238 về việc sử dụng ArcObjects từ ArcPy không phải là một lựa chọn cho bạn, thì tốt nhất bạn nên gửi Ý tưởng ArcGIS để chức năng này được hiển thị với ArcPy. Nếu bạn đăng một liên kết đến một ý tưởng ArcGIS như vậy ở đây thì tôi sẽ rất vui khi bỏ phiếu cho nó.


Cảm ơn PolyGeo, đáng tiếc chúng tôi không thể tìm cách làm mới bảng thuộc tính khi tính toán các giá trị trường bên ngoài phiên chỉnh sửa.
Alex Tereshenkov

1
Bạn có thể gửi yêu cầu nâng cao tới bộ phận hỗ trợ công nghệ ESRI. Tôi yêu cầu khả năng chỉ có một nút, tùy chọn menu hoặc phím F để làm mới bảng để hiển thị các thay đổi mà không cần đóng và mở thủ công. Tôi đã nói với bảng nên tự cập nhật và vấn đề đã được đóng lại vì không thể tái tạo cục bộ. Thông thường chúng rất hữu ích. Tôi có ấn tượng rằng họ thậm chí không nhận thức được những hạn chế.
johns

Tôi khuyên bạn nên thực hiện cả hai điều trên nhưng ArcGIS Ideas cho phép bạn theo dõi tiến trình phổ biến và triển khai dễ dàng hơn nhiều so với hỗ trợ tại địa phương.
PolyGeo

1
@johns, bạn có biết rằng bạn không phải đóng và mở bảng thuộc tính để làm mới nó không? Cách hiện tại để thực hiện việc này là nhấp vào nút Tùy chọn bảng> Tải lại bộ đệm. Một điều nữa hoạt động là chạy hoạt động Tính toán trường trong chế độ chỉnh sửa, sau đó các giá trị trong bảng thuộc tính được cập nhật ngay lập tức.
Alex Tereshenkov

1
@Alex, cảm ơn vì lời đề nghị; nó làm tôi quay lại để kiểm tra vấn đề hơn nữa. Tôi đã sử dụng bộ đệm tải lại nhưng nó không thành công / thất bại khi tôi đã thêm đa giác trong chế độ chỉnh sửa trong chế độ xem bố cục bằng cách sử dụng một addin để có được phạm vi bố cục. Khi ở chế độ xem dữ liệu và tôi sử dụng cùng một addin, thì bộ đệm tải lại hoạt động. Vì vậy, bằng cách nào đó nó liên quan đến chế độ xem bố trí.
Johns

3

Điều này có thể hoặc có thể không hữu ích cho quy trình làm việc cụ thể của bạn. Tôi đã thấy rằng nếu bạn thay đổi lựa chọn trên lớp của mình thì bảng thuộc tính cũng cập nhật.

Vì vậy tôi thường sử dụng

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

Tất nhiên nếu bạn thực sự có một cái gì đó được chọn mà bạn không muốn mất theo dõi thì điều này là không tốt. Trong trường hợp đó, bạn có thể chọn từ lớp trong đó OID nằm trong danh sách các OID từ các tính năng hiện được chọn (về cơ bản thay đổi lựa chọn thành bất kỳ thứ gì đã được chọn hiện tại). Điều này có thể mất nhiều thời gian để thực tế, tôi chưa bao giờ thử nó trong một kịch bản thực tế.


1

Bạn đã thử chưa:

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

hoặc là

arcpy.RefreshActiveView() # Refreshes the map

hoặc là

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

Tôi nghĩ rằng một trong số này sẽ hoạt động, nhưng đôi khi tôi biết trong ArcMap, tôi phải tự đóng bảng thuộc tính sau đó mở lại để xem một số chỉnh sửa. Tôi không chắc việc đóng và mở bảng có thể được thực hiện với ArcPy hay không, nhưng đó cũng sẽ là một lựa chọn.


Thansk, Cody, thật không may, không có gì của công trình này. Đóng và mở bảng thuộc tính bằng tay thực hiện thủ thuật, tuy nhiên tôi đang tìm kiếm thứ gì đó sẽ làm điều đó theo lập trình. Mở và đóng bảng thuộc tính cũng không có sẵn với Python.
Alex Tereshenkov

Không ai trong số này được thiết kế để làm mới bảng thuộc tính.
Radar

1

Những công việc này:

    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()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.