ArcGIS Desktopを使用してフィールド値に基づいてフィーチャクラスを複数のフィーチャクラスにエクスポートしますか?


回答:


44

属性で分割ツールを使用できます:

入力データセットを一意の属性で分割します

次のバージョンが利用可能です。


ArcCatalogで 10.6、Split By Attributes常に個々の生成.dbfのテーブルではなく、個々のフィーチャクラスを。ただし、ArcGIS Desktop 10.6では、同じツールが個々のシェープファイルを正しく生成します。理由はわかりませんが、フォルダーまたはジオデータベースの両方に作業ディレクトリを設定しようとすると同じ出力が得られます。
メイッカ

22

ArcGIS 10.0以降を使用している場合、非常に単純なモデルでこれを実現できます。

フィーチャイテレータを使用してモデルを作成します。ここで、グループ化フィールドは選択する属性で、インライン置換を使用して出力をフィーチャのコピーツールに送信し、一意のファイル名を確認します。モデルを以下に示します。

属性による抽出のモデル


16

ArcMap 10にアクセスできるのは9.3だけですが、これとそれほど変わらないことを期待しています。

Pythonで簡単なスクリプトを作成して、属性フィールドのさまざまな値をチェックし、それぞれに対して元のシェープファイルに対してSELECT操作を実行できます。

Pythonスクリプトに慣れていない場合は、IDLE(Python GUI)を開いて新しいファイルを作成し、以下のコードをコピーするだけです。my_shapefile、outputdir、my_attributeのコードを調整した後、動作するはずです。

# Script created to separate one shapefile in multiple ones by one specific
# attribute

# Example for a Inputfile called "my_shapefile" and a field called "my_attribute"
import arcgisscripting

# Starts Geoprocessing
gp = arcgisscripting.create(9.3)
gp.OverWriteOutput = 1

#Set Input Output variables
inputFile = u"C:\\GISTemp\\My_Shapefile.shp" #<-- CHANGE
outDir = u"C:\\GISTemp\\" #<-- CHANGE

# Reads My_shapefile for different values in the attribute
rows = gp.searchcursor(inputFile)
row = rows.next()
attribute_types = set([])

while row:
    attribute_types.add(row.my_attribute) #<-- CHANGE my_attribute to the name of your attribute
    row = rows.next()

# Output a Shapefile for each different attribute
for each_attribute in attribute_types:
    outSHP = outDir + each_attribute + u".shp"
    print outSHP
    gp.Select_analysis (inputFile, outSHP, "\"my_attribute\" = '" + each_attribute + "'") #<-- CHANGE my_attribute to the name of your attribute

del rows, row, attribute_types, gp

#END

13

ArcMap 10用に更新された属性によるレイヤーの分割ツールはここに表示されましか?動作しない場合は、ニーズに応じて分割(分析)を使用できます。

入力フィーチャを分割すると、複数の出力フィーチャクラスのサブセットが作成されます。スプリットフィールドの一意の値は、出力フィーチャクラスの名前を形成します。これらはターゲットワークスペースに保存されます。

スプリット

サンプルコード:

import arcpy
arcpy.env.workspace = "c:/data"
arcpy.Split_analysis("Habitat_Analysis.gdb/vegtype", "climate.shp", "Zone",
                     "C:/output/Output.gdb", "1 Meters")

組み込みの分割ツールは、分割するポリゴンと同じサイズの範囲長方形を作成する場合、目的に最適です。
ccn

質問を誤解していない限り、「場所で分割」ではなく「属性で分割」を求めていると思います。分割(分析)は、「場所による分割」機能を提供します。ここの@ccnによるコメントは、この回答の「説明」として編集できる興味深い回避策を提供します。
PolyGeo

質問がSplit By Attribute機能性について説明しているのではないかと心配していますSplit [By Geometry]
PolyGeo

リンクが壊れています
PolyGeo

9

私が使用AlexandreNetoのスクリプト@のArcGIS 10.xののためにそれを更新ユーザー。主に、「arcgisscripting」ではなく「arcpy」をインポートする必要があります。

# Script created to separate one shapefile in multiple ones by one specific
# attribute

# Example for a Inputfile called "my_shapefile" and a field called "my_attribute"
import arcpy

#Set Input Output variables
inputFile = u"D:\DXF-Export\my_shapefile.shp" #<-- CHANGE
outDir = u"D:\DXF-Export\\" #<-- CHANGE

# Reads My_shapefile for different values in the attribute
rows = arcpy.SearchCursor(inputFile)
row = rows.next()
attribute_types = set([])

while row:
    attribute_types.add(row.my_attribute) #<-- CHANGE my_attribute to the name of your attribute
    row = rows.next()

# Output a Shapefile for each different attribute
for each_attribute in attribute_types:
    outSHP = outDir + each_attribute + u".shp"
    print outSHP
    arcpy.Select_analysis (inputFile, outSHP, "\"my_attribute\" = '" + each_attribute + "'")     #<-- CHANGE my_attribute to the name of your attribute

del rows, row, attribute_types

#END

6

これは、これを行うためのさらに簡単な方法です...そして、GDBに出力します。

http://www.umesc.usgs.gov/management/dss/split_by_attribute_tool.html

USGSからツールをダウンロードし、私が1時間試行していたことを行うのに3分かかりました。


リンクありがとうございます!チャームのように動作します(バージョン10.2でも!)
WolverineTime

最近このツールを試しましたが、実行しても何も起こりませんでした。機能を選択し、機能を選択するフィールドを選択し、出力場所を選択し、[OK]を押しても何も起こりませんでした。ただ「行かない」...何かが足りないのですか?ありがとう!
rachel.passer

6

モデルビルダーでイテレータを使用できることは知っていますが、ここでpythonを使用したい場合は私が思いついたものです。入力shpfile、フィールド(複数値、入力から取得)、およびワークスペースの順にパラメーターを指定して、スクリプトをツールボックスに追加します。このスクリプトは、選択したフィールドに基づいてシェープファイルを複数のシェープファイルに分割し、選択したフォルダーに出力します。

import arcpy, re

arcpy.env.overwriteOutput = True

Input = arcpy.GetParameterAsText(0)  
Flds = "%s" % (arcpy.GetParameterAsText(1)) 
OutWorkspace = arcpy.GetParameterAsText(2) 


myre = re.compile(";")
FldsSplit = myre.split(Flds)

sort = "%s A" % (FldsSplit[0])
rows = arcpy.SearchCursor(Input, "", "", Flds, sort)

for row in rows:
    var = []
    for r in range(len(FldsSplit)):
        var.append(row.getValue(FldsSplit[r]))
    Query = ''
    Name = ''
    for x in range(len(var)):
        if x == 0:
            fildz = FldsSplit[x]
            Name = var[x] + "_"
            Query += (""" "%s" = '%s'""" % (fildz, var[x]))
        if x > 0:
            fildz = FldsSplit[x]
            Name += var[x] + "_"
            Query += (""" AND "%s" = '%s' """ % (fildz, var[x]))
    OutputShp = OutWorkspace + r"\%s.shp" % (Name)
    arcpy.Select_analysis(Input, OutputShp, Query)

4

最終的にSearchCursorとSelect_analysisで動作するようになりました

arcpy.env.workspace = strInPath
# create a set to hold the attributes
attributes=set([])
# ---- create a list of feature classes in the current workspace ----
listOfFeatures = arcpy.SearchCursor(strInPath,"","",strFieldName,"")
for row in listOfFeatures:
    attributes.add(row.getValue(strFieldName))
    count=1
try:
    for row in attributes:
        stroOutputClass = strBaseName + "_" +str(count)# (str(row.getValue(strFieldName))).replace('/','_')
        strOutputFeatureClass = os.path.join(strOutGDBPath, stroOutputClass)
        arcpy.Select_analysis(strInPath,strOutputFeatureClass,strQueryExp)#"["+strFieldName+"]"+"='"+row+"'")
        count=count+1
    del attributes
except:
    arcpy.AddMessage('Error found')

3

ModelBuilderの[フィーチャ選択の反復]ツールには慣れていませんが、Pythonコードがarcpyを使用して呼び出すことができることを示しているため、それをエクスポートしています。

    # Created on: 2015-05-19 15:26:10.00000
#   (generated by ArcGIS/ModelBuilder)
# Description: 
# ---------------------------------------------------------------------------

# Import arcpy module
import arcpy

# Load required toolboxes
arcpy.ImportToolbox("Model Functions")


# Local variables:
Selected_Features = ""
Value = "1"

# Process: Iterate Feature Selection
arcpy.IterateFeatureSelection_mb("", "", "false")

3

検索カーソルを使用して、フィーチャクラス内の個々のフィーチャをループし、ジオメトリのみを一意のフィーチャクラスに書き込むことができます。この例では、米国のフィーチャクラスを使用して、状態を新しいシェープファイルにエクスポートします。

import arcpy

# This is a path to an ESRI FC of the USA
states = r'C:\Program Files (x86)\ArcGIS\Desktop10.2\TemplateData\TemplateData.gdb\USA\states'
out_path = r'C:\temp'

with arcpy.da.SearchCursor(states, ["STATE_NAME", "SHAPE@"]) as cursor:
    for row in cursor:
        out_name = str(row[0]) # Define the output shapefile name (e.g. "Hawaii")
        arcpy.FeatureClassToFeatureClass_conversion(row[1], out_path, out_name)

この答えの欠点は、属性を持ち越さないことです。私はgis.stackexchange.com/a/152165/115のような答えを好みます。
PolyGeo

ただし、@ PolyGeoの良い点は、これもcursor操作が必要な他のワークフローにラップできることです。
アーロン

...しかし、FeatureClassToFeatureClassの代わりにSelect_analysisを使用することもできます-変更されるのは1行のコードだけです。
PolyGeo


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.