Antworten:
Sie können das Werkzeug Teilen nach Attributen verwenden:
Teilt ein Eingabedataset nach eindeutigen Attributen auf
Es gibt Versionen für:
Sie können dies mit einem sehr einfachen Modell erreichen, wenn Sie ArcGIS 10.0 oder höher verwenden.
Erstellen Sie mit Feature Iterator ein Modell, bei dem das Feld Gruppieren nach das Attribut ist, das Sie auswählen möchten, und senden Sie die Ausgabe mithilfe der Inline-Ersetzung an das Tool zum Kopieren von Features, um einen eindeutigen Dateinamen sicherzustellen. Das Modell ist unten abgebildet:
Ich habe keinen Zugriff auf ArcMap 10, nur auf 9.3, aber ich gehe davon aus, dass es sich nicht wesentlich davon unterscheidet.
Sie können in Python ein einfaches Skript erstellen, das Ihr Attributfeld auf unterschiedliche Werte überprüft und dann für jedes von ihnen eine SELECT-Operation für Ihr ursprüngliches Shapefile ausführt.
Wenn Sie mit Python-Skripten nicht vertraut sind, müssen Sie nur die IDLE-Datei (die Python-GUI) öffnen, eine neue Datei erstellen und den folgenden Code kopieren. Nachdem Sie den Code für my_shapefile, outputdir und my_attribute angepasst haben, sollte er funktionieren.
# 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
Wurde das Werkzeug "Layer nach Attributen teilen" für ArcMap 10 hier aktualisiert ? Wenn es nicht funktioniert, können Sie Split (Analyse) für Ihre Bedürfnisse verwenden.
Durch Aufteilen der Eingabe-Features wird eine Teilmenge mehrerer Ausgabe-Feature-Classes erstellt. Die eindeutigen Werte des geteilten Felds bilden die Namen der Ausgabe-Feature-Classes. Diese werden im Zielarbeitsbereich gespeichert.
Beispiel Code:
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
Funktionalität beschreibt und Ihre Antwort sich hauptsächlich darauf bezieht Split [By Geometry]
.
Ich habe das Skript von @ AlexandreNeto verwendet und es für ArcGIS 10.x- Benutzer aktualisiert . Hauptsächlich müssen Sie jetzt "arcpy" anstelle von "arcgisscripting" importieren:
# 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
Dies ist eine noch einfachere Möglichkeit ... und es wird in eine GDB ausgegeben.
http://www.umesc.usgs.gov/management/dss/split_by_attribute_tool.html
Lade das Tool von USGS herunter und brauchte 3 Minuten, um das zu tun, was ich 1 Stunde lang versucht hatte.
Ich weiß, dass Sie einen Iterator in Model Builder verwenden können, aber wenn Sie Python bevorzugen, habe ich mir das ausgedacht. Fügen Sie das Skript einer Toolbox mit den Parametern in der Reihenfolge Eingabedatei, Felder (mehrwertig, von der Eingabe erhalten) und Arbeitsbereich hinzu. Dieses Skript teilt das Shapefile basierend auf den ausgewählten Feldern in mehrere Shapefiles auf und gibt sie in einem Ordner Ihrer Wahl aus.
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)
Ich habe es schließlich mit SearchCursor und Select_analysis arbeiten
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')
Ich bin nicht mit den Werkzeugen zur Auswahl von Iterationsfunktionen in ModelBuilder vertraut, aber wenn Sie nur diese als Python-Code exportieren, können Sie sie mit arcpy aufrufen.
# 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")
Sie können einen Suchcursor verwenden, um einzelne Features in einer Feature-Class zu durchlaufen und nur die Geometrien in eindeutige Feature-Classes zu schreiben. In diesem Beispiel verwende ich eine Feature-Class aus den USA und exportiere die Bundesstaaten in neue Shapefiles:
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
Vorgänge erfordern .
Sie können ein Geometrietoken (SHAPE @) in Copy Features (Data Management) verwenden , um jedes Feature zu exportieren.
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)
In Arcpy berücksichtigen Cursor die Layer- / TableView-Auswahl. Laut Liste der ausgewählten Features in ArcGIS for Desktop mit Python-Code abrufen?können Sie einfach die Feature-Auswahl iterieren.
Wenn Sie jedoch mit arcpy eine Auswahl treffen möchten, verwenden Sie das Tool SelectLayerByAttribute_management .
Split By Attributes
ständig einzelne.dbf
Tabellen und keine einzelnen Feature-Classes generiert . In ArcGIS Desktop 10.6 werden mit demselben Tool jedoch einzelne Shapefiles korrekt generiert . Ich verstehe nicht warum und habe die gleichen Ausgaben beim Versuch, das Arbeitsverzeichnis auf Ordner oder Geodatabase festzulegen.