借助python构建自定义工具之判断并删除重复要素

上传人:我*** 文档编号:135875826 上传时间:2020-06-19 格式:DOC 页数:7 大小:313KB
返回 下载 相关 举报
借助python构建自定义工具之判断并删除重复要素_第1页
第1页 / 共7页
借助python构建自定义工具之判断并删除重复要素_第2页
第2页 / 共7页
借助python构建自定义工具之判断并删除重复要素_第3页
第3页 / 共7页
借助python构建自定义工具之判断并删除重复要素_第4页
第4页 / 共7页
借助python构建自定义工具之判断并删除重复要素_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《借助python构建自定义工具之判断并删除重复要素》由会员分享,可在线阅读,更多相关《借助python构建自定义工具之判断并删除重复要素(7页珍藏版)》请在金锄头文库上搜索。

1、借助python构建自定义工具之判断并删除重复要素 /文问题:对输入的数据,按照图形或者指定字段进行判断重复,并由用户来决定是否删除粗略分析,工具界面大致需要输入项:1.Input Feature Class:可能是shapefile,也可能是GDB要素集。为了不影响源数据,统一对源数据拷贝一份,对拷贝后数据操作,作为本工具的输出结果。2.Duplicate Field(s):可能需要根据图形,也可能根据某个(些)字段。不管是那种,字段都是输入文件或者要素集含的字段,所以这里设想能够关联Input Feature Class获取其字段,让用户勾选,类似Delete Field3.Delete

2、Duplicate Features:用户定义是否删除,所以这项定义为Boolean类型,界面上为勾选(check)界面预览:编写脚本:1.python编写环境ArcGIS Desktop Help里介绍的是 pythonwin,但是目前自带的只有IDLE,可以根据当前python版本down一个适合的pythonwin,也可以就用IDLE(Python GUI)2.参考 ArcGIS Desktop HelpGeoprocessingAutomating your work with scriptsGetting started with writing geoprocessing scri

3、ptsCreating a new Python script module 此部分介绍如何创建一个python模块3.具体函数在这个脚本里面,主要用到了这几个函数3.1文本处理函数 us,作用是去掉s 前后空格,并将其转为大写输出#trim and ucase a string def us(s):return string.upper(strip(str(s)3.2判断要素集fc中是否存在某字段field,返回True或者False#check if field exists in FeatureClass fcdef blnExistField(fc,field): flag = Fal

4、se fds = gp.ListFields(fc) fds.Reset() fd = fds.Next() while fd: if us(fd.name) = us(field): flag = True fd = None else: fd = fds.Next() del fds,fdreturn flag3.3 对要素集遍历,计算每一个要素的四至值(Geometry.Extent MinX,MinY,MaxX,MaxY)#calculate MinX;MinY;MaxX;MaxY def cal(fc): #add MinX;MinY;MaxX;MaxY fds = MinX;Min

5、Y;MaxX;MaxY for i in range(0,len(fds.split(;): fd = fds.split(;)i if blnExistField(fc,fd) = False: gp.addfield_management(fc,fd,Double) #calculate MinX;MinY;MaxX;MaxY rows = gp.UpdateCursor(fc) rows.Reset() row = rows.Next() while row: Geo = row.GetValue(shapeFieldName) for i in range(0,len(fds.spli

6、t(;): fd = fds.split(;)i row.SetValue(fd,Geo.extent.split()i) rows.UpdateRow(row) row = rows.Next() del rows, row, fds, fdreturn MinX;MinY;MaxX;MaxY + have beed calculated.3.4根据某个(些)字段,判断要素集中的重复要素,并对iDup字段赋值为1,其余赋值为0#calculate idup field by duplicate fieldsdef CaliDup(fc,fields): v1= sort = for i in

7、 range(0,len(fields.split(;): if i = 0: sort = fields.split(;)i + D else: sort = sort + ; + fields.split(;)i + D rows = gp.UpdateCursor(fc,sort) row = rows.Next() while row: v2 = for i in range(0,len(fields.split(;): v2.append(row.GetValue(fields.split(;)i) if v1 = v2: row.SetValue(idup,1) rows.Upda

8、teRow(row) else: v1 = v2 row.SetValue(idup,0) rows.UpdateRow(row) row = rows.Next() del rows , row, sort ,v1 ,v2return idup + has beed calculated.3.5 根据标识flag判断是否删除重复要素#delete featuresdef delfeatures(fc,whereclause,flag): delmsg = try: gp.makefeaturelayer_management(fc,tmp_lyr,whereclause) if gp.get

9、count_management(tmp_lyr) 0: if flag = true: gp.deletefeatures_management(tmp_lyr) delmsg = Delete completed. delmsg = delmsg + n +After deleting duplicate therere + str(gp.getcount_management(fc) + features left. else: delmsg = Therere + str(gp.getcount_management(tmp_lyr) + duplicate Features. els

10、e: delmsg = There is no duplicate feature. gp.delete(tmp_lyr) return delmsg except: return Error while deleting Features.4 组合完整4.1 import 和 createimport arcgisscriptingimport stringfrom string import *import osimport sysgp = arcgisscripting.create()gp.overwriteoutput = 14.2 获取用户输入值,作为脚本运行参数#input fe

11、atureclassfc = sys.argv1#decide shape or other attribute(s)dup = sys.argv2#decide delete duplicate features or notblnDel = sys.argv34.3 拷贝源文件为_DelDup,此时要判断是shapefile还是要素集if fc.endswith(.shp): outfc = fc.replace(.shp,_DelDup.shp) wc = +idup+ = 1 else: outfc = fc + _DelDup wc = +idup + = 1 #copy featu

12、reclass to fc+deldup for bak gp.copy_management(fc,outfc)msg = copy %s to %s done.%(fc,outfc)gp.AddMessage(msg)fc = outfc4.4 根据图形或属性判断重复#tow ways to check#by geographic or attributes#add iDup to define which will be deletedif us(dup) = us(shape): msg = Begin to delete Features by Geographic. msg = c

13、al(fc) gp.AddMessage(msg) msg = CaliDup(fc,MinX;MinY;MaxX;MaxY) gp.AddMessage(msg)else: msg = CaliDup(fc,dup) gp.AddMessage(msg)4.5 处理结束注意删除用到的cursor(UpdateCursor等),因为如果代码执行异常,这些可能导致数据锁定del fc ,gp ,outfc , rows,row4.6 异常处理Try: except: msg = Error,please check or eMail your problem to . gp.AddError(msg)至此

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 事务文书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号