ArcMap / ArcPy का उपयोग करते हुए कई परतों के सिम्बोलॉजी को बदलना?


10

वहाँ ArcMap या ArcCatalog में कई परतों के लिए सहजीवन को बदलने का एक तरीका है। मैं एक साथ कई परतों के सहजीवन को बदलना चाहता हूं।


3
आप applySymbologyFromLayer का उपयोग करके वास्तव में सरल स्क्रिप्ट टूल बना सकते हैं । आपको बस डायलॉग बॉक्स में लेयर्स को ड्रैग और ड्रॉप करना होगा।
रॉय

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

@ ब्रैडनेसॉम- सुझाव के लिए धन्यवाद, लेकिन मैं विशेष रूप से कई परतों की सहजीवन को बदलने की बात कर रहा हूं जो पहले से ही टीओसी में हैं। मूल रूप से TOC में कई अन्य (मौजूदा) परतों के लिए TOC के एक (मौजूदा) परत से सहजीवन का "टेम्पलेट" लागू करना।
रयानKalton

2
यह मुझे
चकित

क्यों न सभी परतों को एक में मिला दिया जाए, और फिर उस एक परत का रंग बदल दिया जाए?
रॉबर्ट

जवाबों:


11

संपादित करें आप हाथ में कार्य पूरा करने के लिए ESRI द्वारा प्रदान की गई इस स्क्रिप्ट का उपयोग कर सकते हैं (नीचे के रूप में एक ही विचार):

import arcpy
arcpy.ApplySymbologyFromLayer_management("in_layer", "in_symbology_layer")

in_layer: वह परत जिस पर सहजीवन लागू किया जाएगा।
फ़ीचर लेयर; रैस्टर लेयर; टिन परत; नेटवर्क विश्लेषण परत

in_symbology_layer: इस परत की सहजीवन इनपुट परत पर लागू होती है।
फ़ीचर लेयर; रेखीय परत; टिन परत; नेटवर्क विश्लेषण परत

या इसे स्टैंडअलोन स्क्रिप्टिंग के रूप में विस्तारित करें (विचार आईडीएल):

import arcpy
from arcpy import env

# Set the current workspace
env.workspace = "path/to/workspace"

# Set layer to apply symbology to
inputLayers = ["in_layer_first.lyr","in_layer_second.lyr","in_layer_third.lyr"]

# Set layer that output symbology will be based on
symbologyLayer = "in_symbology_layer.lyr"

# Apply the symbology from the symbology layer to the input layer
for layer in inputLayers:
    arcpy.ApplySymbologyFromLayer_management (layer, symbologyLayer)

संक्षेप में, आप एक सहजीवन परत (in_symbology_layer) बनाते हैं जिसे आप डिज़ाइन / शैली के संबंध में बनाए रखते हैं। फिर आप अपनी परतों में से प्रत्येक पर सहानुभूति की परतों को कॉपी करते हैं जैसा कि आपकी सामग्री की तालिका में सूचीबद्ध है।


पिछला उत्तर

आप सामग्री / परत सूची की अपनी तालिका में एक वर्तमान परत से एक शैली का उपयोग कर सकते हैं और इसे अपनी अन्य परतों में लागू कर सकते हैं।

प्रत्येक बाद की परत के लिए (अपनी इच्छित शैली परत के नीचे)> राइट क्लिक> गुण> सिम्बोलॉजी> अन्य परत से आयात शैली


हाय माइकल, इस उत्तर के लिए धन्यवाद, लेकिन मैं इसे एक बार में कई परतों के लिए करना चाह रहा था।
रामकृष्ण बिलकंती

रामकृष्ण, मैंने अपने उत्तर को आशाओं के साथ संपादित किया है कि आपको आर्कपी के माध्यम से बेहतर समाधान मिल जाता है।
माइकल मार्कीटा

13

मुझे भी यही समस्या थी और मुझे इसका एक और समाधान मिला। यह सरल और वास्तव में व्यावहारिक है, इसे * .lyr फ़ाइल के निर्माण की भी आवश्यकता नहीं है।

ArcGIS ModelBuilder के संपादक बॉक्स में, मैंने नीचे की प्रक्रिया को डिज़ाइन किया है:

  1. एक वैरिएबल बनाएं, डेटा प्रकार को 'लेयर' में परिभाषित करें। इसके गुणों में "मूल्यों की एक सूची" और "मॉडल पैरामीटर" के रूप में सेट किया गया है। (वैकल्पिक: एक आसान पहचान के लिए "परतों का प्रतीक है" वस्तु का नाम बदलें।)
  2. एक वैरिएबल बनाएं, डेटा प्रकार को 'लेयर' में परिभाषित करें। इसके गुणों में "मॉडल पैरामीटर" के रूप में सेट किया गया है। (वैकल्पिक: इसे "सिम्बॉलॉजी लेयर" का नाम दें)।
  3. टूल जोड़ें "लेयर से सिम्बॉलॉजी लागू करें", आमतौर पर 'C: \ Program Files \ ArcGIS \ Desktop10.2 \ ArcToolbox \ Toolboxes \ Data Management Tools.tbx \ Layers और Table Views' में। (वैकल्पिक: "प्रतीकात्मक परतें" के लिए आउटपुट ऑब्जेक्ट का नाम बदलें)।
  4. गुण के रूप में 'लेयर से सिम्बॉलॉजी लागू करें' चेक प्रीकॉन्डिशन्स के रूप में: "सिम्बॉलिज़ करने के लिए परतें" और "सिम्बोलॉजी लेयर"।
  5. इनपुट परत के रूप में इसे सेट करने वाले टूल के लिए "लेयर्स टू सिंबल" कनेक्ट करें।
  6. "सिम्बॉलॉजी लेयर" को इनपुट लेयर के रूप में सेट करने वाले टूल से कनेक्ट करें।
  7. मॉडल संपादक विंडो को सहेजें और बंद करें।
  8. मॉडल खोलने पर, एक तालिका दिखाई देगी।
  9. मानचित्र परियोजना की सामग्री (TOC) की तालिका से सहसंबंध के टेम्पलेट के रूप में उपयोग की जाने वाली परत को खींचें, और इसे संबंधित तालिका फ़ील्ड में छोड़ दें। 'मान जांचें' बटन पर क्लिक करें।
  10. टीओसी की कई परतों का चयन करें, उन्हें संबंधित टेबल फ़ील्ड पर खींचें और छोड़ें। 'मान जांचें' बटन पर क्लिक करें।
  11. चलाओ।
  12. नक्शा प्रदर्शन को ताज़ा करने के लिए F5 पर क्लिक करें।

नोट: यदि आप एक ही समय में विभिन्न प्रकार की ज्यामितीय परतों का उपयोग करते हैं तो यह संभवत: काम नहीं करेगा। यदि आप एक ही नाम से परतों पर उपयोग करते हैं तो यह अच्छी तरह से काम नहीं करता है। मैंने गैर वेक्टर परतों के साथ प्रयास नहीं किया।

मॉडल बिल्डर में कदम।

मॉडल चलाते समय कदम।

मॉडल के अजगर को निर्यात की गई स्क्रिप्ट है:

 # Import arcpy module
import arcpy

# Script arguments
Layers_to_symbolize = arcpy.GetParameterAsText(0)

Symbology_Layer = arcpy.GetParameterAsText(1)

# Local variables:
Symbolized_Layers = Layers_to_symbolize

# Process: Apply Symbology From Layer
arcpy.ApplySymbologyFromLayer_management(Layers_to_symbolize, Symbology_Layer)

1
कम से कम आर्कगिस 10.2 के लिए, चरण 6 को "
सिम्बॉलजी

मैं पायथन का उपयोग कर रहा था और लूप के लिए एक अच्छा बना था जो ठीक से चलता था, हालांकि इसने मेरी सहजीवन को अपडेट नहीं किया। मैंने पाया कि आपको पहले .mdx डॉक्युमेंट खोलने की जरूरत है, df को सेट करना है, सिम्बॉलॉजी को अपडेट करना है, फिर सिंबॉलॉजी को बदलना होगा। मैंने तब मॉडल बिल्डर का उपयोग करके उत्तर 2 को देखा (जो कि मैंने मूल रूप से अपनी पायथन लिपि का निर्माण किया है)। यह आसान और कम समय का गहन था, इसके अलावा मेरे पास अब एक उपकरण भी बचा है, इसलिए मैं अन्य डेटासेट के लिए ऐसा कर सकता हूं।
हेइडी चर्च

1
मॉडल बिल्डर में 'सिम्बॉलॉजी फ्रॉम लेयर' टूल को डालने के बजाय, आप टूलबॉक्स में उस पर राइट क्लिक कर सकते हैं और बैच के रूप में चला सकते हैं
सर एडिलेड

8

@Aaron के संदेश से ठीक पहले, मैंने @Roy से जानकारी का उपयोग करके अपना समाधान तैयार किया, जिसे मैं ArcToolbox स्क्रिप्ट में शामिल कर सकता हूं। निचे देखो:

# Import modules
import arcpy

#Get the current Map Document
mxd = arcpy.mapping.MapDocument("CURRENT")

# Script arguments
Template_Layer = arcpy.GetParameterAsText(0)
LayerList = arcpy.GetParameterAsText(1)
Layers_to_Symbolize = LayerList.split(";")

# Process: Apply Symbology From Layer
for UpdateLayer in Layers_to_Symbolize:
    arcpy.AddMessage("Updating: " + UpdateLayer)
    arcpy.ApplySymbologyFromLayer_management(UpdateLayer,Template_Layer)

# Refresh the Table of Contents to reflect the change
arcpy.RefreshTOC()

#Delete the MXD from memory
del mxd

मैं इस अवधारणा को टूलबार पर 10.1 पायथन ऐड-इन के लिए एक संभावित उपकरण के रूप में देख सकता था।


4

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

यहां टूलबॉक्स के लिए जिप फाइल डाउनलोड करें।

अगर आसान है तो यह स्क्रिप्ट है:

import arcpy

# Script arguments
Target_Layers = arcpy.GetParameterAsText(0)
if Target_Layers == '#' or not Target_Layers:
Target_Layers = "LayersToBeChanged" # provide a default value if unspecified

Symbology_Layer = arcpy.GetParameterAsText(1)
if Symbology_Layer == '#' or not Symbology_Layer:
Symbology_Layer = "SymbologyLayer" # provide a default value if unspecified

# Local variables:
Output_Symbology = Symbology_Layer

# Process: Apply Symbology From Layer (3)
arcpy.ApplySymbologyFromLayer_management(Target_Layers, Symbology_Layer)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.