Mais

Determinando a versão de lançamento do geodatabase local com ArcPy?


Alguém pode obter a versão de lançamento de um geodatabase ESRI local, usando arcpy? Eu deveria ser simples, e ainda ...

Eu uso a função "Descrever" em bancos de dados geográficos pessoais e de arquivo, e preciso recuperar as propriedades do espaço de trabalho "release" ou "currentRelease" - qualquer um faria: Eu quero localizar bancos de dados que precisam de atualização (este projeto é executado no ArcGIS 10.0, Estou procurando bancos de dados 9.x.)

Baseei o código abaixo nas propriedades expostas na ajuda do ESRI (aqui):

import 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 'workspaceType 'propriedade "if hasattr (desc_gdb," release "): print desc_gdb.release else: print"  nno' release 'property "if hasattr (desc_gdb," currentRelease "): print desc_gdb.currentRelease else: print" no' currentRelease ' propriedade"

E aqui está o resultado que obtenho:

>>> LocalDatabase esriDataSourcesGDB.FileGDBWorkspaceFactory.1 sem propriedade 'release' sem propriedade 'currentRelease' >>>

Isso é estranho, seu código deve funcionar. Posso obter essas informações exatamente como você tentou:

>>> gdb = r'E:  HamiltonCo  Soil_Library  AgLand_Adjustment  CSR_AgLand.gdb '>>> desc = arcpy.Describe (gdb) >>> desc.release u'3,0,0' >>> desc. currentRelease True >>>

Se você ainda está tendo problemas aqui, há outra solução Python, mas não usa o arcpy. Em vez disso, ele usa ArcObjects e o módulo comtypes. Você também precisa baixar o módulo de snippets.

Você pode então executar esta função:

def CheckGDBRelease (sPath): "" "abrir o arquivo GDB" "" InitStandalone () import comtypes.gen.esriGeoDatabase as esriGeoDatabase import comtypes.gen.esriDataSourcesGDB as esriDataSourcesGDB pWSF = NewObj (esriDataSourcesGriDBIdataSpace.esriWorkspaceFactory.esriWorkspace.esriWorkspactory patabaseGatabaseWatabaseGatabaseWatabaseFactory. .OpenFromFile (sPath, 0) pGDBRelease = CType (pWS, esriGeoDatabase.IGeodatabaseRelease2) return pGDBRelease.CurrentRelease, pGDBRelease.MajorVersion, pGDBRelease.MinorVersion tup = CheckGDBRelease  SoAddBBlibrary  SoHAdd  Hg_AddBlibrary  So  Ad  Hamilton   AdBiblote_Rjust_Rjust . tup

que imprimiu:

>>>  (Verdadeiro, 3, 0) >>>

Esta opção pode ser mais problemática do que vale a pena quando sua solução arcpy deve estar trabalhando

EDITAR:

Fiz muitas modificações no módulo snippets com mais funções auxiliares. Aqui está meu código completo, se você quiser apenas usá-lo:

#A maior parte deste código adotado e modificado de: # # https://bitbucket.org/maphew/canvec/src/eaf2678de06f/Canvec/Scripts/parco.py # # Para Bolton & Menk, Inc. use # # Snippets.py # ************************************************* # Atualizado para ArcGIS 10.2 # ******************************************** *** # Requer a instalação do pacote comtypes # Disponível em: http://sourceforge.net/projects/comtypes/ # Depois que o comtypes for instalado, as seguintes modificações # precisam ser feitas para compatibilidade com ArcGIS 10.2: # 1) Excluir automação.pyc, automação.pyo, safearray.pyc, safearray.pyo # 2) Editar automação.py # 3) Adicione a seguinte entrada ao dicionário _ctype_to_vartype (linha 794): # POINTER (BSTR): VT_BYREF | VT_BSTR, # * *********************************************** # O máximo de este código adotado e modificado de: # https://bitbucket.org/maphew/canvec/src/eaf2678de06f/Canvec/Scripts/parco.py # certifique-se de que está sendo executado em estrutura de importação de 32 bits if struct.calcsize ('P ') * 8! = 32: aumento ImportError ('Deve usar ArcObjects em 32 bits!') Import os import glob ACCESS_MODE = {0: 'desconhecido', 2: 'escrever', 4: 'somente leitura', 6: 'ler / escrever'} def load_mod (filtro = Nenhum): "carrega uma lista de todos os módulos (arquivos * .olb) Opcional: filtro - curinga para pesquisar. Se quiser encontrar todos os módulos que começam com "G", basta usar "g" para o filtro "olb = '* .olb' if filterer: olb = 'esri {0} *. Olb'.format (filterer) mods = glob.glob (os.path.join (GetLibPath (), olb)) se mods: all_mods = dict ((i, os.path.basename (m)) para i, m em enumerar (mods)) para k, v em ordenado (all_mods.iteritems ()): imprimir '{0}: {1}'. formato (k, v) retornar getModule (all_mods [input (' nEscolher número para módulo  n')]) imprimir 'Não encontre todos os módulos! ' return Nenhum def load_all (): "carrega todas as bibliotecas de objetos" de comtypes.client import GetModule mods = glob.glob (os.path.join (GetLibPath (), '* .olb')) para mod em mods: GetModule (mod ) return def InstallInfo (): "" "Obtém ArcGIS Install Info" "" # Obter ArcObjects version import comtypes from comtypes.client import GetModule g = comtypes.GUID ("{6FCCEDE0-179D-4D12-B586-58C88D26CA78}") GetModule ((g, 1, 0)) import comtypes.gen.ArcGISVersionLib as esriVersion pVM = NewObj (esriVersion.VersionManager, esriVersion.IArcGISVersion) return pVM.GetVersions (). Next () def GetLibPath (): "Referência ao diretório com houses ArcObjects Ojbect Libraries (* .OLB) "return os.path.join (InstallInfo () [2], 'com') def GetVersion ():" "" retorna ArcGIS Version "" "return InstallInfo () [1] def getModule (sModuleName): "carrega a biblioteca de objetos por nome" de comtypes.client import GetModule olb = os.path.abspath (os.path.join (GetLibPath (), sModuleName)) return GetModule (olb) def GetStandaloneModules (): "" "Importar ArcGI comumente usado Bibliotecas S para scripts independentes "" "getModule (" esriSystem.olb ") getModule (" esriGeometry.olb ") getModule (" esriCarto.olb ") getModule (" esriDisplay.olb ") getModule (" esriGeoDatabase.olb ") getModule ( "esriDataSourcesGDB.olb") getModule ("esriDataSourcesFile.olb") getModule ("esriOutput.olb") def GetDesktopModules (): "" "Importar bibliotecas básicas do ArcGIS Desktop" "" getModule ("esriFramework.olb "UI) getModule (" esriMap.olb "UI) getModule ("esriMap .olb ") getModule (" esriArcCatalogUI.olb ") # **** Funções auxiliares **** def GetCurrentApp ():" "" Retorna o aplicativo se o script estiver sendo executado de dentro do limite de um aplicativo ArcGIS " "" import comtypes.gen.esriFramework as esriFramework return NewObj (esriFramework.AppRef, esriFramework.IApplication) def GetApp (app = "ArcMap"): InitStandalone () "" "app deve ser 'ArcMap' (padrão) ou 'ArcCatalog'  n  Execute GetDesktopModules () primeiro "" "se não (app ==" ArcMap "ou app ==" ArcCatalog "): imprimir" o aplicativo deve ser 'ArcMap' ou 'ArcCatalog' "return Nenhum import comtypes.gen.esriFram ework as esriFramework import comtypes.gen.esriArcMapUI as esriArcMapUI import comtypes.gen.esriCatalogUI as esriCatalogUI pAppROT = NewObj (esriFramework.AppROT, esriFramework.IAppROT) iCount = 0 pAppROT.Count no intervalo: iCount = 0 retorno iCount = 0 retorno iCount para iCount: Nenhum ): pApp = pAppROT.Item (i) imprimir pApp if app == "ArcCatalog": se CType (pApp, esriCatalogUI.IGxApplication): retornar pApp continuar se CType (pApp, esriArcMapUI.IMxApplication): retornar pApp return Nenhum def NewObj ( COMClass, COMInterface): "" "Cria um novo objeto comtypes POINTER onde  n  MyClass é a classe a ser instanciada,  n  MyInterface é a interface a ser atribuída" "" de comtypes.client import CreateObject try: ptr = CreateObject (COMClass, interface = COMInterface) return ptr exceto: return Nenhum def CType (obj, interface): "" "Converte obj para interface e retorna comtypes POINTER ou None" "" try: newobj = obj.QueryInterface (interface) return newobj exceto : return Nenhum def CLSID (MyClass): "" "Retorna CLSID de MyClass como string CLSID é th O GUID da classe COM (CoClass) correspondente às instâncias da classe de objeto "" "retorna str (MyClass._reg_clsid_) # ********* Stand alone **** def InitStandalone ():" "" Licença ArcGIS autônoma de inicialização "" "# Set ArcObjects version import comtypes from comtypes.client import GetModule g = comtypes.GUID (" {6FCCEDE0-179D-4D12-B586-58C88D26CA78} ") GetModule ((g, 1, 0)) importar comtypes.gen.ArcGISVersionLib as esriVersion import comtypes.gen.esriSystem as esriSystem pVM = NewObj (esriVersion.VersionManager, esriVersion.IArcGISVersion) # certifique-se de que a versão corresponde se não pVM.LoadVersion (esriVersion.esri): Obter licença pInit = NewObj (esriSystem.AoInitialize, esriSystem.IAoInitialize) ProductList = [esriSystem.esriLicenseProductCodeAdvanced,  esriSystem.esriLicenseProductCodeStandard,  esriSystem.esriListier = [esriSystem.esriLicenseProductCodeAdvanced,  esriSystem.esriLicenseProductCodeStandard,  esriSystem.esriLicense = LicençaInternetInsistema.esriLicenseProductCodeAdvanced,  esriSystem.esriLicenseProductCodeStandard,  esriSystem.esriLisystem esriLicenseAvailabl e: continue licenseStatus = pInit.Initialize (eProduct) return (licenseStatus == esriSystem.esriLicenseCheckedOut) return False def check_extension (ext_code): "" "Determina se uma extensão é retirada ou não, retorna True ou False Obrigatório: ext_code - código de extensão para licença (int), por exemplo, Analista Espacial é o código 10. Alguns códigos de extensão comuns: 6: Analista Geoestatístico 8: Analista de Rede 9: Analista 3D 10: Analista Espacial http://resources.arcgis.com/en/ help / arcobjects-net / componenthelp / index.html # // 004200000021000000 "" "de comtypes.gen import esriSystem # agora chamar AoInitialize pInit = NewObj (esriSystem.AoInitialize, esriSystem.IAoInitialize) # verificar extensão return pInit.IsxtensionCheckedOutension (int ext_code)) def mxd_version (mxd): #getModule ('esriCarto') import comtypes.gen.esriCarto as esriCarto pMapDoc = NewObj (esriCarto.MapDocument, esriCarto.IMapDocument) pMapDoc.Open (mxd) verMapDoc.Info (mxd) verMapDoc. .Close () se não ver_info [0]: return '.'. Join (map (str, ver_info [1: 3])) print 'Nenhuma informação de versão disponível ou o mxd foi salvo como um documento mais recente' return Nenhum def Msg (mensagem = "Olá, mundo", title = "ARDemo"): "Abre uma caixa de diálogo caixa com o botão OK Obrigatório: mensagem - texto para o título da caixa de mensagem - título da caixa de mensagem "from ctypes import c_int, WINFUNCTYPE, windll from ctypes.wintypes import HWND, LPCSTR, UINT prototype = WINFUNCTYPE (c_int, HWND, LPCSTR, LPCSTR , UINT) fn = prototype (("MessageBoxA", windll.user32)) return fn (0, mensagem, título, 0) def create_mxd (mapDoc): getModule ('esriCarto.olb') import comtypes.gen.esriCarto como esriCarto mxd = NewObj (esriCarto.MapDocument, esriCarto.IMapDocument) mxd.New (mapDoc) mxd.Close () return mapDoc def ref_mxd (mxd_path): getModule ('esricMapUI.olb') getModule ('esriC comolb' import. gen.esriArcMapUI as esriArcMapUI import comtypes.gen.esriCarto as esriCarto # create mapDoc return NewObj (esriCarto.MapDocument, esriCarto.IMapDocument) .Open (mxd_path) def Standalone_OpenSDE (): "" "abrir banco de dados SDE "" "GetStandaloneModules () InitStandalone () import comtypes.gen.esriSystem as esriSystem import comtypes.gen.esriGeoDatabase as esriGeoDatabase import comtypes.gen.esriDataSourcesGDB as esriDataSourcesGDB pPropSet = NewObjPropertySet (esriSystem) SERVER "," sunprod1 ") pPropSet.SetProperty (" USER "," / ") pPropSet.SetProperty (" INSTANCE "," sde: oracle10g: /; LOCAL = PRODUCTION_TUCSON ") pPropSet.SetProperty (" AUTHENTICATION_MODE "," OSA " ) pPropSet.SetProperty ("VERSION", "SDE.DEFAULT") pWSF = NewObj (esriDataSourcesGDB.SdeWorkspaceFactory,  esriGeoDatabase.IWorkspaceFactory) pWS = pWSF.Open (pPropSet, 0) pDS = CTataset (pWS, esriGeo) Nome do espaço de trabalho: "+ pDS.BrowseName print" Categoria do espaço de trabalho: "+ pDS.Category retornar pWS def Standalone_OpenFileGDB (sPath):" "" abrir o arquivo GDB "" "GetStandaloneModules () se não InitStandalone (): imprimir" Temos pedaços dele nas costas… "return import comtypes.gen.esriGeoDatabase as esriGeoDatabase impo rt comtypes.gen.esriDataSourcesGDB as esriDataSourcesGDB pWSF = NewObj (esriDataSourcesGDB.FileGDBWorkspaceFactory,  esriGeoDatabase.IWorkspaceFactory) pWS = pWSF.OpenFromFile (sPath, 0) pDS = CTIDetipo de trabalho (pWS, 0) pDS = CTIDetipo de trabalho + nome do priype "priype" esriGeoDatabase.IWorkspaceFactory ". BrowseName print "Categoria do espaço de trabalho:" + pDS.Category return pWS def CheckGDBRelease (sPath): "" "abrir arquivo GDB" "" InitStandalone () import comtypes.gen.esriGeoDatabase as esriGeoDatabase import comtypes.gen.esriDataSourcesGDB as esbriDataSourcesODB pW (esriDataSourcesGDB.FileGDBWorkspaceFactory,  esriGeoDatabase.IWorkspaceFactory) pWS = pWSF.OpenFromFile (sPath, 0) pGDBRelease = CType (pWS, esriGeoDatabase.IGeodatabaseRelease2) retornar pGDBRelease.CurrentRelease.GeodatabaseRelease2) retornar pGDBRelease.CurrentReleaseForRelease.GDBRReleaseForReleaseForRelease.GDBReleaseCurrentRelease.GDBReleaseForReleaseCurrentReleaseForDBRelease, pGDBRelease.CurrentReleaseForReleaseForReleaseForRelease.GDBReleaseCurrentReleaseForReleaseForRelease.GDBRelease. InitStandalone () import comtypes.gen.esriGeoDatabase as esriGeoDatabase import comtypes.gen.esriDataSourcesGDB como esriDataSourcesGDB pWSF = NewObj (esriDataSourcesGDB.FileGDBW orkspaceFactory,  esriGeoDatabase.IWorkspaceFactory2) pWS = pWSF.OpenFromFile (sFileGDB, 0) pFWS = CType (pWS, esriGeoDatabase.IFeatureWorkspace) # determine se FC existe antes de tentar abrir # http://edndoc.esri.com/arcobjects/9.2 /ComponentHelp/esriGeoDatabase/IWorkspace2_NameExists.htm # 5 = tipo de dados de classe de recurso pWS2 = CType (pWS, esriGeoDatabase.IWorkspace2) se pWS2.NameExists (5, sFCName): pFC = pFWS.OpenFeatureClass (sFCName) else ' *% s não encontrado '% sFCName return pFC def getUnitSize (my_size, rounding = 1): "" "retornará um tamanho em bytes para um formato legível por humanos" "" se não for isinstance (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 e my_size <= 1048576: theSize = '% s KB'% round (my_size / 1024.0, arredondamento) elif my_size> 1048576 e my_size <= 1073741824: theSize = '% s MB'% round (my_size / 1048576.0, arredondamento) elif my_size> 1073741824 e my_si ze <= 1099511627776: theSize = '% s GB'% round (my_size / 1073741824.0, arredondamento) elif my_size> = 1099511627776: theSize = '% s TB'% round (my_size / 1099511627776.0, arredondamento) else: # tamanho de retorno padrão em MB return '% s MB'% round (my_size / 1048576.0, arredondamento) return theSize def GetModifiedDate (fc, statType = 2): "" "Obtém informações sobre a classe de recurso e retorna uma tupla de (modo, tamanho, tempo) Obrigatório: fc - classe de recurso a ser verificada Opcional: statType - tipo de informação de tempo conforme mostrado abaixo. O padrão é 2 0 Retorna a hora do último acesso. 1 Retorne a hora da última criação. 2 Retorne a hora da última modificação. modificado de: https://geonet.esri.com/thread/74409 "" "import datetime InitStandalone () import comtypes.gen.esriSystem as esriSystem import comtypes.gen.esriGeoDatabase as esriGeoDatabase import comtypes.gen.esriDataSourcesGDB as esriDataSourcesGDB # Open the FGDB gdb, tableName = os.path.split (fc) pWS = Standalone_OpenFileGDB (gdb) # Criar conjunto de propriedades vazio pPropSet = NewObj (esriSystem.PropertySet, esriSystem.IPropertySet) pPropSet.SetProperty ("banco de dados", gdb) # FGDB as IFeatureWorkspace pFW = CType (pWS, esriGeoDatabase.IFeatureWorkspace) # Abra a tabela pTab = pFW.OpenTable (tableName) # Converta a tabela como um IDatasetFileStat pDFS = CType (pTab, esriGeoDatabase.IDatasetFileStat) # Obtenha a data modificada .datetime.fromtimestamp (pDFS.StatTime (statType)). strftime ('% Y-% m-% d% H:% M:% S') return (ACCESS_MODE [pDFS.StatMode], getUnitSize (pDFS.StatSize), mod) # **** ArcMap **** def MapRefresh (current = True): "" "atualiza o TOC do ArcMap e a visualização ativa" "" de comtypes.gen imp ort esriArcMapUI # reresh visualização ativa e TOC se atual: pApp = GetCurrentApp () else: pApp = GetApp () pDoc = pApp.Document pMxDoc = CType (pDoc, esriArcMapUI.IMxDocument) pMxDoc.ActiveView.Refer () pMxDoc. del pApp, pMxDoc retorna def ArcMap_GetSelectedGeometry (bStandalone = False): GetDesktopModules () se bStandalone: ​​InitStandalone () pApp = GetApp () else: pApp = GetCurrentApp () se não pApp: print "Encontramos esta colher, senhor." comtypes.gen.esriFramework as esriFramework import comtypes.gen.esriArcMapUI as esriArcMapUI import comtypes.gen.esriSystem as esriSystem import comtypes.gen.esriCarto as esriCarto import comtypes.gen.esriGeoDatabase as esriGeoDatabase asriGeoDatabase as esriGeometry.esriGeoDatabase as selected # import comtypes.gen geometria do recurso pDoc = pApp.Document pMxDoc = CType (pDoc, esriArcMapUI.IMxDocument) pMap = pMxDoc.FocusMap pFeatSel = pMap.FeatureSelection pEnumFeat = CType (pFeatSel, esriGeoDatabase.IEnumFeat) pMap = pMxDoc.FocusMap pFeatSel = pMap.FeatureSelection pEnumFeat = CType (pFeatSel, esriGeoDatabase.IEnumFeat) pMap f não pFeat: print "Nenhuma seleção encontrada." return pShape = pFeat.ShapeCopy eType = pShape.GeometryType if eType == esriGeometry.esriGeometryPoint: print "Tipo de geometria = Point" elif eType == esriGeometry.esriGeometryPolyline: print "Tipo de geometria Linha "elif eType == esriGeometry.esriGeometryPolygon: print" Geometry type = Poly "else: print" Geometry type = Other "return pShape def ArcMap_GetEditWorkspace (bStandalone = False): GetDesktopModules () if bStandalone: ​​InitStandalone () pApp = GetApp () else: pApp = GetCurrentApp () GetModule ("esriEditor.olb") import comtypes.gen.esriSystem como esriSystem import comtypes.gen.esriEditor como esriEditor import comtypes.gen.esriGeoDatabase como esriGeoDatabase pID, esriSystem.esriSystem ) pID.Value = CLSID (esriEditor.Editor) pExt = pApp.FindExtensionByCLSID (pID) pEditor = CType (pExt, esriEditor.IEditor) se pEditor.EditState == esriEditor.esditorWS.EditorEditor de pWS = pWS = pypeEditorStateEditor.esriEditor. esriGeoDatabase.IDataset) print "Workspa ce name: "+ pDS.BrowseName print" Categoria do espaço de trabalho: "+ pDS.Category return def ArcMap_GetSelectedTable (bStandalone = False): GetDesktopModules () if bStandalone: ​​InitStandalone () pApp = GetApp () else: pApp = GetCurrentApp () import comtypes .gen.esriFramework as esriFramework import comtypes.gen.esriArcMapUI as esriArcMapUI importar comtypes.gen.esriGeoDatabase as esriGeoDatabase pDoc = pApp.Document pMxDoc = CType (pDoc, esriArcMapUI.IMxDocument.Se não selecionado pUnk pUnk.IMkDocument se não selecionado pUnk pUnk pMkDoc. . "return pTable = CType (pUnk, esriGeoDatabase.ITable) se não pTable: print" Nenhuma tabela selecionada. "return pDS = CType (pTable, esriGeoDatabase.IDataset) print" Tabela selecionada: "+ pDS.Name # **** ArcCatalog **** def ArcCatalog_GetSelectedTable (bStandalone = False): GetDesktopModules () if bStandalone: ​​InitStandalone () pApp = GetApp ("ArcCatalog") else: pApp = GetCurrentApp () import comtypes.gen.esriFramework import comtypesFramework. esriCatalogUI as esriCatalogUI import comtypes.g en.esriCatalog as esriCatalog import comtypes.gen.esriGeoDatabase as esriGeoDatabase pGxApp = CType (pApp, esriCatalogUI.IGxApplication) pGxObj = pGxApp.SelectedObject se não pGxObjogDatabase pGxApp = CType (pApp, esriCatalogUI.IGxApplication) pGxObj = pGxApp.SelectedObject if not pGxObjogamesa: print "Nada selecionado. não pGxDS: print "Nenhum conjunto de dados selecionado." return eType = pGxDS.Type se não (eType == esriGeoDatabase.esriDTFeatureClass ou eType == esriGeoDatabase.esriDTTable): print "Nenhuma tabela selecionada." return pDS = pGxDS.Dataset pTable = CType (pDS, esriGeoDatabase.ITable) print "Tabela selecionada:" + pDS.Name # **** funções auxiliares personalizadas **** def iterLayers (pApp = GetApp ()): "" "cria um gerador para camadas" "" from comtypes.gen import esriArcMapUI, esriCarto pDoc = pApp.Document pMxDoc = CType (pDoc, esriArcMapUI.IMxDocument) pMap = pMxDoc.FocusMap pAV = CType (pMap, esriCarto.IActiveVieway) # camada de referência para i no intervalo (pMapCount). : yield pMap.Layer (i) def alter_alias (fc, f_dict): "Alterar os nomes dos campos no nível do banco de dados Obrigatório: fc - classe de recurso (deve estar em gdb) f_dict - dicionário de campos {field_alias: new_alias,…} "getModule ('esriGeoDatabase.olb') getModule ('esriDataSourcesGDB.olb') import comtypes.gen.esriGeoDatabase as propriedades esriGeoDatabase # get at fc pFC = OpenFeatureClass (* os.path.split (fc)) # obter a biblioteca de edição de esquema pSE = CType (pFC, esriGeoDatabase.IClassSchemaEdit) # iterar por meio de dict e atualizar aliases para campo, alias em f_dict.iteritems (): try: pSE.AlterFieldAliasName (campo, alias) print 'Alterado o apelido do campo "{0}" para: "{1}"'. formato (campo, apelido) exceto: print 'Erro ao alterar o campo "{0}" ' s alias para: "{1}" '. format (campo, alias) return def alter_fieldName (fc, f_dict): "Alterar os nomes dos campos no nível do banco de dados Obrigatório: fc - classe de recurso (deve estar em gdb) f_dict - dicionário de campos {field_name: new_name,…} "import comtypes.gen.esriGeoDatabase as esriGeoDatabase # get at fc properties pFC = OpenFeatureClass (* os.path.split (fc)) # get at schema edition library pSE = CType (pFC, esriGeoDat abase.IClassSchemaEdit4) # iterar por meio de dict e atualizar aliases para campo, new_name em f_dict.iteritems (): try: pSE.AlterFieldName (field, new_name) print 'Campo alterado "{0}" ' s nome para: "{1 } "'. formato (campo, novo_nome) exceto: print' Erro ao alterar o nome do campo" {0} "para:" {1} "'. formato (campo, novo_nome) return

Você pode usar oload_all ()função para carregar todas as bibliotecas ArcObjects. O kicker é que você precisa carregar as bibliotecas 'olb' primeiro. Então, eu chamaria isso primeiro para que gerasse todos os wrappers Python dentro dogenpasta no pacote comtypes. Depois de gerar todos os wrappers, a função que postei (incluída em meu script completo) deve funcionar.

Você pode deixar isso como um único módulo, ou eu formatei como um pacote (eu tenho outros módulos dentro também, como trabalhar com elementos mapsurround):

arcobjects <- folder __init__.py <- este é o script completo que postei.

EDIT 2:

Agora eu vejo porque oInitStandalone ()não está funcionando para você. Se sua etiqueta estiver correta e você estiver usando ArcGIS 10.0, os códigos de produto são diferentes (ou seja,esriSystem.esriLicenseProductCodeAdvancedé o equivalente aesriSystem.esriLicensProductCodeArcInfo) Como você está usando ArcGIS 10.0, substitua a função InitStandalone () por este código 10.0:

def InitStandalone (): "" "Licença autônoma do ArcGIS Init" "" # Definir a versão ArcObjects importar comtypes de comtypes.client import GetModule g = comtypes.GUID ("{6FCCEDE0-179D-4D12-B586-58C88D26CA78}") GetModule (( g, 1, 0)) import comtypes.gen.ArcGISVersionLib as esriVersion import comtypes.gen.esriSystem as esriSystem pVM = NewObj (esriVersion.VersionManager, esriVersion.IArcGISVersion) se não pVM.LoadVersion.LoadVersion (esriVersion) 10 return False # Get license pInit = NewObj (esriSystem.AoInitialize, esriSystem.IAoInitialize) ProductList = [esriSystem.esriLicenseProductCodeArcInfo,  esriSystem.esriLicenseProductCodeArcEditor,  esriSystem.esriLicenseProductCodeArcInfo,  esriSystem.esriLicenseProductCodeArcEditor,  esriSystem.esriLicenseProductCodeArcInfo,  esriSystem.esriLicenseProductCodeArcEditor,  esriSystem.esriLicenseProductCodeArcInfo,  esriSystem.esriLicenseProductCodeArcEditor,  esriSystem.esriLicenseIdispositivo de licença de produtoCodeItode.esriLicense). = esriSystem.esriLicenseAvailable: continue licenseStatus = pInit.Initialize (eProduct) return (licenseStatus == esriSystem.esriLicenseCheckedOut) return False


Assista o vídeo: Learn How to Perform Statistical Spatial Data Analysis with R and ArcGIS (Outubro 2021).