• 4章代码


    4.1 ListDatasets (数据集列表)

    #coding=utf8
    import arcpy
    
    import os
    import sys
    import math
    from arcpy.sa import *
    
    def Main():
        mypath=inWorkspace
        arcpy.env.workspace =mypath
    
    
        datasets =arcpy.ListDatasets() #arcpy.ListDatasets("", "Feature")
        for dataset in datasets:
            arcpy.AddMessage(dataset)
            arcpy.AddMessage(u"含路径:"+mypath+os.sep+dataset)
    
    inWorkspace=arcpy.GetParameterAsText(0)
    Main()

    4.2 ListFeatureClasses(要素类)

    #coding=utf8
    import arcpy
    
    import os
    import sys
    import math
    from arcpy.sa import *
    
    
    def Main1():
        mypath=inWorkspace
        arcpy.env.workspace =mypath
    
        #==============参数的类型必须必须是字符串==========================
        pList=[]
        featureclasses = arcpy.ListFeatureClasses()
        for fc in featureclasses:
            pList.append(mypath+os.sep+fc)
    
        datasets = arcpy.ListDatasets("", "Feature")
        for dataset in datasets:
            curpath=mypath+os.sep+dataset
            #arcpy.env.workspace =curpath
            fclasses = arcpy.ListFeatureClasses(feature_dataset=dataset)
            for fc in fclasses:
                pList.append(curpath+os.sep+fc)
                ##arcpy.AddMessage(fc)
        for fc in pList:
            arcpy.AddMessage(fc)
    
    inWorkspace=arcpy.GetParameterAsText(0)
    Main1()

    4.3 ListTables(表)

    #coding=utf8
    import arcpy
    
    import os
    import sys
    import math
    from arcpy.sa import *
    
    def Main():
        mypath=inWorkspace
        arcpy.env.workspace =mypath
        tables = arcpy.ListTables()
        for table in tables:
            arcpy.AddMessage(table)
            arcpy.AddMessage(u"目录:"+mypath+"\"+table)
            arcpy.AddMessage(u"目录:{}\{}".format(mypath,table))
    
    
    inWorkspace=arcpy.GetParameterAsText(0)
    Main()

    4.4  ListRasters(栅格)

    #coding=utf8
    import arcpy
    
    import os
    import sys
    import math
    from arcpy.sa import *
    
    def Main():
        mypath=inWorkspace
        arcpy.env.workspace =mypath
        #==============参数的类型必须必须是字符串==========================   
        rasters = arcpy.ListRasters()
        for raster in rasters:
            arcpy.AddMessage("raster:"+raster)
    
    
    #inWorkspace=arcpy.GetParameter(0)
    inWorkspace=arcpy.GetParameterAsText(0)
    Main()

    4.5 ListWorkspaces(工作空间)和批量紧缩数据库

    #coding=utf8
    import arcpy
    
    import os
    import sys
    import math
    from arcpy.sa import *
    
    
    def BatchRepair(gdb):
        arcpy.env.workspace =gdb
        featureclasses = arcpy.ListFeatureClasses()
        for fc in featureclasses:
            arcpy.AddMessage(u"修复:"+gdb+os.sep+fc)
            arcpy.RepairGeometry_management(fc)
    
    
    
        datasets = arcpy.ListDatasets("", "Feature")
        for dataset in datasets:
            curpath=gdb+os.sep+dataset
            arcpy.env.workspace =curpath
            fclasses = arcpy.ListFeatureClasses()
            for fc in fclasses:
                arcpy.AddMessage(u"修复:"+curpath+os.sep+fc)
                arcpy.RepairGeometry_management(fc)
    
    
    
    def BathCompact(indir):
        arcpy.env.workspace = indir
        workspaces = arcpy.ListWorkspaces("*", "FileGDB")
        for workspace in workspaces:
            arcpy.AddMessage(u"紧缩数据库:"+workspace)
            arcpy.Compact_management(workspace)
            BatchRepair(workspace)
        workspaces = arcpy.ListWorkspaces("*", "Access")
        for workspace in workspaces:
            arcpy.AddMessage(u"紧缩数据库:"+workspace)
            arcpy.Compact_management(workspace)
            BatchRepair(workspace)
        workspaces = arcpy.ListWorkspaces("*", "Folder")
        for workspace in workspaces:
            arcpy.AddMessage(u"Folder:"+workspace)
            BathCompact(workspace)
    
    
    
    def Main():
        arcpy.env.workspace = indir
        workspaces = arcpy.ListWorkspaces()
        for workspace in workspaces:
            arcpy.AddMessage("workspace:"+workspace)
    
    
    indir=arcpy.GetParameterAsText(0)
    Main()
    BathCompact(indir)

    4.7 数据库相互转换

    #coding=utf8
    import arcpy
    
    import os
    import sys
    import math
    from arcpy.sa import *
    
    
    
    def Main():
        arcpy.env.workspace = inworkspace
        datasets =arcpy.ListDatasets() #arcpy.ListDatasets("", "Feature")
        for dataset in datasets:
            arcpy.AddMessage(dataset)
            arcpy.Copy_management(dataset, outworkspace+os.sep+dataset)
        Features =arcpy.ListFeatureClasses()
        for Feature in Features:
            arcpy.AddMessage(Feature)
            arcpy.Copy_management(Feature, outworkspace+os.sep+Feature)
        Tables =arcpy.ListTables()
        for Table in Tables:
            arcpy.AddMessage(Table)
            arcpy.Copy_management(Table, outworkspace+os.sep+Table)
    
    
    inworkspace=arcpy.GetParameterAsText(0)
    outworkspace=arcpy.GetParameterAsText(1)
    version=arcpy.GetParameterAsText(2)
    outpath,outgdb=os.path.split(outworkspace)
    if not arcpy.Exists(outworkspace):
        if (outgdb.upper().endswith(".GDB")):
            arcpy.CreateFileGDB_management(outpath, outgdb,version)
        else:
            arcpy.CreatePersonalGDB_management(outpath, outgdb,version)
    
    Main()

    4.8 一个文件夹下MDB转GDB

    #coding=utf8
    import arcpy
    
    import os
    import sys
    import math
    from arcpy.sa import *
    
    
    
    
    def mdb2gdb(inworkspace,outworkspace):
        #arcpy.AddMessage("outworkspace======"+outworkspace)
        outpath,outgdb=os.path.split(outworkspace)
        #arcpy.AddMessage("outpath======"+outpath)
        #arcpy.AddMessage("outgdb======"+outgdb)
    
        if not os.path.exists(outpath):
            #os.mkdir(outpath) #创建文件夹
            os.makedirs(outpath) #多层创建目录
    
        if not arcpy.Exists(outworkspace):
            arcpy.CreateFileGDB_management(outpath, outgdb)
        arcpy.env.workspace = inworkspace
        datasets =arcpy.ListDatasets() #arcpy.ListDatasets("", "Feature")
        for dataset in datasets:
            arcpy.AddMessage(dataset)
            arcpy.Copy_management(dataset, outworkspace+os.sep+dataset)
        Features =arcpy.ListFeatureClasses()
        for Feature in Features:
            arcpy.AddMessage(Feature)
            arcpy.Copy_management(Feature, outworkspace+os.sep+Feature)
        Tables =arcpy.ListTables()
        for Table in Tables:
            arcpy.AddMessage(Table)
            arcpy.Copy_management(Table, outworkspace+os.sep+Table)
    
    def Main(indir):
        arcpy.env.workspace = indir
    
        workspaces = arcpy.ListWorkspaces("*", "Access")
        for workspace in workspaces:
    
            outworkspace=workspace.replace(oldindir,outdir).lower().replace(".mdb",".gdb")
            arcpy.AddMessage(u"indir:"+oldindir+",outdir:"+outdir)
            arcpy.AddMessage(u"拷贝:"+workspace+",输出:"+outworkspace)
            mdb2gdb(workspace,outworkspace)
            #arcpy.Compact_management(workspace)
            #BatchRepair(workspace)
        arcpy.env.workspace = indir #路径变了,必须重新设置
        workspaces = arcpy.ListWorkspaces("*", "Folder")
        for workspace in workspaces:
            arcpy.AddMessage(u"Folder====:"+workspace)
            Main(workspace)
    
    
    indir=arcpy.GetParameterAsText(0)
    oldindir=indir
    outdir=arcpy.GetParameterAsText(1)
    if not os.path.exists(outdir):
        #os.mkdir(outpath) #创建文件夹
        os.makedirs(outdir) #多层创建目录
    Main(indir)

    4.9 更新数据库BSM

    #coding=utf8
    import arcpy
    from arcpy import env
    import os
    
    import sys
    import time
    import ylpy
    
    def getidx(List,mystr):
        try:
            idx=List.index(mystr)
            return idx
        except Exception as e:  # 都能处理异常
            return -1
    
    def updatebsm(fc,fieldname,k):
        arcpy.AddMessage("update:"+fc+","+fieldname+",start="+str(k))
        cursor =arcpy.UpdateCursor(fc)
        for row in cursor:
            row.setValue(fieldname, k)
            cursor.updateRow(row)
            k=k+1
    
        if cursor:
            del cursor
        return k
    def updatebsmda(fc,fieldname,k):
        arcpy.AddMessage("update:"+fc+","+fieldname+",start="+str(k))
        with arcpy.da.UpdateCursor(fc, (fieldname)) as cursor:
            for row in cursor:
                row[0] =k
                cursor.updateRow(row)
                k=k+1
        return k
    def updpdateFc(myworkspace,k):
        arcpy.env.workspace = myworkspace
        arcpy.AddMessage("myworkspace:"+myworkspace)
        featureclasses = arcpy.ListFeatureClasses()
        if featureclasses==None:
            return k
        arcpy.AddMessage("=====:"+str(len(featureclasses)))
    
        for fc in featureclasses:
            if not ylpy.FieldExists(fc,fieldname):
                arcpy.AddField_management(fc,fieldname ,"LONG")
            k=updatebsm(fc,fieldname,k)
        return k
    
    
    myworkspace= arcpy.GetParameterAsText(0)
    fieldname= arcpy.GetParameterAsText(1)
    k= arcpy.GetParameter(2)
    arcpy.env.workspace = myworkspace
    k=updpdateFc(myworkspace,k)
    arcpy.env.workspace = myworkspace
    datasets = arcpy.ListDatasets("", "Feature")
    
    for dataset in datasets:
        arcpy.AddMessage("dataset:"+dataset)
        k=updpdateFc(myworkspace+os.sep+dataset,k)
    
    arcpy.env.workspace = myworkspace
    tables = arcpy.ListTables()
    for table in tables:
        if not ylpy.FieldExists(table,fieldname):
            arcpy.AddField_management(table,fieldname ,"LONG")
        k=updatebsm(table,fieldname,k)

    4.10.1 获得工具箱工具

    #coding=utf8
    import arcpy
    import os
    import sys
    workspace=arcpy.GetParameterAsText(0) #输入工具箱
    toolname = []
    #for dirpath, dirnames, filenames in arcpy.da.Walk(workspace,datatype="FeatureClass",type="Polygon"):
    mdatatype=['Tool']
    for dirpath, dirnames, filenames in arcpy.da.Walk(workspace,datatype=mdatatype):
        arcpy.AddMessage(u"dirpath=="+dirpath)
    ##    for mypath in dirpath:
    ##        arcpy.AddMessage("mypath=="+mypath)
        for dirname in dirnames:
            arcpy.AddMessage(u"dirname=="+dirname)
        for filename in filenames:
            toolname.append(os.path.join(dirpath, filename))
    num=len(toolname)
    for i in  range(0,num):
        arcpy.AddMessage(u"i={0},name={1}".format(i,toolname[i]))

    4.10.2 获得一个数据库所有要素类

    #coding=utf8
    import arcpy
    import os
    import sys
    workspace=arcpy.GetParameterAsText(0) #输入数据库
    feature_classes = []
    #for dirpath, dirnames, filenames in arcpy.da.Walk(workspace,datatype="FeatureClass",type="Polygon"):
    mdatatype=['Table', 'FeatureClass']
    for dirpath, dirnames, filenames in arcpy.da.Walk(workspace,datatype=mdatatype):
        arcpy.AddMessage("dirpath=="+dirpath)
    ##    for mypath in dirpath:
    ##        arcpy.AddMessage("mypath=="+mypath)
        for dirname in dirnames:
            arcpy.AddMessage("dirname=="+dirname)
        for filename in filenames:
            feature_classes.append(os.path.join(dirpath, filename))
    num=len(feature_classes)
    for i in  range(0,num):
        arcpy.AddMessage("i={0},name={1}".format(i,feature_classes[i]))
  • 相关阅读:
    C#中关于@的用法
    c++ 中__declspec 的用法
    #pragma详细解释(一)
    memmove 和 memcpy的区别
    【niubi-job——一个分布式的任务调度框架】----安装教程
    [异能程序员]第一章 酒后事发(第一更)
    博客园的最后一篇博文,还是要离开了(附带个人博客源码分享)
    五一假期——技术之路上的坎儿
    deerlet-redis-client添加集群支持,邀请各路大神和菜鸟加入。
    从日常开发说起,浅谈HTTP协议是做什么的。
  • 原文地址:https://www.cnblogs.com/gisoracle/p/13537677.html
Copyright © 2020-2023  润新知