Có cách nào để hiển thị số tính năng lớp trong TOC không?


10

Tôi đang sử dụng ArcGIS 10. Trong mục lục (TOC) của ArcMap, có cách nào để "Tên lớp" tự động hiển thị tổng số tính năng trong mỗi lớp không?

Tôi đã nghĩ rằng TOC sẽ trông giống như thế này:

  • Đường (27)
  • Luồng (100)
  • Bưu kiện (12)

Tôi đã tìm thấy tùy chọn này cho kết xuất Giá trị duy nhất , nhưng:

  1. Tôi không phải là một anh chàng ArcObjects, và
  2. Tôi muốn làm việc chỉ với trình kết xuất Giá trị đơn .

Loại "Danh sách theo lựa chọn" có khả năng này, nhưng chỉ khi có các tính năng được chọn.


Bạn đang tìm cách làm điều này cho một lớp duy nhất trong bản đồ của bạn (mà bạn có tên của nó) hoặc mặc định nó được áp dụng cho tất cả các lớp trên bản đồ của bạn?
Người dẫn chương trình

Tất cả các lớp trong TOC, tốt hơn là theo mặc định và tốt nhất là được cập nhật khi số lượng của một lớp thay đổi (ví dụ: khi một tính năng được thêm hoặc xóa).
RyanKDalton

2
Bạn có thể có thể làm điều này với một addin Python lắng nghe để bắt đầu / kết thúc một phiên chỉnh sửa.
Paul

1
Tôi nghĩ rằng có thể thực hiện được trong ArcGIS 10.1 và 10.2 (chứ không phải 10.0) bằng cách sử dụng Bổ trợ Python (Tiện ích mở rộng) chạy GetCount trên mỗi lớp và cập nhật thuộc tính tên của từng lớp để bao gồm số được đặt trong ngoặc đó mỗi lần làm mới. Nếu bạn tìm / gửi Ý tưởng ArcGIS để có tùy chọn OOTB này trong ArcGIS Professional, tôi sẽ bỏ phiếu cho nó.
PolyGeo

2
Tôi đã thực hiện điều này bằng cách sử dụng một tập lệnh trong mxd, vì vậy tôi đưa mã vào cửa sổ python và chạy nó để có được một bản in của mỗi lớp với số lượng tính năng. Như @PolyGeo nói, điều đó có thể được tích hợp vào Bổ trợ Python nếu bạn muốn nó tự động xảy ra (tại 10.1 như đã đề cập).
Cindy Jayakumar

Câu trả lời:


7

Như @Paul & @PolyGeo đã đề xuất, tôi nghĩ việc cố gắng biến điều này thành một Bổ trợ Python có ý nghĩa nhất và tôi sẽ theo đuổi ý tưởng đó sau.

Trong thời gian chờ đợi, tôi kết hợp mã sẽ Thêm / Cập nhật Tên TOC của các lớp do người dùng xác định trong MXD với số lượng tính năng. Với mục đích của mình, tôi chỉ tạo công cụ này như một công cụ GP chấp nhận các lớp riêng lẻ thông qua đầu vào đa trị liệu chấp nhận "Lớp" trong công cụ tập lệnh. Điều đó cho phép tôi cập nhật nhiều lớp "theo yêu cầu", chỉ cần cập nhật số lượng tính năng của các lớp quan tâm đó.

Tôi chưa nghĩ ra cách nào để chạy tự động, tuy nhiên khi thực hiện một số thử nghiệm của MXD cũ, điều đó thậm chí có thể không được mong muốn. Nếu bạn có nhiều lớp với nhiều tính năng, đó có thể là một quá trình chậm.

Hộp thư đến

import arcpy

LayerInput = arcpy.GetParameterAsText(0)

mxd = arcpy.mapping.MapDocument("CURRENT")
for lyr in arcpy.mapping.ListLayers(mxd):

    #Skip over group layers, as they have no values to count
    if lyr.isGroupLayer:
        continue

    #Determine basename of the layer, without the feature count
    name = str(lyr.name)

    #Determine if the layer is in the user-defined list
    if name not in LayerInput:
        continue

    #Determine if the layer name already includes a COUNT
    if "[" in name and "]" in name:
        lpos = name.find("[")
        basename = name[:lpos-1]
    else:
        basename = name
    print "    Updating feature count in TOC name for layer: " + str(basename)
    arcpy.AddMessage("    Updating feature count in TOC name for layer: " + str(basename) )

    # In 10.1, you may be able to use arcpy.da.SearchCursor to increase the speed.
    #http://gis.stackexchange.com/questions/30140/fastest-way-to-count-the-number-of-features-in-a-feature-class
    #fcount = 0
    #cursor = arcpy.SearchCursor(lyr)
    #for row in cursor:
    #    fcount += 1
    #del cursor

    #Get the feature count
    fcount = int(arcpy.GetCount_management(lyr).getOutput(0))

    #Update the lyr.name property
    lyr.name = basename + " [n=" + str(fcount) + "]"
    del fcount

arcpy.RefreshTOC()

#Garbage collection
del mxd

GetCount sẽ nhanh hơn con trỏ. Điều gì khiến bạn rút ra kết luận ngược lại?
blah238

Thử nghiệm ban đầu của tôi về các shapefile nhỏ cho thấy nó nhanh hơn. tuy nhiên, sau khi thử nghiệm trên các lớp RDBMS lớn hơn, bạn đã đúng, GetCount đã nhanh hơn. Tôi đã cập nhật mã ở trên.
RyanKDalton

Công cụ nhỏ xinh, bạn nên chia sẻ điều đó trên thư viện mã ESRI?
Hornbydd
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.