Python / ArcPy का उपयोग करके ArcGIS डेस्कटॉप में परत के रूप में शेपफाइल या फीचर क्लास जोड़ना?


20

मैं पायथन के साथ आर्कगिस डेस्कटॉप (आर्कप्स का उपयोग करके) में विभिन्न कार्यों को स्वचालित करने की कोशिश कर रहा हूं, और मुझे वर्तमान नक्शे में एक आकृति जोड़ने के लिए एक रास्ता चाहिए। (और फिर इसे करने के लिए सामान है, लेकिन यह एक और कहानी है)।

अब तक का सबसे अच्छा मैं वर्तमान मानचित्र में एक परत फ़ाइल को जोड़ना है , निम्न का उपयोग करके ("addLayer" एक परत फ़ाइल ऑब्जेक्ट है):

def AddLayerFromLayerFile(addLayer):
 import arcpy
 mxd = arcpy.mapping.MapDocument("CURRENT")
 df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
 arcpy.mapping.AddLayer(df, addLayer, "AUTO_ARRANGE")
 arcpy.RefreshActiveView()
 arcpy.RefreshTOC()
 del mxd, df, addLayer

हालाँकि, मेरा कच्चा डेटा हमेशा आकारहीन होता जा रहा है, इसलिए मुझे उन्हें खोलने में सक्षम होने की आवश्यकता है। (समान रूप से: किसी आकृति फ़ाइल को बिना खोले किसी लेयर फ़ाइल में कनवर्ट करें, लेकिन मैं ऐसा नहीं करना चाहूंगा)।

जवाबों:


30

यहाँ मैंने पाया कि क्या काम किया है:

import arcpy
from arcpy import env

# get the map document
mxd = arcpy.mapping.MapDocument("CURRENT")

# get the data frame
df = arcpy.mapping.ListDataFrames(mxd,"*")[0]

# create a new layer
newlayer = arcpy.mapping.Layer(path_to_shapefile_or_feature_class)

# add the layer to the map at the bottom of the TOC in data frame 0
arcpy.mapping.AddLayer(df, newlayer,"BOTTOM")

डेटाफ्रेम (वैरिएबल df) जो इस कोड को नई लेयर में डालेगा वह मैप डॉक्यूमेंट में पहला डेटाफ्रेम है। यह भी ध्यान दें कि यह कोड TOC के निचले भाग में एक नई परत के रूप में डेटा जोड़ता है। आप अन्य व्यवस्था विकल्पों का भी उपयोग कर सकते हैं, जो "AUTO_ARRANGE" और "TOP" हैं।


2
डेटाफ़्रेम निर्दिष्ट करने के लिए एक अन्य विकल्प सक्रिय डेटाफ़्रेम का उपयोग करना है: df = mxd.activeDataFrame के बजाय df = arcpy.mapping.ListDataFrames (mxd) [0] - इसके अलावा, आपको listdataframe कॉल में "*" की आवश्यकता नहीं है ।
jbalk

10

फ़ीचर लेयर (डेटा मैनेजमेंट) http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00170000006p000000.htm

मैंने अभी इसे आर्केप के पायथन विंडो में आज़माया था और यह सीधे मेरे नक्शे में जुड़ जाता है (मुझे अपना डेटाफ़्रेम प्राप्त नहीं करना पड़ा और AddLayer को कॉल करना पड़ा)।

arcpy.MakeFeatureLayer_management('r:/temp/a.shp','test') वैकल्पिक शब्द


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

क्या आपने SP1 स्थापित किया है?
जेसन शहीर 21

1
@ टॉम डब्ल्यू: मैं अजगर और चापलूसी के साथ बहुत ज्यादा एक नॉब हूं। लेकिन मुझे नहीं लगता कि शारीरिक रूप से एक लेयर फाइल बनाई गई है। यदि आप एक परत फ़ाइल चाहते हैं, तो आपको इसे बनाना होगा और एक पैरामीटर के रूप में परत नाम को arcpy.SaveToLayerFile_management('test', 'r:/temp/evilmonkey.lyr', 'ABSOLUTE') पास करना होगा : यदि आप परत को सहेजना नहीं चाहते हैं और आप बस इसे चला जाना चाहते हैं, तो arcpy.Delete_management('test')
जे कमिंस

@ टोम डब्ल्यू: बस अपनी टिप्पणी को फिर से पढ़ें। क्या आप एक अलग अजगर शेल (तत्काल विंडो नहीं) से आर्कपैम में एक परत जोड़ने की कोशिश कर रहे हैं? मुझे नहीं लगा कि आप ऐसा कर सकते हैं (लेकिन इस पर मेरा कोई अधिकार नहीं है ... शायद आप कर सकते हैं)।
जे कमिंस

1
@ Wom W: मुझे उस लेयर बग के बारे में पता है, यही वजह है कि मैं यह सुनिश्चित कर रहा था कि SP1 स्थापित किया गया था। TOC में परत जोड़ने के लिए जैसा कि आप वर्णन कर रहे हैं, आपको अपनी स्क्रिप्ट की आवश्यकता है कि एक व्युत्पन्न आउटपुट फीचर परत हो और आपके द्वारा बनाई गई परत के नाम पर मान सेट करें। ArcMap में GP उपकरण GP टूल में TOC को स्थानिक परतों (अस्थायी FCs इत्यादि) से बचाने का प्रयास करते हैं, इसलिए आपको स्क्रिप्ट टूल के पार्म में यह परिभाषित करने की आवश्यकता होती है कि आपकी नई फीचर परत TOC में रहने वाली है। जहां परत डिस्क पर रह रही है, संभवत: FC का डेटा स्रोत है, इसलिए एक फ़ीचर क्लास को आपके कार्यक्षेत्र पर परत के समान नाम दिया गया है।
जेसन शहीर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.