जवाबों:
आप स्प्लिट बाइ अटैचमेंट टूल का उपयोग कर सकते हैं:
अद्वितीय विशेषताओं द्वारा एक इनपुट डेटासेट विभाजित करता है
इसके लिए उपलब्ध संस्करण हैं:
यदि आप आर्कजीआईएस 10.0 या उच्चतर हैं, तो आप इसे बहुत सरल मॉडल के साथ प्राप्त कर सकते हैं।
फ़ीचर Iterator के साथ एक मॉडल बनाएँ जहाँ फ़ील्ड द्वारा समूह वह विशेषता है जिसके द्वारा आप तब चयन करना चाहते हैं जब एक अद्वितीय फ़ाइल नाम सुनिश्चित करने के लिए इनलाइन प्रतिस्थापन का उपयोग करके कॉपी फीचर टूल को आउटपुट भेजें। मॉडल नीचे दिखाया गया है:
मेरे पास ArcMap 10 तक पहुंच नहीं है, केवल 9.3, लेकिन मुझे उम्मीद है कि यह इससे बहुत अलग नहीं होगा।
आप पायथन में एक साधारण स्क्रिप्ट बना सकते हैं, जो विभिन्न मूल्यों के लिए आपके विशेषता क्षेत्र की जांच करता है, और फिर, उनमें से प्रत्येक के लिए अपने मूल शेपाइल के लिए एक सेलेक्ट ऑपरेशन चलाता है।
यदि आप अजगर स्क्रिप्टिंग से परिचित नहीं हैं, तो आपको बस इतना करना है कि आप IDLE (अजगर 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
क्या आपने 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")
Split By Attribute
कार्यक्षमता का वर्णन करता है और आपका उत्तर ज्यादातर के बारे में है Split [By Geometry]
।
मैंने @ अलेक्जेंड्रेनेटो की स्क्रिप्ट का उपयोग किया और आर्कजीआईएस 10.x उपयोगकर्ताओं के लिए इसे अपडेट किया । मुख्य रूप से अब आपको "आर्कगिसस्क्रिप्टिंग" के बजाय "आर्कपी" आयात करना होगा:
# 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
यह ऐसा करने का एक और आसान तरीका है ... और यह एक GDB में आउटपुट करता है।
http://www.umesc.usgs.gov/management/dss/split_by_attribute_tool.html
यूएसजीएस से टूल डाउनलोड करें, मुझे 1 मिनट के लिए जो करना था, उसे करने में मुझे 3 मिनट लगे।
मुझे पता है कि आप मॉडल बिल्डर में एक पुनरावृत्त का उपयोग कर सकते हैं, लेकिन यदि आप यहां अजगर का उपयोग करना पसंद करते हैं तो कुछ ऐसा है जो मैं लेकर आया हूं। इनपुट 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)
मैंने अंततः इसे 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')
मैं ModelBuilder में Iterate फ़ीचर चयन उपकरण से परिचित नहीं हूं, लेकिन केवल Python कोड के रूप में यह दर्शाता है कि उन्हें आर्कपी का उपयोग करके बुलाया जा सकता है।
# 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")
आप एक फीचर वर्ग में व्यक्तिगत सुविधाओं के माध्यम से लूप के लिए एक खोज कर्सर का उपयोग कर सकते हैं और केवल ज्यामितीय को अद्वितीय फीचर कक्षाओं में लिख सकते हैं। इस उदाहरण में, मैं संयुक्त राज्य अमेरिका के एक फीचर वर्ग का उपयोग करता हूं और राज्यों को नए आकार के लिए निर्यात करता हूं:
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
संचालन की भी आवश्यकता होती है।
आप प्रत्येक फीचर को एक्सपोर्ट करने के लिए कॉपी फीचर्स (डेटा मैनेजमेंट) के भीतर ज्योमेट्री टोकन (SHAPE @) का उपयोग कर सकते हैं ।
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)
आर्कपी में, कर्सर परत / टेबल व्यू चयन का सम्मान करते हैं। पायथन कोड का उपयोग करते हुए डेस्कटॉप के लिए आर्कजीआईएस में चयनित सुविधाओं की सूची प्राप्त करने के अनुसार ? , आप बस सुविधा चयन iterate कर सकते हैं।
हालाँकि यदि आप आर्कपी का उपयोग करके चयन करना चाहते हैं, तो SelectLayerByAttribute_management टूल का उपयोग करें ।
Split By Attributes
लगातार अलग-अलग उत्पन्न.dbf
टेबल, न कि व्यक्तिगत सुविधा कक्षाएं। लेकिन, आर्कजीआईएस डेस्कटॉप 10.6 में, एक ही टूल सही ढंग से व्यक्तिगत शेपफाइल बनाता है । मुझे समझ में नहीं आता है, और एक ही आउटपुट दोनों फ़ोल्डर या जियोडेटाबेस के लिए काम करने वाले डायरेक्टरी को सेट करने की कोशिश कर रहा है।