আরকজিআইএস ডেস্কটপ ব্যবহার করে ক্ষেত্রের মানগুলির ভিত্তিতে একাধিক বৈশিষ্ট্য শ্রেণিতে বৈশিষ্ট্য শ্রেণি রফতানি করা হচ্ছে?


34

আমার কাছে ২ হাজারেরও বেশি বৈশিষ্ট্যযুক্ত একটি বৈশিষ্ট্য শ্রেণি রয়েছে এবং ক্ষেত্রের উপর ভিত্তি করে আমার সেগুলি সমস্ত ব্যক্তিগত বৈশিষ্ট্য ক্লাস করা উচিত।

এই কাজ করতে একটি উপায় আছে কি?

উত্তর:


44

আপনি স্প্লিট বাই অ্যাট্রিবিউট সরঞ্জামটি ব্যবহার করতে পারেন:

অনন্য বৈশিষ্ট্য দ্বারা একটি ইনপুট ডেটাसेट বিভক্ত করে

এর জন্য উপলব্ধ সংস্করণ রয়েছে:


মধ্যে ArcCatalog 10.6, Split By Attributesক্রমাগত পৃথক উত্পন্ন .dbfটেবিল, না পৃথক বৈশিষ্ট্য ক্লাস। তবে, আরকজিআইএস ডেস্কটপ 10.6 এ, একই সরঞ্জামটি সঠিকভাবে পৃথক আকারের ফাইলগুলি তৈরি করে । আমি বুঝতে পারি না কেন এবং ফোল্ডার বা জিওডাটাবেস উভয় ক্ষেত্রে ওয়ার্কিং ডিরেক্টরি সেট করার চেষ্টা করে একই ফলাফলগুলি পেয়েছি।
মেক্কা

22

আপনার কাছে অর্গজিআইএস 10.0 বা তার চেয়ে বেশি হলে আপনি খুব সাধারণ মডেলটি দিয়ে এটি অর্জন করতে পারেন।

ফিচার আইট্রেটারের সাথে একটি মডেল তৈরি করুন যেখানে ক্ষেত্র অনুসারে গোষ্ঠীটি সেই বৈশিষ্ট্যটি নির্বাচন করতে চান যা তারপরে অনন্য ফাইলের নাম নিশ্চিত করতে ইনলাইন প্রতিস্থাপন ব্যবহার করে অনুলিপি বৈশিষ্ট্য সরঞ্জামে আউটপুট প্রেরণ করুন। মডেলটি নীচে দেখানো হয়েছে:

বৈশিষ্ট্য দ্বারা নিষ্কাশন করার মডেল


16

আমার কাছে আরক্যাপ্যাপ 10 এ কেবল অ্যাক্সেস নেই, কেবল 9.3, তবে আমি আশা করি এটি এর থেকে খুব আলাদা হবে না।

আপনি পাইথনে একটি সাধারণ স্ক্রিপ্ট তৈরি করতে পারেন, যা বিভিন্ন মানগুলির জন্য আপনার অ্যাট্রিবিউট ফিল্ডটি পরীক্ষা করে এবং তারপরে তাদের প্রত্যেকের জন্য আপনার আসল শেপফাইলে একটি নির্বাচন অপারেশন চালানো হয়।

আপনি যদি পাইথন স্ক্রিপ্টিংয়ের সাথে পরিচিত না হন তবে আপনাকে কেবল আইডিএল (পাইথন জিইউআই) খুলতে হবে একটি নতুন ফাইল তৈরি করুন এবং নীচের কোডটি অনুলিপি করুন। আপনার মাই_শ্যাপিল ফাইল, আউটপুটডির এবং মাই_ট্রিবিউটের কোডটি মানিয়ে নেওয়ার পরে এটি কাজ করা উচিত।

# 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

আপনি কি এখানে আর্কম্যাপ 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

আমি যদি প্রশ্নটি ভুল করে না দেখি তবে আমি মনে করি এটি "স্প্লিট বাই বাই অ্যাট্রিবিউট" চেয়ে "স্প্লিট বাই বাই লোকেশন" চাইছে। স্প্লিট (বিশ্লেষণ) "স্থান দ্বারা বাই স্প্লিট" কার্যকারিতা সরবরাহ করে। এখানে @ সিএনএন এর মন্তব্যটি একটি আকর্ষণীয় কাজের প্রস্তাব দেয় যা সম্ভবত এই উত্তরের "স্পষ্টতা" হিসাবে সম্পাদনা করা যেতে পারে।
পলিজিও

আমি উদ্বিগ্ন যে প্রশ্নটি Split By Attributeকার্যকারিতা বর্ণনা করে এবং আপনার উত্তর বেশিরভাগ সম্পর্কে Split [By Geometry]
পলিজিও

লিঙ্কটি অসম্পূর্ণ
PolyGeo

9

আমি @ আলেকজান্ডারনেটো স্ক্রিপ্টটি ব্যবহার করেছি এবং এটি আর্কজিআইএস ১০.০ ব্যবহারকারীদের জন্য আপডেট করেছি । মূলত আপনাকে এখন "আরকিজিস্ক্রিপ্টিং" এর পরিবর্তে "আরকিপি" আমদানি করতে হবে:

# 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

এটি এটি করার একটি আরও সহজ উপায় ... এবং এটি একটি জিডিবিতে আউটপুট দেয়।

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

ইউএসজিএস থেকে সরঞ্জামটি ডাউনলোড করুন, 1 ঘন্টার জন্য আমি যা চেষ্টা করেছিলাম তা করতে আমাকে 3 মিনিট সময় নিয়েছিল।


লিঙ্ক করার জন্য আপনাকে ধন্যবাদ! মোহন এর মতো কাজ করে (এবং সংস্করণ 10.2!)
ওলভারাইনটাইম

আমি সম্প্রতি এই সরঞ্জামটি চেষ্টা করেছি এবং যখন আমি এটি কার্যকর করি তখন কিছুই হয় নি। আমি আমার বৈশিষ্ট্যটি বেছে নিয়েছি, বৈশিষ্ট্যগুলি নির্বাচন করার জন্য ক্ষেত্রটি নির্বাচন করেছি, একটি আউটপুট অবস্থান নির্বাচন করেছি, ঠিক আছে চাপুন এবং কিছুই ঘটেনি। এটি "যেতে" হবে না ... আমি কি কিছু মিস করছি? ধন্যবাদ!
rachel.passer

6

আমি জানি আপনি মডেল বিল্ডারে একটি পুনরায় ব্যবহার করতে পারেন, তবে আপনি যদি এখানে পাইথন ব্যবহার করতে পছন্দ করেন তবে আমি এখানে এসেছি। ইনপুট 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

পরিশেষে আমি এটি সার্চকার্সার এবং সিলেক্ট_অ্যানালাইসিসের সাথে কাজ করেছি

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

আমি মডেলবিল্ডারের আইট্রেট বৈশিষ্ট্য নির্বাচন সরঞ্জামগুলির সাথে পরিচিত নই, তবে পাইথন কোড হিসাবে কেবল রফতানি করে ইঙ্গিত দেয় যে তাদের আরকি ব্যবহার করে বলা যেতে পারে।

    # 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 এর মতো আরও উত্তর পছন্দ করি যা হবে।
পলিজিও

গুড পয়েন্ট @ পলিজিও, তবে, উল্টো দিকটি হ'ল এটিকে অন্য কর্মপ্রবাহে আবৃত করা যেতে পারে যার cursorঅপারেশনও প্রয়োজন ।
হারুন

... তবে ফিচারক্লাসটোফিশারক্লাসের জায়গায় সিলেক্ট অ্যানালাইসিস ব্যবহার করা সম্ভব - এটি কোডের একমাত্র লাইন যা পরিবর্তিত হবে।
পলিজিও

2

প্রতিটি বৈশিষ্ট্য রফতানি করতে আপনি অনুলিপি বৈশিষ্ট্যগুলির (ডেটা ম্যানেজমেন্ট) এর মধ্যে জ্যামিতি টোকেন (শ্যাপি @) ব্যবহার করতে পারেন ।

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)

2

আরকিপিতে, কার্সাররা সম্মান স্তর / টেবিলভিউ নির্বাচনগুলি সম্মান করে। মতে পাইথন কোড ব্যবহার ডেস্কটপের জন্য ArcGIS নির্বাচিত বৈশিষ্ট্য তালিকা পথ? , আপনি কেবল বৈশিষ্ট্য নির্বাচন পুনরাবৃত্তি করতে পারেন।

তবে আপনি যদি আরকিপি ব্যবহার করে একটি নির্বাচন করতে চান তবে, সিলেক্টায়ারবাইঅ্যাট্রিবিউট_ম্যানেজমেন্ট সরঞ্জামটি ব্যবহার করুন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.