फ़ाइल जियोडेटाबेस फ़ीचर वर्ग की पूरी हद तक पुनर्गणना?


19

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

क्या इन मूल्यों को पुनर्गणना करने का कोई तरीका है?

मुझे पूरा यकीन है कि ArcMap में सभी सुविधाओं को संपादित करने के लिए यह समस्या होनी चाहिए ...


1
दुर्भाग्य से आर्क: REBOX एक ArcGIS उपकरण के रूप में :-) में अनुवाद किया नहीं जा सके थे
PolyGeo

जवाबों:


6

Esri के पास अब 10.4 (hooray) में इसके लिए एक टूल है: Recalculate Feature Class Extent।

मैं इस मुद्दे पर चल रहा था, जब मैं एक फीचर क्लास बना रहा था और आर्कपी के साथ उसमें ज्यामिति लिख रहा था। जाहिरा तौर पर वे उपकरण हद तक अद्यतन नहीं करते हैं (शायद प्रदर्शन कारणों के लिए एक अच्छा विचार)।

मैं 10.2.2 में @Lou के सुझाव के साथ हद तक रीसेट करने में सफल रहा:

arcpy.CompressFileGeodatabaseData_management(output_workspace)
arcpy.UncompressFileGeodatabaseData_management(output_workspace)

19

ArcCatalog में सुविधा वर्ग पर राइट-क्लिक करें और गुण पर जाएं। फ़ीचर एक्सटेंट टैब में रिकॉलक्यूट पर क्लिक करें। और वॉयला!

मैं ArcGIS 10.2.1 का उपयोग कर रहा हूं


6

जियोडेटाबेस को संकुचित करने से आपके स्थानिक सूचकांक को सुव्यवस्थित किया जाएगा

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

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Compacting_file_and_personal_geodatabases/003n0000007t000000/

कॉम्पैक्ट (डेटा प्रबंधन)

"250 एमबी से बड़े हो जाने पर व्यक्तिगत जियोडैट डेटाबेस को कॉम्पैक्ट करने की सिफारिश की जाती है। यदि डेटाबेस पर डेटा प्रविष्टि, विलोपन या सामान्य संपादन अक्सर किया जाता है, तो इष्टतम प्रदर्शन सुनिश्चित करने के लिए डेटाबेस को नियमित रूप से कॉम्पैक्ट किया जाना चाहिए।"

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00170000000n000000


4
यदि आप बड़े पैमाने पर डिलीट कर रहे हैं, तो यह एक महत्वपूर्ण बात है (विशेष रूप से बड़े जियोडैट डेटाबेस के लिए)। मैंने व्यक्तिगत रूप से इसे हद तक समस्या को ठीक नहीं किया है, लेकिन यह निश्चित रूप से एक अच्छा विचार है।
लो

6

यहां ArcGIS 10 के लिए एक आर्किटिक्स ऐड-इन है, जो सुविधा वर्ग सीमा को अद्यतन करने के लिए एक कमांड जोड़ता है, संभवतः @ रागी के VBA कोड के समान विधि का उपयोग कर रहा है:


यह लिंक 10.1 आर्कगिस.com
साइमन

5

जियोडाटाबेस एक्सटेंड हमेशा फैलता है - कभी भी स्वचालित रूप से छोटा नहीं होता है। कॉम्पेक्टिंग और कॉम्प्रिहेन्सिंग केवल स्टोरेज और विखंडन का अनुकूलन करता है, लेकिन एक्स्टेंट ही नहीं। मैं पहले स्थानिक सूचकांक को फिर से बनाने की कोशिश करूँगा और देखूंगा कि क्या यह चाल है।

अपडेट करें:

चूंकि स्थानिक सूचकांक पुनर्निर्माण चाल नहीं करता है, मुझे यकीन है कि निम्नलिखित VBA कोड होगा:

Public Sub reCalcExt()
  Dim pGXApplication As IGxApplication
  Set pGXApplication = Application

  Dim pGxObject As IGxObject
  Set pGxObject = pGXApplication.SelectedObject

  If Not TypeOf pGxObject.InternalObjectName Is IFeatureClassName Then
    Exit Sub
  End If

  Dim pName As IName
  Set pName = pGxObject.InternalObjectName
  Dim pSchemaLock As ISchemaLock
  Set pSchemaLock = pName.Open

  pSchemaLock.ChangeSchemaLock esriExclusiveSchemaLock
  Dim pFeatureClassManage As IFeatureClassManage
  Set pFeatureClassManage = pSchemaLock
  pFeatureClassManage.UpdateExtent

  Exit Sub

ErrHandler:
  pSchemaLock.ChangeSchemaLock esriSharedSchemaLock
End Sub

आप किसी अन्य ईएसआरआई समर्थित प्रोग्रामिंग भाषा में ऐसा कर सकते हैं। ट्रिक को स्कीमैटॉक प्राप्त करना है और IFeatureClassManage :: UpdateExtent पद्धति का उपयोग करना है ।


मैंने एक नमूना डेटासेट पर स्थानिक सूचकांक को फिर से बनाने की कोशिश की, और इससे मेरे परीक्षण के मामले में मदद नहीं मिली। मैं ईमानदारी से हैरान था।
लू

कुछ कोड के साथ मेरे जवाब को अपडेट करना।
रागी यासर बुरहुम

इस तरह, यह ArcCatalog VBA कोड है।
रागी यासर बुरहुम

4

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

जब आप वास्तव में डेटा का उपयोग कर रहे होते हैं, तो एक संपादन / आर्केपा सत्र के दौरान, आप हमेशा सभी का चयन कर सकते हैं | एक समाधान के रूप में चयनित ज़ूम। यह बहुत अच्छा नहीं है, लेकिन मैंने अपने वर्कफ़्लो में इसका उपयोग किया है जब तक कि मुझे एक ब्रेकिंग पॉइंट नहीं मिला, जहां मैं उस कंप्रेसेज़ / डीकंप्रेस ट्रिक को कर सकता था।

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


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

3

यदि आप अपने mxd दस्तावेज़ में फ़ीचर श्रेणी की सीमा को अद्यतन करना चाहते हैं तो कोड का यह हिस्सा आपकी मदद कर सकता है:

Dim pLayer As ILayer
        Dim pEnumLayer As IEnumLayer
        Dim pFeatureLayer As IFeatureLayer
        Dim pFeatureClass As IFeatureClass
        Dim pFeatureClassManage As IFeatureClassManage


        pEnumLayer = pMap.Layers
        pLayer = pEnumLayer.Next

        Do Until pLayer Is Nothing
            If TypeOf pLayer Is FeatureLayer Then
                pFeatureLayer = pLayer
                pFeatureClass = pFeatureLayer.FeatureClass
                pFeatureClassManage = pFeatureClass
                pFeatureClassManage.UpdateExtent()
            End If
            pLayer = pEnumLayer.Next
        Loop
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.