मैं ModelBuilder के साथ एक जियोप्रोसेस के निर्माण को समझने की कोशिश कर रहा हूं, लेकिन मुझे नहीं पता कि ModelBuilder के साथ एक जियोप्रोसेस बनाते समय फ़ीचर कक्षाओं के बजाय फ़ीचर लेयर्स का उपयोग करना क्यों महत्वपूर्ण है। क्या कोई समझा सकता है कि क्यों?
मैं ModelBuilder के साथ एक जियोप्रोसेस के निर्माण को समझने की कोशिश कर रहा हूं, लेकिन मुझे नहीं पता कि ModelBuilder के साथ एक जियोप्रोसेस बनाते समय फ़ीचर कक्षाओं के बजाय फ़ीचर लेयर्स का उपयोग करना क्यों महत्वपूर्ण है। क्या कोई समझा सकता है कि क्यों?
जवाबों:
मॉडल में उनके आकार और जटिलता के आधार पर कई उप प्रक्रिया आउटपुट परतें हो सकती हैं। आपकी हार्ड डिस्क पर लिखी जा रही फाइलों को खत्म करने के लिए, कुछ उपकरण आपको फीचर लेयर्स (जैसे Iterate Feature Selection , या Select by Attribute ) का उपयोग करते हैं। फ़ीचर लेयर्स अस्थायी हैं और आपके मॉडल के समाप्त होने के बाद बनी नहीं रहेंगी।
फ़ीचर लेयर देखें
ऐसी कई वजहें हैं जिनके कारण आप फ़ीचर क्लासेस के विपरीत, ModelBuilder में फ़ीचर लेयर्स को रेफ़र करना चाहते हैं। पहले यह मतभेदों को समझने में मददगार होता है।
तो उस पृष्ठभूमि को देखते हुए, यहां कुछ कारण बताए गए हैं कि आप "मेक फ़ीचर लेयर" टूल का उपयोग कच्चे डेटा और अन्य जियोप्रोसेसिंग टूल्स के बीच में करना चाहते हैं।
यदि आप आर्ककॉस्टिक्स से एक मॉडल चलाना चाहते हैं, या अपने मॉडल को एक पायथन स्क्रिप्ट में निर्यात करना चाहते हैं जो कि आर्कगिस के बाहर चलाए जा सकते हैं, तो आपको "फ़ीचर लेयर्स" का उपयोग करने की आवश्यकता है ताकि आपके कच्चे स्रोत डेटा को "लेयर्स" में परिवर्तित किया जा सके। यह आपके ArcMap सत्र में "डेटा जोड़ने" के अनुरूप होगा।
जैसे ही आप ModelBuilder प्रक्रिया में जाते हैं, परतों का उपयोग करना आपके डेटा को कम करना आसान बनाता है। मान लें कि आप सभी डेटा को एक विधि के साथ "ए" विशेषता के साथ संसाधित करना चाहते हैं, लेकिन सभी डेटा विशेषता "बी" के साथ एक अन्य विधि के साथ हैं। आप अपने कच्चे डेटा को एक बार संदर्भित कर सकते हैं, फिर फीचर परत का उपयोग करके डेटा को दो "शाखाओं" में विभाजित कर सकते हैं और प्रत्येक सेट को स्वतंत्र रूप से संसाधित कर सकते हैं, लेकिन एकल स्रोत डेटासेट को प्रभावित / अपडेट कर सकते हैं।
आपके मॉडलों में अस्थायी परतों को शामिल करने से प्रसंस्करण समय भी कम हो जाता है। एक प्रोसेसिंग दृष्टिकोण से, यह डिस्क पर लिखने की तुलना में मेमोरी के लिए बहुत अधिक कुशल लेखन है। इसी प्रकार, आप अस्थायी डेटा in_memory वर्कस्पेस पर लिख सकते हैं , जो कम्प्यूटेशनल रूप से अधिक कुशल भी है।
आर्कजीआईएस में कई परिचालनों में इनपुट के रूप में अस्थायी परतों की आवश्यकता होती है। उदाहरण के लिए, सेलेक्ट लेयर बाय लोकेशन (डेटा मैनेजमेंट) एक बहुत ही शक्तिशाली और आसान उपकरण है जो आपको एक परत की विशेषताओं का चयन करने की अनुमति देता है जो स्थानिक रिश्तों को किसी अन्य चयन सुविधा के साथ साझा करता है। आप "HAVE_THEIR_CENTER_IN" या "BOUNDARY_TOUCHCH" जैसे जटिल संबंध निर्दिष्ट कर सकते हैं, आदि।
संपादित करें:
जिज्ञासा से बाहर, और फीचर लेयर्स और in_memory वर्कस्पेस का उपयोग करके प्रोसेसिंग अंतरों को विस्तृत करने के लिए, निम्नलिखित गति परीक्षण पर विचार करें जहां 39,000 अंक 100 मी बफ़र किए गए हैं:
import arcpy, time
from arcpy import env
# Set overwrite
arcpy.env.overwriteOutput = 1
# Parameters
input_features = r'C:\temp\39000points.shp'
output_features = r'C:\temp\temp.shp'
###########################
# Method 1 Buffer a feature class and write to disk
StartTime = time.clock()
arcpy.Buffer_analysis(input_features,output_features, "100 Feet")
EndTime = time.clock()
print "Method 1 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)
############################
# Method 2 Buffer a feature class and write in_memory
StartTime = time.clock()
arcpy.Buffer_analysis(input_features, "in_memory/temp", "100 Feet")
EndTime = time.clock()
print "Method 2 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)
############################
# Method 3 Make a feature layer, buffer then write to in_memory
StartTime = time.clock()
arcpy.MakeFeatureLayer_management(input_features, "out_layer")
arcpy.Buffer_analysis("out_layer", "in_memory/temp", "100 Feet")
EndTime = time.clock()
print "Method 3 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)
हम देख सकते हैं कि विधि 2 और 3, विधि 1 की तुलना में लगभग 3 गुना तेज और समरूप हैं। यह बड़े वर्कफ़्लोज़ में मध्यवर्ती चरणों के रूप में फीचर लेयर्स का उपयोग करने की शक्ति को दर्शाता है।
in_memory
कार्यक्षेत्र के लिए लिखा गया डेटा अभी भी डेटा है (जैसे फीचर क्लासेस और टेबल) अभी भी (संभवतः बहुत सारे) स्पेस लेता है। दूसरी ओर, फ़ीचर लेयर्स, डेटा पर एक दृश्य हैं , जिससे आप डेटा का सबसेट चुन सकते हैं और बाद की प्रक्रियाओं में इसका उपयोग कर सकते हैं, बजाय इसके कि एक सबसेट प्राप्त करने के लिए डुप्लिकेट डेटा की बजाय। फ़ीचर लेयर्स में लगभग कोई जगह नहीं है। मैं उन्हें "मेटाडेटा के साथ पॉइंटर्स" के रूप में सोचना पसंद करता हूं, उदाहरण के लिए वे कुछ डेटा को इंगित करते हैं और यह बताते हैं कि इसे कैसे क्वेरी / रेंडर करना है।
in-memory
कार्यक्षेत्र मूल रूप से एक फ़ाइल जियोडैटेबेस है जो स्मृति में बैठता है, अगर आप इसे इस तरह से सोचना चाहते हैं।