[python]使用ArcObjects訪問要素類

python的靈活性不言而喻,因此一直想嘗試用python快速訪問geodatabase。

開發環境:ArcGIS 9.3 + python 2.5

# -*- coding: cp936 -*-

def GetAoModule(moduleName):
    import comtypes
    from comtypes.client import GetModule
    GetModule('C:\\Program Files (x86)\\ArcGIS\\com\\'+moduleName)

def AoObj(MyClass,MyInterface):
    from comtypes.client import CreateObject
    try:
        obj = CreateObject(MyClass,None,None,MyInterface,False)
        return obj
    except Exception,ex:
        print ex.message
        return None

def InitialAo():
    GetAoModule('esriSystem.olb')
    import comtypes.gen.esriSystem as esriSystem
    aoInit = AoObj(esriSystem.AoInitialize,esriSystem.IAoInitialize)
    if(aoInit):
        pCode = esriSystem.esriLicenseProductCodeArcInfo
        status = aoInit.IsProductCodeAvailable(pCode)
        if status==esriSystem.esriLicenseAvailable:
            aoInit.Initialize(pCode)
    else:
        print "aoInit is null"

def SearchFeatureClass():
    GetAoModule('esriGeoDatabase.olb')
    GetAoModule('esriDataSourcesGDB.olb')
    import comtypes.gen.esriDataSourcesGDB as esriDataSourcesGDB
    import comtypes.gen.esriGeoDatabase as esriGeoDatabase
    pWorkspaceFactory = AoObj(esriDataSourcesGDB.AccessWorkspaceFactory,esriGeoDatabase.IWorkspaceFactory)
    pWorkspace = pWorkspaceFactory.OpenFromFile('D:\\DataMaps.mdb',0)
    pFeatureWorkspace = pWorkspace.QueryInterface(esriGeoDatabase.IFeatureWorkspace)
    print pFeatureWorkspace
    pFeatureClass = pFeatureWorkspace.OpenFeatureClass("Euler")
    pFeatureCursor = pFeatureClass.Search(None,False);
    pFeature=pFeatureCursor.NextFeature()
    while(pFeature):
        print pFeature.OID
        pFeature=pFeatureCursor.NextFeature()

if __name__=='__main__':
    InitialAo()
    SearchFeatureClass()
    raw_input("按回車鍵退出程序...")

趁早上頭腦清醒,把之前的幾個bug也改掉了,不枉早上起那麼早。

參考資料:

在Python中使用ArcObjects對象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章