أكثر

تحديد إصدار قاعدة البيانات الجغرافية المحلية باستخدام ArcPy؟


يمكن لأي شخص الحصول على نسخة الإصدار من قاعدة البيانات الجغرافية المحلية ESRI ، باستخدام Arcpy؟ يجب أن أكون بسيطًا ، ومع ذلك ...

أستخدم وظيفة "وصف" في كل من قواعد البيانات الجغرافية الشخصية والملفات ، وأحتاج إلى استرداد خصائص مساحة العمل "الإصدار" أو "الإصدار الحالي" - إما أن تفعل ذلك: أريد تحديد قواعد البيانات التي تحتاج إلى الترقية (يتم تشغيل هذا المشروع في ArcGIS 10.0 ، أنا أبحث عن قواعد بيانات 9.x.)

لقد استندت إلى الكود أدناه على الخصائص المعروضة في تعليمات ESRI (هنا):

استيراد arcpy، os، sys data = r "C:  NEW_GDB.gdb" desc_gdb = arcpy.Describe (data) if hasattr (desc_gdb، "workspaceType"): print desc_gdb.workspaceType print desc_gdb.workspaceFactoryProgID else: print "no 'workspaceFactoryProgID else: print" no' workspace 'property' if hasattr (desc_gdb، "release"): print desc_gdb.release else: print " n no 'release' property" if hasattr (desc_gdb، "currentRelease"): print desc_gdb.currentRelease else: print "no 'currentRelease' منشأه"

وهذه هي النتيجة التي أحصل عليها:

>>> LocalDatabase esriDataSourcesGDB.FileGDBWorkspaceFactory.1 لا توجد خاصية 'إطلاق' لا خاصية 'currentRelease' >>>

هذا غريب ، يجب أن تعمل التعليمات البرمجية الخاصة بك. يمكنني الحصول على هذه المعلومات مثلما حاولت تمامًا:

>>> gdb = r'E:  HamiltonCo  Soil_Library  AgLand_Adjustment  CSR_AgLand.gdb '>>> desc = arcpy.Describe (gdb) >>> desc.release u'3،0،0' >>> desc. CurrentRelease صحيح >>>

إذا كنت لا تزال تواجه مشكلات هنا ، فهناك حل Python آخر ، لكنه لا يستخدم Arcpy. بدلاً من ذلك ، يستخدم ArcObjects والوحدة النمطية comtypes. ستحتاج أيضًا إلى تنزيل وحدة المقتطفات.

يمكنك بعد ذلك تشغيل هذه الوظيفة:

def CheckGDBRelease (sPath): "" فتح ملف GDB "" "InitStandalone () استيراد comtypes.gen.esriGeoDatabase كـ esriGeoDatabase استيراد comtypes.gen.esriDataSourcesGDB مثل esriDataSourcesGDB pWSF = NewObj (esriDataSourcesGDBactory.FaceGeoDatabase مثل esriGeoDatabase import comtypes.gen.esriDataSourcesGDB كـ esriDataSourcesGDB pWSF = NewObj (esriDataSourcesGDactory.FileGeoDatabase) .OpenFromFile (sPath، 0) pGDBRelease = CType (pWS، esriGeoDatabase.IGeodatabaseRelease2) ترجع pGDBRelease.CurrentRelease، pGDBRelease.MajorVersion، pGDBRelease.MinorVersion  Hamm = CheckGDBRelease (r'E:  justVersion  Hamm = CheckGDBRelease (r'E:  justVersion  Hammp = CheckGDBRelease (r'E: tup

الذي طبع:

>>>  (صحيح ، 3 ، 0) >>>

قد يكون هذا الخيار أكثر صعوبة من قيمته على الرغم من حل آركبي الخاص بك ينبغي أن يكون العمل

تعديل:

لقد أجريت العديد من التعديلات على وحدة المقتطفات مع المزيد من الوظائف المساعدة. هذا هو الكود الكامل الخاص بي إذا كنت تريد استخدامه بدلاً من ذلك:

# تم اعتماد وتعديل معظم هذا الرمز من: # # https://bitbucket.org/maphew/canvec/src/eaf2678de06f/Canvec/Scripts/parco.py # # For Bolton & Menk، Inc. استخدم # # Snippets.py # ************************************************** # تم التحديث لـ ArcGIS 10.2 # *********************************************** *** # يتطلب تثبيت حزمة comtypes # متوفر على: http://sourceforge.net/projects/comtypes/ # بمجرد تثبيت comtypes ، يجب إجراء التعديلات التالية للتوافق مع ArcGIS 10.2: # 1) حذف automation.pyc، automation.pyo، safearray.pyc، safearray.pyo # 2) تحرير automation.py # 3) أضف الإدخال التالي إلى قاموس _ctype_to_vartype (السطر 794): # POINTER (BSTR): VT_BYREF | VT_BSTR، # * *********************************************** # معظم تم اعتماد هذا الرمز وتعديله من: # https://bitbucket.org/maphew/canvec/src/eaf2678de06f/Canvec/Scripts/parco.py # تأكد من تشغيله في بنية استيراد 32 بت إذا كان Struct.calcsize ('P ') * 8! = 32: ارفع ImportError ('يجب استخدام ArcObjects في 32 بت!') استيراد نظام التشغيل glob ACCESS_MODE = {0: 'unknown'، 2: 'write'، 4: 'read only'، 6: 'read / write'} def load_mod (عامل التصفية) = لا شيء): "تحميل قائمة بجميع الوحدات (ملفات * .olb) اختياري: عامل التصفية - حرف بدل للبحث به. إذا كنت تريد العثور على جميع الوحدات التي تبدأ بـ "G" ، فما عليك سوى استخدام "g" لعامل التصفية "olb = '* .olb' if filter: olb = 'esri {0} *. olb'.format (filter) mods = glob.glob (os.path.join (GetLibPath ()، olb)) إذا كانت التعديلات: all_mods =ict ((i، os.path.basename (m)) لـ i، m في التعداد (mods)) لـ k، v بالفرز (all_mods.iteritems ()): طباعة '{0}: {1}'. تنسيق (k، v) إرجاع getModule (all_mods [input (' n اختر رقم للوحدة  n')]) طباعة 'لم تجد أي وحدات! return None def load_all (): "تحميل كافة مكتبات الكائنات" من comtypes.client import GetModule mods = glob.glob (os.path.join (GetLibPath ()، '* .olb')) للوضع في الوضعيات: GetModule (mod ) إرجاع InstallInfo (): "" Gets ArcGIS Install Info "" "# Get ArcObjects version import comtypes من comtypes.client import GetModule g = comtypes.GUID (" {6FCCEDE0-179D-4D12-B586-58C88D26CA78} ") GetModule ((g، 1، 0)) استيراد comtypes.gen.ArcGISVersionLib كـ esriVersion pVM = NewObj (esriVersion.VersionManager، esriVersion.IArcGISVersion) إرجاع pVM.GetVersions (). التالي () def GetLibPath (): "مرجع إلى دليل com الذي منازل ArcObjects Ojbect Libraries (* .OLB) "إرجاع os.path.join (InstallInfo () [2] ، 'com') def GetVersion ():" "" إرجاع إصدار ArcGIS "" "إرجاع InstallInfo () [1] def getModule (sModuleName): "تحميل مكتبة الكائنات بالاسم" من استيراد comtypes.client GetModule olb = os.path.abspath (os.path.join (GetLibPath ()، sModuleName)) إرجاع GetModule (olb) def GetStandaloneModules (): "" "استيراد ArcGI الأكثر استخدامًا مكتبات S للنصوص المستقلة "" "getModule (" esriSystem.olb ") getModule (" esriGeometry.olb ") getModule (" esriCarto.olb ") getModule (" esriDisplay.olb ") getModule (" esriGeoDatabase.olb (") getModule (" esriGeoDatabase.olb ") getModule "esriDataSourcesGDB.olb") getModule ("esriDataSourcesFile.olb") getModule ("esriOutput.olb") def GetDesktopModules (): "" "استيراد مكتبات ArcGIS Desktop الأساسية" "" getModule ("esriFramework.olb") getModule ("esriFramework.olb") getModule ("esriFramework.olb") .olb ") getModule (" esriArcCatalogUI.olb ") # **** وظائف المساعدة **** def GetCurrentApp ():" "" إرجاع التطبيق إذا كان البرنامج النصي قيد التشغيل من داخل حدود تطبيق ArcGIS " "" import comtypes.gen.esriFramework لأن esriFramework يعيد NewObj (esriFramework.AppRef، esriFramework.IApplication) def GetApp (app = "ArcMap"): InitStandalone () "" "يجب أن يكون التطبيق" ArcMap "(افتراضي) أو" ArcCatalog "  n  قم بتنفيذ GetDesktopModules () أولاً "" "إذا لم يكن كذلك (app ==" ArcMap "أو التطبيق ==" ArcCatalog "): يجب أن يكون تطبيق print" ArcMap "أو" ArcCatalog "" لا يرجع بلا استيراد comtypes.gen.esriFram ework كـ esriFramework import comtypes.gen.esriArcMapUI مثل استيراد esriArcMapUI comtypes.gen.esriCatalogUI كـ esriCatalogUI pAppROT = NewObj (esriFramework.AppROT، esriFramework.IAppROT) iCount = pAppRount.Count في حالة الإرجاع: ): pApp = pAppROT.Item (i) print pApp if app == "ArcCatalog": if CType (pApp، esriCatalogUI.IGxApplication): إرجاع pApp تابع إذا كان CType (pApp ، esriArcMapUI.IMxApplication): إرجاع pApp إرجاع بلا قيمة NewObj ( COMClass ، COMInterface): "" "إنشاء كائن POINTER جديد حيث  n  MyClass هي الفئة التي سيتم إنشاء مثيل لها ،  n  n  MyInterface هي الواجهة التي سيتم تعيينها من comtypes.client import CreateObject try: ptr = CreateObject (COMClass، interface = COMInterface) إرجاع ptr باستثناء: إرجاع None def CType (obj، interface): "" "Casts obj to interface وإرجاع comtypes POINTER أو None" "" try: newobj = obj.QueryInterface (واجهة) تُرجع newobj باستثناء : return None def CLSID (MyClass): "" "إرجاع CLSID لـ MyClass كسلسلة CLSID هي ال e GUID لفئة COM (CoClass) المطابقة لمثيلات فئة الكائن "" "إرجاع str (MyClass._reg_clsid_) # ********* مستقل **** def InitStandalone ():" "" ترخيص ArcGIS المبدئي المستقل "" "# استيراد إصدار ArcObjects من comtypes.client استيراد GetModule g = comtypes.GUID (" {6FCCEDE0-179D-4D12-B586-58C88D26CA78} ") استيراد GetModule ((g، 1، 0)) comtypes.gen.ArcGISVersionLib مثل esriVersion استيراد comtypes.gen.esriSystem مثل esriSystem pVM = NewObj (esriVersion.VersionManager، esriVersion.IArcGISVersion) # تأكد من أن الإصدار يتطابق إذا لم يكن pVM.LoadVersion (esriVersion.esri، FersionManager، esriVersion.IArcGISVersion) # تأكد من أن الإصدار يتطابق إذا لم يكن pVM.LoadVersion (esriVersion.esri): الحصول على ترخيص pInit = NewObj (esriSystem.AoInitialize، esriSystem.IAoInitialize) ProductList = [esriSystem.esriLicenseProductCodeAdvanced،  esriSystem.esriLicenseProductCodeStandard،  esriSystem.esriLicenseProductCodeBasic. esriLicense متوفر e: متابعة الترخيصStatus = pInit.Initialize (eProduct) return (licenseStatus == esriSystem.esriLicenseCheckedOut) إرجاع False def check_extension (ext_code): "" "يحدد ما إذا كان قد تم سحب الامتداد أم لا ، وإرجاع صحيح أو خطأ مطلوب: ext_code - كود الامتداد للترخيص (int) ، على سبيل المثال ، Spatial Analyst هو الرمز 10. بعض رموز الامتداد الشائعة: 6: Geostatistical Analyst 8: Network Analyst 9: 3D Analyst 10: Spatial Analyst http://resources.arcgis.com/en/ help / arcobjects-net / componententhelp / index.html # // 004200000021000000 "" من comtypes.gen استيراد esriSystem # الآن اتصل بـ AoInitialize pInit = NewObj (esriSystem.AoInitialize، esriSystem.IAoInitialize) # check extension return pInit.IsExtension (inthecked. ext_code)) def mxd_version (mxd): #getModule ('esriCarto') import comtypes.gen.esriCarto as esriCarto pMapDoc = NewObj (esriCarto.MapDocument، esriCarto.IMapDocument) pMapDoc.Open (mapDoc.Open) . أغلق () إن لم يكن ver_info [0]: قم بإرجاع '.'. Join (map (str، ver_info [1: 3])) طباعة "لا توجد معلومات إصدار متوفرة أو تم حفظ mxd كمستند جديد" إرجاع بلا رسالة def (message = "Hello world"، title = "ARDemo"): "يفتح مربع حوار مربع مع زر موافق مطلوب: رسالة - نص لعنوان مربع الرسالة - عنوان مربع الرسالة "من ctypes import c_int ، WINFUNCTYPE ، windll من ctypes.wintypes import HWND ، LPCSTR ، UINT prototype = WINFUNCTYPE (c_int ، HWND ، LPCSTR ، LPCSTR ، UINT) fn = prototype (("MessageBoxA"، windll.user32)) إرجاع fn (0، message، title، 0) def create_mxd (mapDoc): getModule ('esriCarto.olb') استيراد comtypes.gen.esriCarto كـ esriCarto mxd = NewObj (esriCarto.MapDocument، esriCarto.IMapDocument) mxd.New (mapDoc) mxd.Close () إرجاع mapDoc def ref_mxd (mxd_path): getModule ('esriArcMapUI.olb') getModule. gen.esriArcMapUI مثل esriArcMapUI استيراد comtypes.gen.esriCarto مثل esriCarto # إنشاء mapDoc وإرجاع NewObj (esriCarto.MapDocument ، esriCarto.IMapDocument). فتح (mxd_path) مع Standalone_Open "openSDE (SDE)" "" GetStandaloneModules () InitStandalone () استيراد comtypes.gen.esriSystem مثل استيراد esriSystem comtypes.gen.esriGeoDatabase كـ esriGeoDatabase استيراد comtypes.gen.esriDataSourcesGDB كـ esriDataSourcesGDB pPropSet = NewObj (esertriSetropetropetropetropetropetropetropetropetropetropetropetropetropet. SERVER "،" sunprod1 ") pPropSet.SetProperty (" USER "،" / ") pPropSet.SetProperty (" INSTANCE "،" sde: oracle10g: /؛ LOCAL = PRODUCTION_TUCSON ") pPropSet.SetProperty (" AUTHENTICATION_M "OSE" ) pPropSet.SetProperty ("VERSION"، "SDE.DEFAULT") pWSF = NewObj (esriDataSourcesGDB.SdeWorkspaceFactory،  esriGeoDatabase.IWorkspaceFactory) pWS = pWSF.Open (pPropSet، CTriype (0) patabase = "patabaseSet، CTriype (0) patabase =" اسم مساحة العمل: "+ pDS.BrowseName print" فئة مساحة العمل: "+ pDS.Category إرجاع pWS def Standalone_OpenFileGDB (sPath):" "فتح ملف GDB" "" GetStandaloneModules () إن لم يكن InitStandalone (): طباعة "لدينا كتل منه 'حول الجزء الخلفي ... "إرجاع استيراد comtypes.gen.esriGeoDatabase كـ esriGeoDatabase impo rt comtypes.gen.esriDataSourcesGDB مثل esriDataSourcesGDB pWSF = NewObj (esriDataSourcesGDB.FileGDBWorkspaceFactory،  esriGeoDatabase.IWorkspaceFactory) pWS = pWSF.OpenFromFile (sPath، (0) patabaseSetFromFile (sPath، (0) BrowseName print "Workspace category:" + pDS.Category إرجاع pWS def CheckGDBRelease (sPath): "" "فتح ملف GDB" "" InitStandalone () استيراد comtypes.gen.esriGeoDatabase كـ esriGeoDatabase استيراد comtypes.gen.esriDataSourcesGDB مثل esriDataSourcesFGDO pWb (esriDataSourcesGDB.FileGDBWorkspaceFactory،  esriGeoDatabase.IWorkspaceFactory) pWS = pWSF.OpenFromFile (sPath، 0) pGDBRelease = CType (pWS، esriGeoDatabase.IGeodatabaseRelease2) عودة pGurrentDatabase.IGeodatabaseRelease2) InitStandalone () استيراد comtypes.gen.esriGeoDatabase كـ esriGeoDatabase استيراد comtypes.gen.esriDataSourcesGDB كـ esriDataSourcesGDB pWSF = NewObj (esriDataSourcesGDB.FileGDBW orkspaceFactory،  esriGeoDatabase.IWorkspaceFactory2) pWS = pWSF.OpenFromFile (sFileGDB، 0) pFWS = CType (pWS، esriGeoDatabase.IFeatureWorkspace) # تحديد ما إذا كان FC موجودًا قبل محاولة فتح # http://edndoc.esri.com/.2 /ComponentHelp/esriGeoDatabase/IWorkspace2_NameExists.htm # 5 = نوع بيانات فئة الميزة pWS2 = CType (pWS، esriGeoDatabase.IWorkspace2) إذا كان pWS2.NameExists (5، sFCName): pFC = pFCWS.OpenFeatureClass (sFC = None) *٪ s غير موجود '٪ sFCName يُرجع pFC def getUnitSize (my_size ، التقريب = 1): "" "سيعيد الحجم بالبايت إلى تنسيق يمكن قراءته من قبل الإنسان" "" إذا لم يكن الأمر كذلك (my_size، (float، int، long)) : my_size = sys.getsizeof (my_size) theSize = '0 KB' if my_size == 0: theSize = '0 KB' if my_size <= 1024: theSize = '1 KB' elif my_size> 1024 and my_size <= 1048576: theSize = '٪ s KB'٪ round (my_size / 1024.0، rounding) elif my_size> 1048576 و my_size <= 1073741824: theSize = '٪ s MB'٪ round (my_size / 1048576.0، التقريب) elif my_size> 1073741824 و my_si ze <= 1099511627776: theSize = '٪ s GB'٪ round (my_size / 1073741824.0 ، التقريب) elif my_size> = 1099511627776: theSize = '٪ s TB'٪ round (my_size / 1099511627776.0 ، التقريب) وإلا: # حجم الإرجاع الافتراضي في MB إرجاع '٪ s MB'٪ round (my_size / 1048576.0 ، التقريب) إرجاع الحجم def GetModifiedDate (fc، statType = 2): "" "الحصول على معلومات حول فئة الميزة وإرجاع مجموعة من (الوضع والحجم والوقت) المطلوبة: fc - فئة الميزة للتحقق اختياري: statType - نوع معلومات الوقت كما هو موضح أدناه. الإعداد الافتراضي هو 2 0 إعادة آخر مرة تم الوصول إليها. 1 قم بإرجاع آخر وقت تم إنشاؤه فيه. 2 إرجاع وقت آخر تعديل. تم التعديل من: https://geonet.esri.com/thread/74409 "" "استيراد التاريخ والوقت InitStandalone () استيراد comtypes.gen.esriSystem مثل استيراد esriSystem comtypes.gen.esriGeoDatabase كـ esriGeoDatabase استيراد comtypes.gen.esriDataSourcesGDB مثل esriDataSourcesGDB # Open FGDB gdb، tableName = os.path.split (fc) pWS = Standalone_OpenFileGDB (gdb) # إنشاء مجموعة خصائص فارغة pPropSet = NewObj (esriSystem.PropertySet، esriSystem.IPropertySet) pPropSet.SetProperty (" FGDB كـ IFeatureWorkspace pFW = CType (pWS، esriGeoDatabase.IFeatureWorkspace) # افتح الجدول pTab = pFW.OpenTable (tableName) # إرسال الجدول كـ IDatasetFileStat pDFS = CType (pTab، esriGeoDatabase.IDataset تاريخ التعديل .datetime.fromtimestamp (pDFS.StatTime (statTime)). strftime ('٪ Y-٪ m-٪ d٪ H:٪ M:٪ S') يعود (ACCESS_MODE [pDFS.StatMode] ، getUnitSize (pDFS.StatSize) ، mod) # **** **** ArcMap **** def MapRefresh (current = True): "" "يقوم بتحديث جدول محتويات ArcMap والعرض النشط" "من comtypes.gen imp ort esriArcMapUI # أعد تحديث العرض النشط و TOC إذا كان الحالي: pApp = GetCurrentApp () else: pApp = GetApp () pDoc = pApp.Document pMxDoc = CType (pDoc ، esriArcMapUI.IMxDocument) pMxDoc.UpdateContents () pMxDoc.UpdateContents () pMxDoc.UpdateContents () pMxDoc. del pApp ، pMxDoc إرجاع ArcMap_GetSelectedGeometry (bStandalone = False): GetDesktopModules () if bStandalone: ​​InitStandalone () pApp = GetApp () else: pApp = GetCurrentApp () إن لم يكن pApp: طباعة "وجدنا هذه الملعقة ، سيدي." comtypes.gen.esriFramework as esriFramework import comtypes.gen.esriArcMapUI مثل esriArcMapUI import comtypes.gen.esriSystem as esriSystem import comtypes.gen.esriCarto كـ esriCarto import comtypes.gen.esriGeseoDatabase كـ esriGeoDatabase استيراد comtypes. هندسة الميزات pDoc = pApp.Document pMxDoc = CType (pDoc، esriArcMapUI.IMxDocument) pMap = pMxDoc.FocusMap pFeatSel = pMap.FeatureSelection pEnumFeat = CType (pFeatSel، esriGumFeat ).IEnet f not pFeat: print "لم يتم العثور على تحديد." إرجاع pShape = pFeat.ShapeCopy eType = pShape.GeometryType if eType == esriGeometry.esriGeometryPoint: print "Geometry type = Point" elif eType == esriGeometry.esriGeometryPolyline: Line "elif eType == esriGeometry.esriGeometryPolygon: print" Geometry type = Poly "else: print" Geometry type = Other "إرجاع pShape def ArcMap_GetEditWorkspace (bStandalone = False): GetDesktopModules () إذا bStandalone: ​​() InitStandalone else: pApp = GetCurrentApp () GetModule ("esriEditor.olb") استيراد comtypes.gen.esriSystem مثل استيراد نظام esriSystem comtypes.gen.esriEditor باعتباره esriEditor import comtypes.gen.esriGeoDatabase كـ esriGeoDatabase pID = NewObj (esriSystem.UID، ) pID.Value = CLSID (esriEditor.Editor) pExt = pApp.FindExtensionByCLSID (pID) pEditor = CType (pExt ، esriEditor.IEditor) إذا pEditor.EditState == esriEditor.esriStateEditing: pWE esriGeoDatabase.IDataset) اطبع "مساحة العمل ce name: "+ pDS.BrowseName print" فئة مساحة العمل: "+ pDS.Category إرجاع معرف ArcMap_GetSelectedTable (bStandalone = False): GetDesktopModules () if bStandalone: ​​InitStandalone () pApp = GetApp () else: pApp = GetCurrentApp () استيراد comtypes .gen.esriFramework كـ esriFramework استيراد comtypes.gen.esriArcMapUI كـ esriArcMapUI استيراد comtypes.gen.esriGeoDatabase كـ esriGeoDatabase pDoc = pApp.Document pMxDoc = CType (pDoc، esriArcMapUI.IMxDocument) . "return pTable = CType (pUnk، esriGeoDatabase.ITable) إذا لم يكن pTable: طباعة" لم يتم تحديد جدول. "إرجاع pDS = CType (pTable ، esriGeoDatabase.IDataset) طباعة" الجدول المحدد: "+ pDS.Name # **** **** ArcCatalog معرّف ArcCatalog_GetSelectedTable (bStandalone = False): GetDesktopModules () إذا كان bStandalone: ​​InitStandalone () pApp = GetApp ("ArcCatalog") else: pApp = GetCurrentApp () استيراد comtypes.gen.esriFramework كـ esrigenramework. esriCatalogUI مثل استيراد esriCatalogUI comtypes.g en.esriCatalog كـ esriCatalog استيراد comtypes.gen.esriGeoDatabase كـ esriGeoDatabase pGxApp = CType (pApp ، esriCatalogUI.IGxApplication) pGxObj = pGxApp.SelectedObject إذا لم يكن pGxObj: طباعة "لا شيء محدد" ، إرجاع pGxGasObj: ليس pGxDS: print "لم يتم تحديد أية مجموعة بيانات." قم بإرجاع eType = pGxDS.Type إذا لم يكن كذلك (eType == esriGeoDatabase.esriDTFeatureClass أو eType == esriGeoDatabase.esriDTTable): طباعة "لم يتم تحديد جدول." إرجاع pDS = pGxDS.Dataset pTable = (pDS، esriGeoDatabase.ITable) اطبع "الجدول المحدد:" + pDS.Name # **** وظائف المساعد المخصصة **** def iterLayers (pApp = GetApp ()): "" "ينشئ منشئًا للطبقات" "" من comtypes.gen استيراد esriArcMapUI، esriCarto pDoc = pApp.Document pMxDoc = CType (pDoc، esriArcMapUI.IMxDocument) pMap = pMxDoc.FocusMap pAV = CType (pMap، esriCarto.IActapView in) # reference : العائد pMap.Layer (i) def alter_alias (fc، f_dict): "تغيير أسماء الحقول على مستوى قاعدة البيانات مطلوب: fc - فئة المعالم (يجب أن تكون في gdb) f_dict - قاموس الحقول {field_alias: new_alias،…} "getModule ('esriGeoDatabase.olb') getModule ('esriDataSourcesGDB.olb') استيراد comtypes.gen.esriGeoDatabase مثل esriGeoDatabase # get at fc properties pFC = OpenFeatureClass (* os.path.split (fc)) # الحصول على مكتبة تحرير المخطط pSE = CType (pFC ، esriGeoDatabase.IClassSchemaEdit) # كرر من خلال أسماء مستعارة و قم بتحديث للحقل ، الاسم المستعار في f_dict.iteritems (): جرب: pSE.AlterFieldAliasName (حقل ، اسم مستعار) اطبع "تغيير الحقل" {0} "الاسم المستعار إلى: تنسيق" {1} ". (حقل ، اسم مستعار) باستثناء: طباعة 'خطأ في تغيير الحقل" {0} "' s alias to: "{1}" '. تنسيق (حقل ، اسم مستعار) إرجاع def alter_fieldName (fc، f_dict): "تغيير أسماء الحقول على مستوى قاعدة البيانات مطلوب: fc - feature class (must be in gdb) f_dict - قاموس الحقول {field_name: new_name،…} "import comtypes.gen.esriGeoDatabase كـ esriGeoDatabase # get at fc properties pFC = OpenFeatureClass (* os.path.split (fc)) # get at schema تحرير مكتبة pSE = CType (pFC، esriGeoDat abase.IClassSchemaEdit4) # كرر من خلال الأسماء المستعارة للديكت وتحديث للحقل ، new_name في f_dict.iteritems (): جرب: pSE.AlterFieldName (field، new_name) اطبع اسم الحقل الذي تم تغييره "{0}" إلى: "{1 } "". تنسيق (حقل ، new_name) باستثناء: طباعة "خطأ في تغيير الحقل" {0} "اسم  إلى:" {1} ". تنسيق (حقل ، اسم_جديد) إرجاع

يمكنك استعمال التحميل الكل()وظيفة لتحميل جميع مكتبات ArcObjects. المهم هو أنك تحتاج إلى تحميل مكتبات "olb" أولاً. لذلك أود أن أسمي هذا أولاً حتى يُنشئ جميع أغلفة Python داخل ملفالجنرالمجلد في حزمة comtypes. بمجرد إنشاء جميع الأغلفة ، يجب أن تعمل الوظيفة التي قمت بنشرها (المضمنة في البرنامج النصي الكامل).

يمكنك ترك هذا كوحدة واحدة ، أو قمت بالتنسيق كحزمة (لدي وحدات أخرى بالداخل أيضًا مثل العمل مع عناصر الخرائط المحيطة):

arcobjects <- folder __init__.py <- هذا هو النص الكامل الذي قمت بنشره.

تحرير 2:

أنا الآن أرى لماذاInitStandalone ()لا يعمل من أجلك. إذا كانت علامتك صحيحة وكنت تستخدم ArcGIS 10.0 ، فإن رموز المنتج مختلفة (أيesriSystem.esriLicenseProductCode متقدميعادلesriSystem.esriLicensProductCodeArcInfo). نظرًا لأنك تستخدم ArcGIS 10.0 ، استبدل وظيفة InitStandalone () برمز 10.0 هذا:

def InitStandalone (): "" "ترخيص ArcGIS المبدئي المستقل" "" # تعيين إصدار ArcObjects استيراد comtypes من comtypes.client import GetModule g = comtypes.GUID ("{6FCCEDE0-179D-4D12-B586-58C88D26CA78}") GetModule ((( g، 1، 0)) استيراد comtypes.gen.ArcGISVersionLib كـ esriVersion استيراد comtypes.gen.esriSystem مثل esriSystem pVM = NewObj (esriVersion.VersionManager، esriVersion.IArcGISVersion) إن لم يكن pVM.LoadVersion (esriVersion.esriktop: "10.0 return False # الحصول على ترخيص pInit = NewObj (esriSystem.AoInitialize، esriSystem.IAoInitialize) ProductList = [esriSystem.esriLicenseProductCodeArcInfo،  esriSystem.esriLicenseProductCodeArcEditor،  esriSystem.esriLArcatus = = esriSystem.esriLicenseAvailable: متابعة LicenseStatus = pInit.Initialize (eProduct) return (LicenseStatus == esriSystem.esriLicenseCheckedOut) إرجاع خطأ


شاهد الفيديو: أنواع قواعد البيانات الجغرافية (شهر اكتوبر 2021).