TOCでレイヤーフィーチャの数を表示する方法はありますか?


10

ArcGIS 10を使用しています。ArcMapの目次(TOC)で、「レイヤー名」に各レイヤーのフィーチャの総数を自動的に表示させる方法はありますか?

TOCは次のようになると思っていました。

  • 道路(27)
  • ストリーム(100)
  • 小包(12)

ユニークバリューレンダリングにこのオプションを見つけましたが、

  1. 私はArcObjectsの男ではありません。
  2. 単一値レンダラーのみを操作したい。

「List By Selection」タブにはこの機能がありますが、選択された機能がある場合のみです。


これをマップ内の1つのレイヤー(名前がある)に対して行うのですか、それともデフォルトでマップ上のすべてのレイヤーに適用するのですか?
CHenderson 2013

TOC内のすべてのレイヤー。デフォルトで、できればレイヤーのカウントが変更されたときに更新されることが好ましい(たとえば、フィーチャが追加または削除されたとき)。
RyanKDalton 2013

2
おそらく、編集セッションの開始/終了をリッスンするPythonアドインでこれを行うことができます。
ポール

1
ArcGIS 10.1と10.2(10.0ではない)では、各レイヤーでGetCountを実行し、各レイヤーの名前プロパティを更新して、更新ごとに括弧で囲まれた番号を含めるPythonアドイン(10.0では不可)を使用できる可能性があると思います。ArcGIS ProfessionalでこのオプションOOTBを使用するためのArcGISアイデアを見つけて提出した場合、私はそれに投票します。
PolyGeo

2
私はmxdのスクリプトを使用してこれを実行したので、コードをpythonウィンドウにポップして実行し、機能カウントを含む各レイヤーの印刷を取得します。@PolyGeoが言うように、自動的に実行したい場合は(前述の10.1で)、Pythonアドインに組み込むことができます。
Cindy Jayakumar

回答:


7

@Paulと@PolyGeoが示唆したように、これをPythonアドインにしようとすることが最も理にかなっていると思います。その考えは後で追求します。

その間、MXD内のユーザー定義レイヤーのTOC名を機能数とともに追加/更新するコードをまとめました。私の目的のために、スクリプトツールで "レイヤー"を受け入れる複数値の入力を介して個々のレイヤーを受け入れるGPツールとしてこれを作成しました。これにより、複数のレイヤーを「オンデマンド」で更新でき、対象のレイヤーの機能数を更新するだけです。

私はこれを自動的に実行する方法を思いつきませんでしたが、古いMXDのいくつかのテストを行う際に、それは望ましくないかもしれません。多くの機能を持つ多くのレイヤーがある場合、処理が遅くなる可能性があります。

入力ボックス

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はカーソルよりも高速です。どうして反対の結論を導きましたか?
blah238 2013

小さなシェープファイルの私の最初のテストは、それがより速いことを示しました。ただし、より大きなRDBMSレイヤーでテストした後、あなたは正しいです。GetCountの方が高速でした。上記のコードを更新しました。
RyanKDalton 2013

素敵な小さなツールです。それをESRIコードギャラリーで共有してください。
Hornbydd 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.