Jawaban:
Anda dapat menggunakan alat Split By Attributes:
Membagi dataset input dengan atribut unik
Ada versi yang tersedia untuk:
Anda dapat mencapai ini dengan model yang sangat sederhana jika Anda memiliki ArcGIS 10.0 atau lebih tinggi.
Buat model dengan Feature Iterator di mana grup dengan bidang adalah atribut yang ingin Anda pilih saat itu kemudian mengirim output ke alat fitur copy menggunakan substitusi inline untuk memastikan nama file yang unik. Model ditunjukkan di bawah ini:
Saya tidak memiliki akses ke ArcMap 10, hanya 9.3, tetapi saya berharap itu tidak akan jauh berbeda dari ini.
Anda bisa membuat skrip sederhana dengan Python, yang memeriksa bidang atribut Anda untuk nilai yang berbeda, dan kemudian, untuk masing-masing menjalankan operasi SELECT ke Shapefile asli Anda.
Jika Anda tidak terbiasa dengan skrip python, yang perlu Anda lakukan adalah membuka IDLE Anda (python GUI) membuat file baru, dan menyalin kode di bawah ini. Setelah mengadaptasi kode untuk my_shapefile Anda, outputdir dan my_attribute seharusnya bekerja.
# 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
Apakah Anda melihat alat Split Layer By Attributes diperbarui untuk ArcMap 10 di sini ? Jika tidak berhasil, Anda dapat menggunakan Split (Analisis) untuk kebutuhan Anda.
Memisahkan Fitur Input menciptakan subset dari beberapa kelas fitur output. Nilai unik Bidang Pisah membentuk nama-nama kelas fitur keluaran. Ini disimpan di ruang kerja target.
Kode Contoh:
import arcpy
arcpy.env.workspace = "c:/data"
arcpy.Split_analysis("Habitat_Analysis.gdb/vegtype", "climate.shp", "Zone",
"C:/output/Output.gdb", "1 Meters")
Split By Attribute
fungsionalitas dan jawaban Anda sebagian besar tentang Split [By Geometry]
.
Saya menggunakan skrip @ AlexandreNeto dan memperbaruinya untuk pengguna ArcGIS 10.x. Terutama Anda sekarang harus mengimpor "arcpy" daripada "arcgisscripting":
# 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
Ini adalah cara yang bahkan lebih mudah untuk melakukan ini ... dan hasilnya menjadi GDB.
http://www.umesc.usgs.gov/management/dss/split_by_attribute_tool.html
mengunduh alat dari USGS, butuh waktu 3 menit untuk melakukan apa yang saya coba selama 1 jam.
Saya tahu Anda dapat menggunakan iterator dalam model builder, tetapi jika Anda lebih suka menggunakan python di sini adalah sesuatu yang saya hasilkan. Tambahkan skrip ke kotak alat dengan parameter dalam urutan sebagai Input shpfile, bidang (multinilai, diperoleh dari input), dan ruang kerja. Script ini akan membagi shapefile menjadi beberapa shapefile berdasarkan bidang yang Anda pilih, dan mengeluarkannya ke folder pilihan Anda.
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)
Saya akhirnya berhasil bekerja dengan SearchCursor dan 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')
Saya tidak terbiasa dengan alat Seleksi Fitur Iterate di ModelBuilder, tetapi mengekspor hanya itu sebagai kode Python menunjukkan bahwa mereka dapat dipanggil menggunakan 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")
Anda dapat menggunakan kursor pencarian untuk mengulangi setiap fitur dalam kelas fitur dan menulis hanya geometri ke kelas fitur unik. Dalam contoh ini, saya menggunakan kelas fitur Amerika Serikat dan mengekspor negara bagian ke shapefile baru:
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)
cursor
operasi.
Anda dapat menggunakan token geometri (SHAPE @) di dalam Fitur Salin (Manajemen Data) untuk mengekspor setiap fitur.
import arcpy, os
shp = r'C:\temp\yourSHP.shp'
outws = r'C:\temp'
with arcpy.da.SearchCursor(shp, ["OBJECTID","SHAPE@"]) as cursor:
for row in cursor:
outfc = os.path.join(outws, "fc" + str(row[0]))
arcpy.CopyFeatures_management(row[1], outfc)
Di Arcpy, layer Cursors kehormatan pilihan / TableView. Menurut Mendapatkan daftar fitur yang dipilih di ArcGIS untuk Desktop menggunakan kode Python? , Anda cukup mengulangi pilihan fitur.
Namun jika Anda ingin membuat pilihan menggunakan arcpy, gunakan alat SelectLayerByAttribute_management .
Split By Attributes
konstan menghasilkan.dbf
tabel individual , bukan kelas fitur individual. Tapi, di ArcGIS Desktop 10.6, alat yang sama menghasilkan shapefile individu dengan benar . Saya tidak mengerti mengapa, dan mendapat keluaran yang sama dengan mencoba mengatur direktori kerja ke folder atau geodatabase.