TOC में परतों को जोड़ने के लिए अजगर का उपयोग करें


13

मैं कुछ समय के लिए TOC में परतें जोड़ने से जूझ रहा हूं। मैंने एकल परतों को जोड़ा है, लेकिन एक फ़ोल्डर के माध्यम से लूप करने और सभी परतों को जोड़ने की आवश्यकता है। शेपफाइल्स मुझे बिल्कुल नहीं मिल सकती हैं। केवल परत फ़ाइलें। नीचे वह कोड है जहां मैं हूं:

for layer in shp_List:
mxd = arcpy.mapping.MapDocument("CURRENT")
dataFrame = arcpy.mapping.ListDataFrames(mxd, "*")[0]

outlayer = lyr
layerfile = os.path.join(base_Folder, lyr + ".lyr")

arcpy.MakeFeatureLayer_management(layer, outlayer)
arcpy.SaveToLayerFile_management(outlayer, layerfile, "ABSOLUTE")
addlayer = arcpy.mapping.Layer(layerfile)
arcpy.mapping.AddLayer(dataFrame, addlayer, "BOTTOM")



#addLayer = arcpy.mapping.Layer(layer)
#arcpy.mapping.AddLayer(dataFrame, addLayer, "BOTTOM")
#arcpy.RefreshTOC()
#arcpy.RefreshActiveView()
del addlayer, mxd

उपरोक्त कोड टीओसी में प्रत्येक परत को जोड़ देगा, फिर infuriatingly इसे हटा देता है और अगले को जोड़ता है। जब पूरी स्क्रिप्ट खत्म हो जाती है तो टीओसी में कुछ भी नहीं बचता है। मैंने इस स्क्रिप्ट को एक मॉडल में जोड़ने और एक व्युत्पन्न आउटपुट पैरामीटर बनाने की कोशिश की है, जिसे बाद में "एड टू डिस्प्ले" चेक किए गए मॉडल पैरामीटर के रूप में जोड़ा गया है। मैंने यह सुनिश्चित करने के लिए जियोप्रोसेसिंग विकल्पों की भी जांच की है कि डिस्प्ले को जोड़ने के लिए बॉक्स को चेक किया गया है। मैं आर्क 10 (कोई सर्विस पैक नहीं) चला रहा हूं। क्या कोई मदद कर सकता है?

जवाबों:


11

आपको अपनी परतों के माध्यम से चलने वाले लूप के बाहर MapDocument और DataFrame ऑब्जेक्ट बनाने की आवश्यकता है। अन्यथा आप हर बार मूल नक्शे से शुरुआत कर रहे हैं।

इसलिए मैं इस कोड में सही करूंगा:

mxd = arcpy.mapping.MapDocument("CURRENT")
dataFrame = arcpy.mapping.ListDataFrames(mxd, "*")[0]

for layer in shp_List:

    outlayer = layer + "_lyr" 
    layerfile = os.path.join(base_Folder, layer + ".lyr")

    arcpy.MakeFeatureLayer_management(layer, outlayer)
    arcpy.SaveToLayerFile_management(outlayer, layerfile, "ABSOLUTE")
    addlayer = arcpy.mapping.Layer(layerfile)
    arcpy.mapping.AddLayer(dataFrame, addlayer, "BOTTOM")



    #addLayer = arcpy.mapping.Layer(layer)
    #arcpy.mapping.AddLayer(dataFrame, addLayer, "BOTTOM")
arcpy.RefreshTOC()
arcpy.RefreshActiveView()
    #del addlayer, mxd

स्क्रिप्ट के समान फ़ोल्डर में mxd फ़ाइलों की सूची में लूप करने के लिए, आप इसे इस तरह कर सकते हैं:

for mxd_name in mxd_names:
    mxd = arcpy.mapping.MapDocument(os.path.dirname(os.path.realpath(__file__))+"\\"+mxd_name+".mxd")
   dataFrame = arcpy.mapping.ListDataFrames(mxd, "*")[0]

2
मैं @ जियोजेक की टिप्पणियों की तलाश कर रहा था लेकिन वे अनुपस्थित प्रतीत होते हैं। किसी भी घटना में, जैसा कि उसका सही कोड दिखाता है, आपको अपनी परतों के माध्यम से चलने वाले लूप के बाहर MapDocument और DataFrame ऑब्जेक्ट बनाने की आवश्यकता है। अन्यथा आप हर बार मूल नक्शे से शुरुआत कर रहे हैं।
PolyGeo

1
स्पष्टीकरण PolyGeo के लिए धन्यवाद। मैंने बदलावों को लागू किया है। हालाँकि, अब सूची में केवल अंतिम फ़ाइल TOC में रहती है। अन्य सभी दिखाई देते हैं फिर गायब हो जाते हैं। Flummoxed। :)
ओलिवर बर्डेकिन

1
काम कर गया! इंडेंटेशन में सब ठीक है? परत से निकलने वाले नाम अभी भी एक मेय हैं लेकिन यह सिर्फ सौंदर्यशास्त्र है। आपकी मदद के लिए बहुत बहुत धन्यवाद!
ओलिवर बर्डेकिन

1
geogeek, यह कैसे कई mxd के लिए है?
newGIS

1
मैंने अपने सम्पादन में एक उत्तर दिया है
जियोगे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.