arcpy根据数据库标准创建数据库模板

根据数据库标准创建数据库模板

arcpy创建数据库

最近做生态保护红线评估优化调整工作,前两天部里下发了数据库标准,100多个图层,简直要命了。为了保证创建的数据库的准确性,那就用代码来试一试解决问题,正好好好学学python。
下图是国家要求的数据库:

在这里插入图片描述
下发下来的还是这种扫描的歪歪扭扭的pdf扫描件,找人把它处理成了电子表格。表格分为两部分,一个总表,描述数据库的要素集,图层名,类型,索引表;另一个就是各个索引表,存放在一个文件夹里,索引表里存储的就是各个图层的索引表。
layers总表
索引表
索引表的具体内容

思路

我的思路是,读取layers表,根据创建数据集,然后创建图层,赋值图层别名,找到对应的索引表,根据表添加字段。
2023年7月12日更新:增加了可以添加注记图层和表格的功能

读表

读取表格要跳过第一行,这可难倒我了。我原本想的是做个if判断 “约束条件”在List当中,就跳过这一行。结果遇到了个难题,可能是编码的问题,读取的值“约束条件”和我做判断时手输的“约束条件”两个值不相等!!试了转字符,转编码都没解决。咨询了单位的编程大佬巍哥,帮我整了一个定义读取文本的函数,用range(1, len(layerInfos))帮我解决可这个问题。

创建数据库

剩下的我觉得也没啥新奇的思路,都是简单的逻辑,一直往下写就行了。话不多说,直接贴代码。2023年7月12日更新

############
import arcpy
import os
import sys
reload(sys)
sys.setdefaultencoding('utf8')

def readGbkTxtAsList(txtPath, encoding="gbk"):
    ret = []
    with open(txtPath) as f:
        while True:
            line = f.readline().decode(encoding)
            if line is not None and line.__contains__(","):
                arr = line.replace("\n", "").split(",")
                ret.append(arr)
            else:
                break
    return ret

Input_layers = arcpy.GetParameterAsText(0)
Input_bgwjfolder = arcpy.GetParameterAsText(1)
CoordinateSystem = arcpy.GetParameterAsText(2)
Output_folder = arcpy.GetParameterAsText(3)
XY_FenBianLv = arcpy.GetParameterAsText(4)
XY_RongCha = arcpy.GetParameterAsText(5)
Empty_Annotation = arcpy.GetParameterAsText(6)
VarZDCD = arcpy.GetParameterAsText(7)

arcpy.env.XYResolution = XY_FenBianLv
arcpy.env.XYTolerance = XY_RongCha
arcpy.env.outputCoordinateSystem = CoordinateSystem

Shuchu = r"shujuku.gdb"
arcpy.CreateFileGDB_management(Output_folder, Shuchu)
ShuchuFullname = os.path.join(Output_folder, Shuchu)
arcpy.AddMessage("创建数据库:" + ShuchuFullname)

layerInfos = readGbkTxtAsList(Input_layers)
for i in range(1, len(layerInfos)):
    (yssjjmc, tczwmc, tcywmc, jhtz, sxbsy) = layerInfos[i]
    arcpy.AddMessage("\n\n")
    arcpy.AddMessage(yssjjmc + "--" + tczwmc + "--" + tcywmc +  "--" + jhtz + "--" + sxbsy)
    if yssjjmc == "无":
        yssjjlj = ShuchuFullname
    else:
        yssjjlj = os.path.join(ShuchuFullname, yssjjmc)
        if arcpy.Exists(yssjjlj):
            pass
        else:
            arcpy.CreateFeatureDataset_management(ShuchuFullname, yssjjmc)
    tcmcFullname = os.path.join(yssjjlj, tcywmc)
    if jhtz == "Annotation":
        arcpy.DefineProjection_management(Empty_Annotation, CoordinateSystem)
        arcpy.CopyFeatures_management(Empty_Annotation, tcmcFullname)
    elif jhtz == "Table":
        arcpy.CreateTable_management(yssjjlj, tcywmc)
    else:
        arcpy.CreateFeatureclass_management(yssjjlj, tcywmc, jhtz)
    arcpy.AlterAliasName(tcmcFullname, tczwmc)  # 修改图层别名
    arcpy.AddMessage("创建图层:      " + tczwmc)
    bgmc = sxbsy + u".csv"
    f1 = os.path.join(Input_bgwjfolder, bgmc)
    f2 = readGbkTxtAsList(f1)
    arcpy.AddMessage("读取属性表: " + sxbsy + "的信息")
    for i in range(1, len(f2)):
        (xh, zdmc, zddm, zdlx, zdcd, sxws, zy, sxystj, bz) = f2[i]
        if zdlx == "Char":
            zdlx = "TEXT"
        elif zdlx == "Float":
            zdlx = "DOUBLE"
        elif zdlx == "Int":
            zdlx = "LONG"
        elif zdlx == "Date":
            zdlx = "DATE"
        else:
            zdlx = "TEXT"
            zdcd = VarZDCD
        arcpy.AddMessage("添加字段   " + zdmc)
        if sxystj == "M":
            if zdlx == "DOUBLE":
                arcpy.AddField_management(tcmcFullname, zddm, zdlx, "", "", "", zdmc, "NON_NULLABLE")
            elif zdlx == "LONG":
                arcpy.AddField_management(tcmcFullname, zddm, zdlx, "", "", "", zdmc, "NON_NULLABLE")
            elif zdlx == "DATE":
                arcpy.AddField_management(tcmcFullname, zddm, zdlx, "", "", "", zdmc, "NON_NULLABLE")
            else:
                arcpy.AddField_management(tcmcFullname, zddm, zdlx, "", "", zdcd, zdmc, "NON_NULLABLE")
        else:
            arcpy.AddField_management(tcmcFullname, zddm, zdlx, "", "", zdcd, zdmc)

结论

小白初学python,发现python确实容易上手,易于理解,加上arcpy的帮助文档已经很详细了,在这种情况下,一天半的时间敲出这么个60多行,我觉得也能接受,毕竟新手上路,来日方长。其实写代码的时候也会反思道、到其他工作,做事需要认真仔细,举一反三,这样也可以避免很多问题。

界面

请注意看工具说明
在这里插入图片描述

链接

https://download.csdn.net/download/qq_16906441/12585394

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值