1、第 卷 第期 年月陕西 林 业 科 技S h a a n x iF o r e s t S c i e n c ea n dT e c h n o l o g yV o l N o A p r d o i:/j i s s n 收稿日期:作者简介:梁建方(),男,贵州桐梓人,林业助理工程师,主要从事林业 S技术应用与林业调查规划工作.基于P y t h o n的贵州省退耕还林数据质检方法梁建方,曹霸(贵州林业勘察设计有限公司;贵州省林业调查规划院,贵州 贵阳 )摘要:针对贵州省的退耕还林数据质检,以往运用A r c G I S自带工具箱进行数据质检时存在步骤繁琐、重复性高、效率低、易出错等问题
2、,文章基于P y t h o n语言和A r c P y站点包编写脚本工具实现对m d b格式数据库结构、图形以及属性等检查,自动生成质检结果,提高了工作效率,保证了成果质量.关键词:退耕还林;P y t h o n;A r c P y;数据质检中图分类号:F 文献标志码:B文章编号:()P y t h o n b a s e dD a t aQ u a l i t yI n s p e c t i o nM e t h o df o rG r a i nf o rG r e e nP r o j e c t i nG u i z h o uP r o v i n c eL I ANGJ i
3、a n f a n g,C AOB a(G u i z h o uF o r e s t I n v e n t o r ya n dP l a n n i n gC o r p o r a t i o n,G u i y a n g,G u i z h o u ;G u i z h o uI n s t i t u t eo fF o r e s t I n v e n t o r y,P l a n n i n ga n dD e s i g n,G u i y a n g,G u i z h o u )A b s t r a c t:I nv i e wo f t h eq u a l
4、i t y i n s p e c t i o no f t h ed a t ao fg r a i nf o rg r e e np r o j e c t i nG u i z h o uP r o v i n c e,p r o b l e m ss u c ha sc u m b e r s o m es t e p s,h i g hr e p e a t a b i l i t y,l o we f f i c i e n c ya n de r r o rp r o n ee x i s t e dw h e nA r c G I St o o l b o xw a sa p
5、p l i e dt oc o n d u c td a t aq u a l i t y i n s p e c t i o ni nt h ep a s t T h i sp a p e r,b a s e do nP y t h o nl a n g u a g ea n dA r c P ys i t ep a c k a g e,w r o t e a s c r i p t t o o l t oc h e c kt h e s t r u c t u r e,g r a p h i c s a n da t t r i b u t e so f t h ed a t a b a
6、s e i nm d b f o r m a t a n da u t o m a t i c a l l yg e n e r a t e dq u a l i t y i n s p e c t i o nr e s u l t s,w h i c hh e l p si m p r o v i n gt h ew o r ke f f i c i e n c ya n de n s u r e s t h eq u a l i t yo f t h er e s u l t s K e yw o r d s:G r a i nf o rG r e e nP r o j e c t;P y
7、 t h o n;A r c P y;d a t aq u a l i t y i n s p e c t i o n退耕还林是指从保护和改善生态环境出发,将易造成水土流失的坡耕地和易造成土地沙化的耕地,有计划、分步骤地停止耕种,本着宜乔则乔、宜灌则灌、宜草则草,乔灌草结合的原则,因地制宜地造林种草,恢复林草植被,是国家加强西部地区生态环境建设和保护的一项重大决策.贵州省喀斯特地貌广泛分布,生态环境脆弱,为修复和改善生态环境,贵州省积极响应国家提出的退耕还林决策,大力实施退耕还林工程,从 年启动试点工作到 年,已完成退耕还林任务面积 万公顷.此项工作每年需完成的任务量较大,会被分解到全省各县级
8、林业主管部门实施,县级林业主管部门在规定时间内完成任务后,再对实施地块进行矢量化处理,形成矢量数据并提交到省级林业主管部门,省级林业主管部门会组织专业技术人员对数据进行内外业质检,其中内业质检工作具有时间紧、数据量大、检查内容多和重复性高的特点,运用A r c G I S软件自带工具箱进行数据人工质检,不仅效率低下,而且容易出错,而P y t h o n是一种不受局限、跨平台的开源编程语言,它处理速度快、功能强大且简单易学,能与A r c G I S平台达到了完美的融合与集成,用它来编写脚本程序将大大提升数据处理效率,更好的解决批量生产、实现地理处理自动化.因此,文章基于P y t h o n
9、语言和A r c P y站点包编写脚本工具,高效地完成对退耕还林数据的自动化质检.数据库结构与质检内容设计 数据库结构设计退耕还林数据库结构包括个要素数据集、个要素类(县、乡、村、标准库)张字典表(代码表、退耕还林任务表),县、乡、村和字典数据利用已有数据修改,标准库依据退耕还林调查因子设计,本次质检标准库共设计 个字段,标准库结构如表所示.表退耕还林标准库字段结构表字段名字段别名字段类型字段长度允许空值XMMC项目名称文本 否X I AN县文本否X I AN G乡文本否C UN村文本 否NY J C X B H验收小班号文本 否Z C S B N D自查上报年度文本否D I L E I现地类
10、文本否Y Z L Q D L营造林前地类文本否Z L Y S S Z造林优势树种文本否M I AN J I上报面积双精度 否T XM J图形面积双精度 否D C R Y调查人员文本 否D C S J调查时间日期 否G L DW管理单位文本否B E I Z HU备注文本 是 数据质检内容设计退耕还林数据质检内容主要包括图形检查和属性检查,如表所示.表退耕还林数据质检内容序号质检内容上报矢量数据字段结构是否与标准库一致.上报矢量数据是否存在重叠、自相交等拓扑错误.上报矢量数据是否存在多部件错误.上报矢量数据是否存在缝隙问题.上报矢量数据县、乡、村必填,且需与县面、乡面、村面在空间位置上一致.上报矢
11、量数据自查上报年度、验收小班号必填,且村代码自查上报年度验收小班号不能重复.上报矢量数据现地类、造林优势树种、营造林前地类等必填,且需按照检查字典代码填记.上报矢量数据上报面积与图形面积必填,且上报面积与图形面积差值不能超.数据质检流程根据质检内容,退耕还林数据质检主要分三个部分进行:数据库结构检查、图形检查与属性检查,具体流程如图所示.其中数据库结构检查是为了使各单位提交的数据标准化、规范化,以保证数据质检工作顺利完成以及后期全省数据顺利合库;图形检查是为了避免数据存在重叠、自相交、多部件及缝隙;属性检查是为了避免数据出现属性漏填、错填以及逻辑关系不匹配等问题,通过三个部分检查,就产出了合格
12、的矢量数据库成果.图数据质检流程图 年 第 卷 第期梁建方等基于P y t h o n的贵州省退耕还林数据质检方法质检工具实现利用P y t h o n语言和A r c P y站点包编制脚本工具分别实现数据库结构、拓扑、多部件、缝隙、属性检查,之后将这些脚本工具共同集成为一个脚本工具来实现数据的高效质检.数据库结构检查数据库结构检查内容主要是上交矢量数据与数据质检标准库的字段数和字段属性必须一致.此项检查可直接利用A r c p y提供的表比较站点包完成,最后在导出的数据结构比较结果中查看两者之间的结构是否相同.主要代码如下所示:数据结构检查d e fD a t a S t r u c t C
13、 h e c k():c o m p a r e_f i l e o u t p a t h 数据结构比较t x t a r c p y T a b l e C o m p a r e_m a n a g e m e n t(T GHL_B Z K,T GHL_S J,O B J E C T I D,S CHEMA_ON L Y,I GNO R E_E X T E N S I ON_P R O P E R T I E S,WE L L_D E P TH ,C ON T I NU E_C OMP A R E,c o m p a r e_f i l e)拓扑检查拓扑检查内容为上交矢量数据不能存在自
14、重叠、自相交,以及不能与已经上交的退耕还林矢量数据存在重叠.其中重叠检查可直接利用A r c p y提供的拓扑站点包创建拓扑,依次利用拓扑规则“M u s tN o tO v e r l a p(A r e a)”和M u s tN o tO v e r l a pW i t h(A r e aA r e a)完成检查,自相交检查则需要利用要素转线站点包把面要素转为线要素,然后 创建拓扑并 利用拓扑规 则M u s tN o tS e l f I n t e r s e c t(L i n e)完成检查,最后在导出的拓扑图层中查看数据是否存在拓扑错误.主要代码如下所示:拓扑检查d e fT o
15、 p o C h e c k():重叠检查a r c p y C r e a t e T o p o l o g y_m a n a g e m e n t(c h e c k_m d b_s e t,重叠检查)a r c p y A d d F e a t u r e C l a s s T o T o p o l o g y_m a n a g e m e n t(c h e c k_m d b_s e t 重叠检查,T GHL_S J,)a r c p y A d d R u l e T o T o p o l o g y_m a n a g e m e n t(c h e c k_m
16、d b_s e t 重叠检查,M u s tN o tO v e r l a p(A r e a),T GHL_S J,)a r c p y A d d F e a t u r e C l a s s T o T o p o l o g y_m a n a g e m e n t(c h e c k_m d b_s e t 重叠检查,T GHL_P F,)a r c p y A d d R u l e T o T o p o l o g y_m a n a g e m e n t(c h e c k_m d b_s e t 重叠检查,M u s tN o tO v e r l a p W i
17、t h(A r e aA r e a),T GHL_S J,T GHL_P F,)a r c p y V a l i d a t e T o p o l o g y_m a n a g e m e n t(c h e c k_m d b_s e t 重叠检查)自相交检查d a t a_l i n ec h e c k_m d b_s e t T GHL_S J T o L i n e d a t a_l i n e_d i s c h e c k_m d b_s e t T GHL_S J T o L i n e_d i s a r c p y F e a t u r e T o L i n
18、e_m a n a g e m e n t(T GHL_S J,d a t a_l i n e)a r c p y D i s s o l v e_m a n a g e m e n t(d a t a_l i n e,d a t a_l i n e_d i s,F I D_ 退 耕 还 林 小 班 _ 上 交,MU L T I_P A R T,D I S S O L V E_L I N E S)a r c p y C r e a t e T o p o l o g y_m a n a g e m e n t(c h e c k_m d b_s e t,自相交检查)a r c p y A d
19、d F e a t u r e C l a s s T o T o p o l o g y_m a n a g e m e n t(c h e c k_m d b_s e t 自相交检查,d a t a_l i n e_d i s,)a r c p y A d d R u l e T o T o p o l o g y_m a n a g e m e n t(c h e c k_m d b_s e t 自相交检查,M u s tN o t S e l f I n t e r s e c t(L i n e),d a t a_l i n e_d i s,)a r c p y V a l i d
20、a t e T o p o l o g y_m a n a g e m e n t(c h e c k_m d b_s e t 自相交检查)多部件检查多部件检查内容为上交矢量数据不能存在多部件.此项检查在A r c p y中没有提供现成的站点包,因此在检查时可以利用添加字段站点包新增一个字段“D B J”,然后再利用计算字段站点包完成数据图形的部件数计算,最后在其属性表中查看图形的部件数,若部件数大于,则说明数据存在多部件数据.具体代码如下所示:多部件检查d e fM u l t i p a r t C h e c k():a r c p y A d d F i e l d_m a n a g
21、 e m e n t(T GHL_S J,D B J,T E X T,)a r c p y C a l c u l a t e F i e l d_m a n a g e m e n t(T GHL_S J,D B J,!s h a p e p a r t c o u n t!,P Y 陕西林业科技THON,)缝隙检查缝隙检查内容为上交矢量数据不能存在面积小于 m的缝隙.此项检查在A r c p y中也没有提供现成的站点包,因此在检查时可以利用擦除站点包完成上交矢量数据对县面的擦除,然后利用多部件至单部件站点包完成擦除结果数据的炸开,最后在其属性表中查看数据库自动生成的面积,若小班面积小于 m
22、,则说明数据存在缝隙.具体代码如下所示:缝隙检查d e fG a p s C h e c k():o u t E r a s ec h e c k_m d b_s e t XM_E r a s e o u t S i n g l e p a r tc h e c k_m d b_s e t 缝隙检查a r c p y E r a s e_a n a l y s i s(XM,T GHL_S J,o u t E r a s e,)a r c p y M u l t i p a r t T o S i n g l e p a r t_m a n a g e m e n t(o u t E r a
23、s e,o u t S i n g l e p a r t)属性检查属性检查内容为上交矢量数据必填项必须填记完整,字典项必须符合事先制定的数据字典,以及其属性表各字段之间的逻辑关系必须符合事先制定的检查规则.在进行此项检查前需要建立p y p y o d b c模块与m d b格式数据库的连接,然后利用事先制定的数据字典和检查规则建立S Q L语句(S E L E C T F R OM WH E R E)对数据进行遍历查询并获取有逻辑问题的“O B J E C T I D”字段的值,接着将其与对应的质检内容、错误记录数追加进行一个空数组中,待检查结束后将其写入E x c e l并导出质检结果,
24、最后在导出的质检结果中查看数据是否存在属性错误.其主要代码如下所示:通过S Q L语句查询数据逻辑问题d e fg e t D a t a B y S q l(F e a t u r e,S Q L,Z J N R):c o n s t r D r i v e rM i c r o s o f tA c c e s sD r i v e r(m d b);D B Q c h e c k_m d bc o n n p y p y o d b c w i n_c o n n e c t_m d b(c o n s t r)c u rc o n n c u r s o r()c u r e x e
25、c u t e(S Q L)d a t a E r r o r sc u r f e t c h a l l()io b j e c t i d i f l e n(d a t a E r r o r s)!:f o rd a t a E r r o r i nd a t a E r r o r s:o b j e c t i d o b j e c t i d,s t r(d a t a E r r o r)i d a t a_e r r o r a p p e n d(Z J N R,i,o b j e c t i d:)c o n n c o mm i t()c u r c l o s
26、e()c o n n c l o s e()写入E x c e l并导出质检结果d e fW r i t e E x c e l():o u t E x c e l o u t p a t h 质检结果 x l s w o r k b o o kx l w t W o r k b o o k(e n c o d i n gu t f )s h e e t w o r k b o o k a d d_s h e e t(质检结果)s h e e t w r i t e(,质检内容)s h e e t w r i t e(,错误数)s h e e t w r i t e(,错误数据O B J E
27、C T I D)d a t a_l e n s l e n(d a t a_e r r o r)i fd a t a_l e n s!:j f o rd a t a i nd a t a_e r r o r:s h e e t w r i t e(j,(d a t a)s h e e t w r i t e(j,(d a t a)s h e e t w r i t e(j,(d a t a)j e l s e:a r c p y A d d M e s s a g e(无逻辑错误)w o r k b o o k s a v e(o u t E x c e l)质检工具应用为方便检查人员使用脚本
28、工具,可在A r c G I S软件目录中创建一个工具箱,然后在工具箱下添加一个脚本工具,接着导入退耕还林数据质检脚本文件,最后在参数栏分别添加个要素类(退耕还林上交数据、退耕还林配发数据、县面及退耕还林标准库)个数据集(输出拓扑检查结果存储路径)即可完成质检工具创建.检查人员使用质检工具时只需双击打开质检工具并选择对应数据(如图所示),然后运行质检工具即可自动完成数据质检(如图所示),最后打开并查看导出的结果即可判断质检数据是否合格(如图所示).结语文章根据贵州省退耕还林数据质检中遇到的 年 第 卷 第期梁建方等基于P y t h o n的贵州省退耕还林数据质检方法图数据质检工具图数据质检运
29、行过程问题,利用P y t h o n语言和A r c P y站点包编写脚本工具,实现对数据的自动化质检,在一定程度上降低人为因素造成错误的概率,提高了质检工作效率,保证了数据质检工作顺利地完成,可为其他图数据质检结果数据质检工作提供一定的思路.但也存在不足之处,质检工具导出的结果相对较多,不能最大限度缩短质检人员进行人工排查结果数据耗费的时间,后续可在本质检工具的基础上修改完善,进一步提高数据质检的工作效率,同时也能调用检查模块服务于其他数据质检.参 考 文 献:支玲,刘俊昌,华春退耕还林(草)的含义与实施基础的研究J世界林业研究,():时启龙,邱琳,喻俊基于A c r g i s的P y t h o n脚本在森林资源年度更新中的应用J陕西林业科技,():曾伟基于P y t h o n的贵州省古树大树名木资源调查数据质检工具设计与实现J内蒙古林业调查设计,():杨明星,徐天蜀,施锐平,等基于P y t h o n的A r c G I S林业专题图批量生成方法J中南林业调查规划,():陕西林业科技