स्थायी रूप से आर्कजीस मेक क्वेरी टेबल टूल का उपयोग करके फ़ील्ड्स को फिर से ऑर्डर करें?


15

आर्कगिस डेस्कटॉप का उपयोग करके फ़ाइल जियोडैटेबेस में फ़ील्ड (स्थायी रूप से) को पुन: व्यवस्थित करने के लिए उत्तर में? यह कहा गया था कि मेक क्वेरी टेबल टूल का उपयोग तालिकाओं और फ़ीचर कक्षाओं में स्थायी रूप से फ़ील्ड्स को फिर से ऑर्डर करने के लिए किया जा सकता है।

हालाँकि, जब मैं उस टूल के लिए डायलॉग खोलता हूँ, तो मैं कहीं भी नहीं देख सकता हूँ जो कि फ़ील्ड्स को री-ऑर्डर करने में सक्षम बनाता है। मैं केवल यह देख सकता हूं कि चेकबॉक्स का उपयोग करके या उसी क्रम में खेतों को गिराया या गिराया जा सकता है।

यह मानते हुए कि यह संभव है कि कोई व्यक्ति अधिक विस्तार से चरणों का वर्णन कर सकता है, कृपया?

क्वेरी तालिका उपकरण संवाद बनाएं

जवाबों:


13

मुझे यह पता चला कि मेक क्वेरी टेबल टूल, कॉपी अस पाइथन स्निपेट , पाइथन विंडो और कॉपी फीचर्स टूल का उपयोग करके यह कैसे करें

मेक क्वेरी टेबल टूल को चलाने के बाद, केवल उन क्षेत्रों के माध्यम से खींचने के लिए जिन्हें मैं आउटपुट में प्रदर्शित करना चाहता था मैं इस कोड को जियोप्रोसेसिंग से पायथन स्निपेट के रूप में कॉपी कर सकता था। ArcMap के पायथन विंडो में परिणाम विंडो।

arcpy.MakeQueryTable_management("'C:/avhome/data/WAregional/wa regional.mdb/schools'","QueryTable","USE_KEY_FIELDS","#","schools.OBJECTID #;schools.Shape #;schools.CODE #;schools.NAME #;schools.TYPE #;schools.Y11STUDENT #;schools.Y12STUDENT #;schools.COORDGEOCO #;schools.ID #","#")

और बनने के लिए इसे संपादित करें:

arcpy.MakeQueryTable_management("'C:/avhome/data/WAregional/wa regional.mdb/schools'","QueryTable2","USE_KEY_FIELDS","#","schools.OBJECTID #;schools.Shape #;schools.Y12STUDENT #;schools.Y11STUDENT #;schools.NAME #","#")

ध्यान दें कि नया QueryTable2 आकार फ़ील्ड को बनाए रखता है (इसलिए मैं इसे कॉपी कर सकता हूं) और मैंने NAME, YR11STUDENT और YR12STUDENT फ़ील्ड पुन: व्यवस्थित कर दिए हैं। मैंने कुछ और क्षेत्रों को छोड़ने का अवसर भी इस्तेमाल किया।

अंतिम चरण QueryTable2 पर कॉपी फीचर्स टूल का उपयोग करना है जो मैंने अपने टूल डायलॉग के माध्यम से एक नया फीचर क्लास बनाने के लिए खेतों के साथ स्थायी रूप से फिर से ऑर्डर करने के लिए किया है।


2
नोट: आप फ़ील्ड नामों और उपनामों की सूची ([[fieldname1, alias1], [fieldname2, alias2] ...])
nimimhypervol

1
जब आप फ़ीचर क्लास से फ़ीचर क्लास चलाते हैं और फिर पायथन स्निपेट कॉपी करते हैं तो समान कार्यक्षमता उजागर होती है।
एलेक्स टेरेशेनकोव

2

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

यह सलाह दी जाती है कि एक बार मर्ज टूल का उपयोग करें और फिर कॉपी अस पाइथन स्निपेट का उपयोग करें और फिर मैन्युअल रूप से फ़ील्ड ऑर्डर बदलें और फिर पायथन कोड को पायथन विंडो में पेस्ट करें।

यहाँ एक अजगर लिपि है जो मर्ज टूल का उपयोग फ़ील्ड्स को पुन: क्रमबद्ध करने के लिए करती है ( यहाँ से कॉपी की गई है )

import arcpy

def reorder_fields(table, out_table, field_order, add_missing=True):
    """ 
    Reorders fields in input featureclass/table
    :table:         input table (fc, table, layer, etc)
    :out_table:     output table (fc, table, layer, etc)
    :field_order:   order of fields (objectid, shape not necessary)
    :add_missing:   add missing fields to end if True (leave out if False)
    -> path to output table
    """
    existing_fields = arcpy.ListFields(table)
    existing_field_names = [field.name for field in existing_fields]

    existing_mapping = arcpy.FieldMappings()
    existing_mapping.addTable(table)

    new_mapping = arcpy.FieldMappings()

    def add_mapping(field_name):
        mapping_index = existing_mapping.findFieldMapIndex(field_name)

        # required fields (OBJECTID, etc) will not be in existing mappings
        # they are added automatically
        if mapping_index != -1:
            field_map = existing_mapping.fieldMappings[mapping_index]
            new_mapping.addFieldMap(field_map)

    # add user fields from field_order
    for field_name in field_order:
        if field_name not in existing_field_names:
            raise Exception("Field: {0} not in {1}".format(field_name, table))

        add_mapping(field_name)

    # add missing fields at end
    if add_missing:
        missing_fields = [f for f in existing_field_names if f not in field_order]
        for field_name in missing_fields:
            add_mapping(field_name)

    # use merge with single input just to use new field_mappings
    arcpy.Merge_management(table, out_table, new_mapping)
    return out_table

उपयोग:

new_field_order = ["field2", "field3", "field1"]
reorder_fields(in_fc, out_fc, new_field_order)

क्या आप इसके टूल डायलॉग के माध्यम से ऐसा करने के लिए सटीक चरणों को सूचीबद्ध कर पाएंगे, जो आप इसका उपयोग करते हैं? मेरे 10.3.1 परीक्षण से अब ऐसा लगता है कि फ़ील्ड मैपिंग पैनल पुन: आदेश देने की अनुमति नहीं देता है। इसके अलावा, मुझे लगता है कि यह उत्तर किसी अन्य प्रश्न ( gis.stackexchange.com/questions/32119/… ) पर बेहतर होगा क्योंकि यह विशेष रूप से मेक क्वेरी टेबल टूल के उपयोग से संबंधित है।
PolyGeo

हाँ, मैंने देखा कि आपके प्रश्न शीर्षक में। लेकिन यह पोस्ट भविष्य के आगंतुकों का पक्ष ले सकती है जिन्हें केवल फ़ील्ड्स को फिर से व्यवस्थित करने की आवश्यकता है, सबसे आसान तरीका।
फरीद चरागि

फ़ील्ड को हटाकर और इसे फिर से डायलॉग में जोड़कर पुन: व्यवस्थित किया जा सकता है। हालांकि एक संपूर्ण दृष्टिकोण नहीं है।
फरीद चरागि

1
मैंने इस जवाब के लिए दूसरे प्रश्न पर वोट दिया, जहां मुझे लगता है कि यह अब सबसे अच्छा जवाब है, लेकिन क्योंकि यह "डुप्लिकेट उत्तर" है, और यहां पूछे गए सवाल का सीधा जवाब नहीं है, मुझे नहीं लगता कि दूसरा वोट उचित होगा।
PolyGeo

@FaridCher, कोड साझा करने के लिए धन्यवाद। बस पायथन में वास्तव में जल्दी से खेतों को फिर से ऑर्डर करने की जरूरत है, और यह बहुत अच्छा काम किया। बहुत बढ़िया।
एलेक्स टेरेशेंकोव

1

यह पढ़ चुके एक तालिका में विशेषताओं का आदेश फेरबदल और खेतों के क्रम को पुनर्व्यवस्थित करने की कोशिश कर, मैं ArcMap 10,1 में इस सरल समाधान नहीं मिला ...

  1. उस सुविधा पर राइट-क्लिक करें जिसे आप सामग्री की तालिका में बदलना चाहते हैं
  2. गुण क्लिक करें
  3. फ़ील्ड टैब पर क्लिक करें
  4. एक फ़ील्ड पर क्लिक करें
  5. "ले जाएँ ऊपर" या "नीचे ले जाएँ" तीर पर क्लिक करें
  6. लागू करें, ठीक है

यहाँ छवि विवरण दर्ज करें


3
अच्छा प्रयास। लेकिन दुर्भाग्य से यह केवल उस परत पर लागू होता है जिसे आपने मानचित्र दस्तावेज़ में जोड़ा है। फीचर क्लास में अभी भी परिभाषित क्रम में फ़ील्ड होंगे। तकनीकी रूप से बोलना, डेटाबेस में फ़ील्ड्स का कोई "ऑर्डर" नहीं है, लेकिन एक अंतिम उपयोगकर्ता के रूप में आप एक मैप क्लास डॉक्यूमेंट में एक फीचर क्लास को जोड़ने और आपके ऑर्डर के लिए संबंधित क्षेत्र में एक फ़ीचर टेबल को देखने के लिए सक्षम हो सकते हैं।
एलेक्स टेरासेनकोव 24/14

1

मेरे पास अपेक्षाकृत मजबूत तरीके से मॉडल बिल्डर के भीतर इसे पूरी तरह से करने की एक विधि है। यह स्थापित करने के लिए थोड़ा थकाऊ है, लेकिन कम से कम इसे एक बड़े मॉडल-बिल्डर विश्लेषण के हिस्से के रूप में डाला जा सकता है:

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

फिर से संगठित क्षेत्रों के साथ मॉडल को भंग करें

मैं आमतौर पर परिणामों की प्रतिलिपि बनाता हूं, फिर प्रत्येक फ़ील्ड का नाम बदल देता हूं (कॉपी कार्यात्मक रूप से बेमानी है और नाम बदलकर वहां भी किया जा सकता है लेकिन यह परतदार है)

प्रत्येक फ़ील्ड का नाम बदलने के लिए ऑल्टर फ़ील्ड टूल का उपयोग करें

ऑल्टर फ़ील्ड का नाम वापस मूल (FIRST को हटाकर)

सभी एक साथ एक मॉडल में ऐसा दिखता है:

उदाहरण के लिए मॉडल को फिर से लिखना

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