İçindekiler'de katman özellik sayısını göstermenin bir yolu var mı?


10

ArcGIS 10 kullanıyorum. ArcMap'in içindekiler Tablosunda (TOC), "Katman Adı" nın her katmanda toplam özellik sayısını otomatik olarak göstermesinin bir yolu var mı?

TOC'un şöyle görüneceğini düşünüyordum:

  • Yollar (27)
  • Akarsu (100)
  • Parsel (12)

Benzersiz Değer oluşturma için bu seçeneği buldum , ancak:

  1. Ben bir ArcObjects adamı değilim ve
  2. Sadece Tek Değerli renderer ile çalışmak istiyorum .

"Seçime Göre Listele" sekmesi bu özelliğe sahiptir, ancak yalnızca seçili özellikler olduğunda.


Bunu, haritanızdaki tek bir katman için (adını taşıyan) mı yoksa varsayılan olarak haritanızdaki tüm katmanlara mı uygulamak istiyorsunuz?
CHenderson

TOK'daki tüm katmanlar varsayılan olarak tercih edilir ve tercihen bir katmanın sayısı değiştiğinde (örneğin, bir özellik eklendiğinde veya silindiğinde) güncellenir.
RyanKDalton

2
Bunu muhtemelen bir düzenleme oturumunun başlangıcını / sonunu dinleyen bir Python eklentisiyle yapabilirsiniz.
Paul

1
Her katmanda GetCount çalıştıran ve her yenilemede bu basamaklı numarayı dahil etmek için her katmanın name özelliğini güncelleştiren bir Python Eklentisi (Uzantı) kullanarak ArcGIS 10.1 ve 10.2'de (10.0 değil) yapılabileceğini düşünüyorum. ArcGIS Professional'da bu seçenek OOTB'ye sahip olmak için bir ArcGIS Fikri bulursanız / gönderirseniz, buna oy verirdim.
PolyGeo

2
Ben mxd bir komut dosyası kullanarak bu yaptım, bu yüzden python penceresine kodu pop ve özellik sayısı ile her katmanın bir baskı almak için çalıştırın. @PolyGeo'nun dediği gibi, otomatik olarak gerçekleşmesini istiyorsanız (belirtildiği gibi 10.1'de) bu bir Python Eklentisine dahil edilebilir.
Cindy Jayakumar

Yanıtlar:


7

@Paul & @PolyGeo'nun önerdiği gibi, bunu bir Python Eklentisi yapmaya çalışmanın en mantıklı olduğunu düşünüyorum ve bu fikri daha sonra takip edeceğim.

Bu arada, bir MXD'de özellik tanımlı kullanıcı tanımlı katmanların TOC Adını Ekleyecek / Güncelleyecek kodu bir araya getirdim. Benim amacım için, bunu sadece komut dosyası aracında "Katmanlar" kabul eden bir çok değerli giriş yoluyla tek tek katmanları kabul edecek bir GP aracı olarak oluşturdum. Bu, yalnızca ilgili katmanların özellik sayılarını güncelleyerek birden fazla "isteğe bağlı" katmanı güncellememe olanak tanır.

Bunu otomatik olarak çalıştırmanın bir yolunu bulamadım, ancak eski MXD'lerin bazı testlerini yaparken, bu istenmeyebilir. Çok sayıda özelliğe sahip çok sayıda katmanınız varsa, bu yavaş bir işlem olabilir.

Inputbox

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 bir imleçten daha hızlı olacaktır. Sizi tam tersi sonuca iten nedir?
blah238

Küçük şekil dosyalarının ilk testim daha hızlı olduğunu gösterdi. ancak, daha büyük RDBMS katmanlarını test ettikten sonra, doğruyorsunuz, GetCount daha hızlıydı. Yukarıdaki kodu güncelledim.
RyanKDalton

Güzel küçük bir araç, bunu ESRI kod galerisinde paylaşmalısınız?
Hornbydd
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.