ArcPy स्क्रिप्ट का उपयोग करके फीचर लेयर हटाना?


13

मेरे पास एक ArcPy आधारित स्क्रिप्ट है जहां मैं दो परतों को एक दूसरे में ले जाने की कोशिश कर रहा हूं, जहां एक परत का दूसरी परत में होना जरूरी है।

चूँकि मुझे यह जानने की आवश्यकता है कि एक परत (फीचर_लेयर नीचे) में दूसरे का केंद्रक शामिल है, मैं arcpy.SelectLayerByLocation_management () टूल का उपयोग कर रहा हूं।

मेरे पास मैप डॉक्यूमेंट (* .mxd) नहीं है इसलिए ऐसा करने के लिए, मुझे इसे फीड करने के लिए मेक फ़ीचर लेयर का उपयोग करना होगा।

दस्तावेज़ीकरण नोट करता है कि प्रोग्राम के बाहर निकलने पर फीचर लेयर गायब हो जाएगी, लेकिन मुझे इसे जल्दी से गायब करने की आवश्यकता है क्योंकि मेरे पास नीचे दिए गए लूप में है

for feature_class in large_list_of_feature_classes:
    some_function(feature_class)

def some_function():
    feature = "{path to feature class}"
    feature_layer = "feature_layer"
    HUCs_layer = "all_HUCs" #HUCs being Hydrologic Unit Codes

    arcpy.MakeFeatureLayer_management(feature, feature_layer)
    arcpy.MakeFeatureLayer_management(feature, HUCs_layer)      
    arcpy.SelectLayerByLocation_management(HUCs_layer, "HAVE_THEIR_CENTER_IN", feature_layer, selection_type="NEW_SELECTION")

    arcpy.CopyFeatures_management(HUCs_layer, selection_name)

मैं फ़ीचर लेयर्स को हटाने के लिए एक फंक्शन की तलाश कर रहा हूँ और मैं एक भी नहीं खोज पा रहा हूँ।

मुझे लगता है कि मैं कार्यक्रम के दायरे में हर एक को अद्वितीय बनाने के लिए कुछ प्रकार की गिनती रख सकता हूं, लेकिन यह आदर्श नहीं है जब तक कि फीचर परतों को हटाने का कोई तरीका नहीं है।

जवाबों:


21

हटाए जाने वाले टूल को TOC से हटाने के लिए एक फीचर लेयर का नाम स्वीकार करना चाहिए।

डिस्क से डेटा को स्थायी रूप से हटाता है। आर्कजीआईएस द्वारा समर्थित सभी प्रकार के भौगोलिक डेटा, साथ ही टूलबॉक्स और कार्यस्थान (फ़ोल्डर, जियोडैट डेटाबेस) को हटाया जा सकता है। यदि निर्दिष्ट आइटम एक कार्यक्षेत्र है, तो सभी समाहित आइटम भी हटा दिए जाते हैं।

और सिंटैक्स सेक्शन के तहत उन डेटा प्रकारों को सूचीबद्ध करता है जिन्हें निम्न के रूप में हटाया जा सकता है:

डेटा तत्व; ग्राफ़; परत ; टेबल व्यू


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

2
यह वास्तव में संबंधित नहीं है, लेकिन यह जिस तरह से जियोप्रोसेसिंग काम करता है - यह उम्मीद करता है कि प्रत्येक परत का एक अनूठा नाम होगा क्योंकि यह उनके लिए इसी तरह का है।
जेसन शहीर

1
शायद TOC से एक परत को हटाने के लिए डिलीट टूल का उपयोग संसाधनों पर बेहतर ढंग से किया जा सकता है। हटाए जाएं, लेकिन परतों के लिए कोई अन्य संदर्भ नहीं दिया गया है और इसका प्रारंभिक वाक्य "डिस्क से डेटा को स्थायी रूप से हटा देता है" कई उपयोगकर्ताओं को एक परत को हटाने के लिए हटाए जाने की कोशिश करने से दूर डरा देगा।
PolyGeo

7

आप TOC से एक लेयर हटाने के लिए arcpy.mapping.RemoveLayer को इनवाइट कर सकते हैं ।

मानचित्र दस्तावेज़ (.mxd) में डेटा फ़्रेम के भीतर एक परत को निकालने की क्षमता प्रदान करता है।


सुझाव के लिए धन्यवाद - मैंने स्पष्ट नहीं किया कि मैं मैपिंग संदर्भ के बाहर ऐसा करने के लिए कुछ खोज रहा था - यह सिर्फ एक विश्लेषण स्क्रिप्ट है और मेरे पास एक स्पष्ट TOC नहीं है (या कम से कम नहीं पता है)। नीचे जेसन के सुझाव पर काम किया गया। धन्यवाद! यह अभी भी बाद में मेरे लिए एक उपयोगी कार्य होगा।
19

3

यह मैं परतों को हटाने के लिए उपयोग करता हूं।

arcpy.mapping.RemoveLayer ("डेटा फ़्रेम", "लेयर नेम")

या लूपिंग:

mxd = arcpy.mapping.MapDocument("CURRENT")
for df in arcpy.mapping.ListDataFrames(mxd):
    for lyr in arcpy.mapping.ListLayers(mxd, "", df):
        arcpy.mapping.RemoveLayer(df, lyr)

3

का प्रयोग करें mxd.save()आप एक नक्शा दस्तावेज है कि नहीं उपयोग कर रहे हैं CURRENTयकीन है कि परत रहता चला गया बनाने के लिए। इसके अलावा, अपनी स्क्रिप्ट में एक प्रिंट स्टेटमेंट जोड़ें:

mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd)[0]

for i in arcpy.mapping.ListLayers(mxd , "TerraColor_SanFrancisco_US_15m.tif"):
    print "Deleting layer", i
    arcpy.mapping.RemoveLayer(df , i)

arcpy.RefreshActiveView()

बस यह सुनिश्चित करने के लिए कि यह सभी को हटाने के लिए एक परत पा रहा है।


-1

इसे इस्तेमाल करे:

import arcpy
from arcpy import env
env.workspace = r"F:\Projects\ohad\derech_atankim\gis"   
for mxdname in arcpy.ListFiles("*.mxd"):
    print mxdname 
    mxd = arcpy.mapping.MapDocument(r"F:\Projects\ohad\derech_atankim\gis\\" + mxdname)
    df = arcpy.mapping.ListDataFrames(mxd, "Layers")[0]
    for lyr in arcpy.mapping.ListLayers(mxd, "", df):
        if lyr.dataSource == r"F:\Projects\ohad\derech_atankim\gis\layers\roads.lyr":
            arcpy.mapping.RemoveLayer(df, lyr)
    mxd.save()
del mxd
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.