FAQ
属性値ごとにフィーチャクラスをエクスポート(分割)するツール (ArcPy, ModelBuilder)

ナレッジ番号:2632 | 登録日:2023/05/29 | 更新日:2024/03/14

概要

この FAQ では、この市区町村界データのような属性値を持つデータについて、同じ属性値を持つフィーチャを 1 つの固まりとして別のフィーチャクラスへ出力するサンプル プログラムをご紹介します。

例えば下図のように日本全域の市区町村界データを持っていたとします。
このツールを使用すると、各フィーチャの属性フィールド [KEN] には都道府県名が属性値として格納されていますが、この属性値ごとにフィーチャクラスを分割することができます。

10.5 以降のバージョンをお使いの場合は、ArcToolbox → [解析ツール] → [抽出] → [属性条件でスプリット] ツールをお使いください。 ※10.5 では、Advanced ライセンスのみ実行可能です。

Image

Image

入力パラメータ

  • [入力フィーチャレイヤ] : 入力フィーチャクラス(またはフィーチャレイヤ)
  • [フィールド] : 分割に使用するフィールド
  • [出力ワークスペース] : 出力するワークスペース
  • [マップに追加](オプション) : 現在開いているマップに出力データを追加する場合はチェックを入れます。

※ ModelBuilder 版に、[マップに追加] パラメータはありません。

内容

[入力フィーチャクラス] に設定したフィーチャクラス(またはフィーチャレイヤ)を [フィールド] に設定したフィールド内の属性値を利用して、[出力ワークスペース] へ分割して出力します。出力データの名前は、[フィールド] に設定したフィールド内の属性値がそのまま出力名となります。Python スクリプト版では、[マップに追加] にチェックを入れることで、現在開いているマップのアクティブなデータ フレームに出力結果を追加できます。このパラメータは 、ArcMap 上でツールを実行した場合のみ有効です。

使用手順

  1. Python スクリプト版、ModelBuilder 版のどちらかの zip ファイルをダウンロードし、任意のフォルダに解凍します。
  2. ArcMap を起動し、データを追加します。
  3. [カタログ] ウィンドウで解凍により作成されたフォルダを展開します。
  4. フォルダ内の「SplitFCTool」(SplitFCModel)ツールボックスを展開し、[フィーチャクラスの分割] ツールをダブルクリックします。
  5. パラメータを入力し、ツールを実行します。

制限事項

  • 入力フィーチャクラスには、シェープファイル、またはファイル ジオデータベースのフィーチャクラス、フィーチャレイヤのみ指定可能となっています。
  • 出力ワークスペースには、フォルダ、またはファイル ジオデータベースのみ指定可能となっています。
  • 出力データ名は、属性値が使用されます。そのため、属性値にデータ名として使用できない特殊文字(ハイフンや#など)が含まれている場合、エラーとなります。

ダウンロード

Python スクリプト版は、ご利用のバージョンによって動作しないという報告があります。できればModel Builder 版をお使いいただくことをお勧めします。

Python スクリプト版

フィーチャクラスの分割_ツール

※ ans4462_Tool.zip という名前の zip ファイルがダウンロードされます。

ModelBuilder 版

フィーチャクラスの分割_モデル

※ ans4462_Model.zip という名前の zip ファイルがダウンロードされます。

Python ソース コード

# coding:cp932
# Purpose : 属性値ごとにフィーチャクラスを分割
#
# Author : ESRIジャパン

# ArcPy サイトパッケージ,os モジュールのインポート
import arcpy,os

arcpy.env.overwriteOutput = 1

# 変数へ代入
input = arcpy.GetParameterAsText(0)
field = arcpy.GetParameterAsText(1)
outputws = arcpy.GetParameterAsText(2)
AddMap = arcpy.GetParameterAsText(3)

desc = arcpy.Describe(outputws)

# arcpy.SearchCursor 関数を使用して、分割するデータの Cursor を取得します。
rows = arcpy.SearchCursor(input)
row = rows.next()

# 空の辞書型オブジェクトを作成します。
dic = {}

# Cursor 内の各 row オブジェクト(レコード)に While 文内のコードを実行します。
while row:
  dic[row.getValue(field)] = "a"
  row = rows.next()

# オブジェクトを削除し、データへの参照を解放します。
del row,rows
i = 0

# 辞書型の keys 関数でオブジェクトが持つキーをリスト型で取得できるのを利用し、
# リスト内の属性値を使って、[選択] ツールを実行します。
for fc in dic.keys():
  if desc.workspaceType == "FileSystem":
    output = outputws + os.sep + fc + ".shp"
  elif desc.workspaceType == "LocalDatabase":
    output = outputws + os.sep + fc
  exp = '\"' + field + '\"' + "=\'" + fc + "\'"
  out = arcpy.Select_analysis(input,output,exp)
  arcpy.AddMessage(fc)
  i += 1
  # 作成したデータをマップに追加します。
  if AddMap == "true":
    mxd = arcpy.mapping.MapDocument("CURRENT")
    df = arcpy.mapping.ListDataFrames(mxd,mxd.activeView)[0]
    arcpy.MakeFeatureLayer_management(out.getOutput(0),fc)
    lyr = arcpy.mapping.Layer(fc)
    arcpy.mapping.AddLayer(df,lyr)

    # 描画の更新を行います。
    arcpy.RefreshActiveView()
    arcpy.RefreshTOC()
    del mxd,lyr
# ツールの終了を表示します。
arcpy.AddMessage(outputws + u" に " + str(i) + u" フィーチャクラスの出力が完了しました。")
del desc,outputws

こちらのサンプルはあくまでもコーディングの見本であり、ツール実行時に発生したエラーの対処方法につきましては、サポート対象外とさせていただきます。また、操作方法やソースコードに関するご質問は別途有償の開発者サポート契約にてご対応させていただきます。新規バージョンに対応したツールを継続的に提供することを保証するものでもないことも予めご承知おきください。なお、ツールを利用して生じたいかなる損害についても弊社では責任を負いかねます。

メタデータ

種類

製品

バージョン