ArcPy_维护年度变更GDB数据库属性

背景:

  用某建库软件做年度变更,仍需手工处理以下问题:
  1、地类图斑图层线状地物宽度处理;
  2、城镇村等用地错误数据处理;
  3、村级调查区图层、行政区图层错误数据处理;

代码:

# -*- coding: cp936 -*-
import arcpy
path_gdb = 'D:/年度变更/工程文件/年度变更.gdb'#年末数据库。(导成果前维护此数据库)
path_gdb_gx = 'D:/年度变更/工程文件/补充更新数据.gdb'#补充更新数据库。(因为删除了年末库中部分CJDCQJXGX与XZQJXGX数据,需要补充进来)
cjdcq_delete = ['CJDCQ1','CJDCQ2']#待删除的CJDCQ坐落单位代码(因为某些原因,年末库会生成CJDCQ多余的相关更新数据)
xzq_delete = ['XZQ1','XZQ2']#待删除的XZQ坐落单位代码(因为某些原因,年末库会生成XZQ多余的相关更新数据)
len_min = 5#最小长度(小于阈值的数据会被删除)
area_min = 0.01#最小面积(小于阈值的数据会被删除)
#-------------------------------------------------------------------------
print('开始维护:DLTBGX 线状地物宽度')#更新地类图斑更新图层:线状地物宽度为0
fc = path_gdb+'/Data/DLTBGX'
fields = ['XZDWKD']
with arcpy.da.UpdateCursor(fc, fields) as cursor:
     for row in cursor:
             row[0]='0'
             cursor.updateRow(row)
#-------------------------------------------------------------------------
print('开始维护:DLTBGXGC 变更后线状地物宽度')#更新地类图斑更新过程图层:线状地物宽度为0
fc = path_gdb+'/Data/DLTBGXGC'
fields = ['BGHXZDWKD']
with arcpy.da.UpdateCursor(fc, fields) as cursor:
     for row in cursor:
             row[0]='0'
             cursor.updateRow(row)
#-------------------------------------------------------------------------
print('开始维护:CZCDYDGX 删除错误数据')#删除城镇村等用地更新图层:删除面积小于阈值的数据
fc = path_gdb+'/Data/CZCDYDGX'
fields = ['SHAPE_Area']
with arcpy.da.UpdateCursor(fc, fields) as cursor:
     for row in cursor:
             if row[0] < area_min:
                cursor.deleteRow()
#-------------------------------------------------------------------------
print('开始维护:CZCDYDGXGC 更新错误数据')#更新城镇村等用地更新过程图层:维护上一步删除的对应更新过程层属性
fc = path_gdb+'/Data/CZCDYDGXGC'
fields = ['SHAPE_Area','XZQTZLX','BGHBSM','BGHCZCLX','BGHCZCDM','BGHCZCMC','BGXW']
with arcpy.da.UpdateCursor(fc, fields) as cursor:
     for row in cursor:
             if row[0] < area_min and row[1] == '0':
                row[1]='4'
                row[2]=''
                row[3]=''
                row[4]=''
                row[5]=''
                row[6]='0'
                cursor.updateRow(row)
#-------------------------------------------------------------------------
print('开始维护:CJDCQJX 删除错误数据')#删除村级调查区界线图层:删除长度小于阈值的数据
fc = path_gdb+'/Data/CJDCQJX'
fields = ['SHAPE_Length']
with arcpy.da.UpdateCursor(fc, fields) as cursor:
     for row in cursor:
             if row[0] < len_min:
                cursor.deleteRow()
#-------------------------------------------------------------------------
print('开始维护:CJDCQJXGX 删除错误数据')#删除村级调查区界线更新图层:删除长度小于阈值的数据与变更行为为4的数据(因为某些原因,年末库会生成很多多余的CJDCQJXGX。有行政区划调整,删除数据后需要补充进来相关的CJDCQJXGX。其实做到后期,也可以直接导入无需修改、正确的CJDCQJXGX。)
fc = path_gdb+'/Data/CJDCQJXGX'
fc_gx = path_gdb_gx+'/Data/CJDCQJXGX'
fields = ['SHAPE_Length','BGXW']
with arcpy.da.UpdateCursor(fc, fields) as cursor:
     for row in cursor:
             if row[0] < len_min or row[1] == '4':
                cursor.deleteRow()
arcpy.MakeFeatureLayer_management(fc_gx, "CJDCQJXGX")
arcpy.SelectLayerByAttribute_management("CJDCQJXGX", "NEW_SELECTION")
arcpy.Append_management("CJDCQJXGX",fc,"NO_TEST") 
#-------------------------------------------------------------------------
print('开始维护:CJDCQGX 删除错误数据')#删除村级调查区更新图层:删除指定坐落单位代码的数据(因为某些原因,年末库会生成很多多余的CJDCQGX。)
fc = path_gdb+'/Data/CJDCQGX'
fields = ['ZLDWDM']
with arcpy.da.UpdateCursor(fc, fields) as cursor:
     for row in cursor:
             if row[0] in cjdcq_delete:
                cursor.deleteRow()
#-------------------------------------------------------------------------
print('开始维护:CJDCQGXGC 删除错误数据')#删除村级调查区更新过程图层:删除指定变更前坐落单位代码的数据(因为某些原因,年末库会生成很多多余的CJDCQGXGC。)
fc = path_gdb+'/Data/CJDCQGXGC'
fields = ['BGQZLDWDM']
with arcpy.da.UpdateCursor(fc, fields) as cursor:
     for row in cursor:
             if row[0] in cjdcq_delete:
                cursor.deleteRow()
#-------------------------------------------------------------------------
print('开始维护:XZQJX 删除错误数据')#删除行政区界线图层:删除长度小于阈值的数据
fc = path_gdb+'/Data/XZQJX'
fields = ['SHAPE_Length']
with arcpy.da.UpdateCursor(fc, fields) as cursor:
     for row in cursor:
             if row[0] < len_min:
                cursor.deleteRow()
#-------------------------------------------------------------------------
print('开始维护:XZQJXGX 删除错误数据')#删除行政区界线更新图层:删除长度小于阈值的数据与变更行为为4的数据(因为某些原因,年末库会生成很多多余的XZQJXGX。有行政区划调整,删除数据后需要补充进来相关的XZQJXGX。其实做到后期,也可以直接导入无需修改、正确的XZQJXGX。)
fc = path_gdb+'/Data/XZQJXGX'
fc_gx = path_gdb_gx+'/Data/XZQJXGX'
fields = ['SHAPE_Length','BGXW']
with arcpy.da.UpdateCursor(fc, fields) as cursor:
     for row in cursor:
             if row[0] < len_min or row[1] == '4':
                cursor.deleteRow()
arcpy.MakeFeatureLayer_management(fc_gx, "XZQJXGX")
arcpy.SelectLayerByAttribute_management("XZQJXGX", "NEW_SELECTION")
arcpy.Append_management("XZQJXGX",fc,"NO_TEST")
#-------------------------------------------------------------------------
print('开始维护:XZQGX 追加数据')#追加行政区更新图层:下发的基础库有个洞🤬🤬🤬(我也是服了,什么奇葩都能遇到)
fc = path_gdb+'/Data/XZQGXGC'
out_path = path_gdb+'/Data/XZQGX'     
arcpy.MakeFeatureLayer_management(fc, "XZQGX_Add")
arcpy.SelectLayerByAttribute_management("XZQGX_Add", "NEW_SELECTION", "SHAPE_Area<1")
arcpy.Append_management("XZQGX_Add",out_path,"NO_TEST") 
#-------------------------------------------------------------------------       
print('开始维护:XZQGX 删除错误数据')#删除行政区更新图层:删除指定坐落单位代码的数据(因为某些原因,年末库会生成很多多余的XZQGX。处理上一步追加的空洞。)
arcpy.env.workspace = path_gdb
fields = ['XZQDM']
with arcpy.da.UpdateCursor('Data/XZQGX', fields) as cursor:
     for row in cursor:
             if row[0] in xzq_delete:
                cursor.deleteRow()
#arcpy.Rename_management('Data/XZQGX', 'Data/XZQGX1')#图层重命名需要独占模式,弃用
arcpy.FeatureClassToFeatureClass_conversion('Data/XZQGX',path_gdb,'Data/XZQGX1')
arcpy.Delete_management('Data/XZQGX')
arcpy.MakeFeatureLayer_management('Data/XZQGX1', "XZQGX")
arcpy.SelectLayerByAttribute_management("XZQGX", "NEW_SELECTION", "SHAPE_Area<1")
arcpy.Eliminate_management("XZQGX",'Data/XZQGX','LENGTH')
arcpy.Delete_management('Data/XZQGX1')
#-------------------------------------------------------------------------
print('开始维护:XZQGXGC 删除错误数据')#删除行政区更新过程图层:删除指定变更前坐落单位代码的数据(因为某些原因,年末库会生成很多多余的XZQGXGC。处理基础库空洞造成的多余XZQGXGC。)
arcpy.env.workspace = path_gdb
fields = ['BGQXZQDM']
with arcpy.da.UpdateCursor('/Data/XZQGXGC', fields) as cursor:
     for row in cursor:
             if row[0] in xzq_delete:
                cursor.deleteRow()
#arcpy.Rename_management('Data/XZQGXGC', 'Data/XZQGXGC1')#图层重命名需要独占模式,弃用
arcpy.FeatureClassToFeatureClass_conversion('Data/XZQGXGC',path_gdb,'Data/XZQGXGC1')
arcpy.Delete_management('Data/XZQGXGC')
arcpy.MakeFeatureLayer_management('Data/XZQGXGC1', "XZQGXGC")
arcpy.SelectLayerByAttribute_management("XZQGXGC", "NEW_SELECTION", "SHAPE_Area<1")
arcpy.Eliminate_management("XZQGXGC",'Data/XZQGXGC','LENGTH')
arcpy.Delete_management('Data/XZQGXGC1')
#-------------------------------------------------------------------------      
print('over')


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

momo_al

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值