罗灿培, 陈爱梅, 单 正
(1.云南导视地理信息系统工程有限公司,云南 昆明 650056; 2.西南林业大学土木工程学院,云南 昆明 650224; 3.中国电建昆明勘测设计研究院有限公司,云南 昆明 650051)
2013年的中央一号文件明确指出“用5年时间基本完成农村土地承包经营权确权登记颁证工作,妥善解决农户承包地块面积不准、四至不清等问题”[1]。以稳定农村集体土地二轮承包为基础,依据农村集体土地二轮承包合同,查清承包方所承包地块的面积和位置相关信息,通过解决承包地块的面积、四至、空间位置、登记簿等问题,将把承包地块、面积、合同、权属证书全面落实到户[2],建立农村土地承包经营权登记簿和管理信息系统,依法赋予农民对承包土地的占有、使用和收益等权能,提升农村土地承包管理信息化的水平,为智慧农业提供强有力的基础数据。农村土地承包经营权确权调查质量检查是监督农村土地承包经营权确权登记调查进度和成果质量的根本措施,直接关系到此项调查工作的完整性、正确性和合法性,是确保调查成果公告公示、成果签字、颁证等一系列工作的基本前提[5]。其中,矢量数据和属性数据成果的检查尤为重要。
本文在阐述农村土地承包经营权确权调查数据库成果质量控制过程检查方法的基础上,结合国家、省关于数据库汇交要求和农村土地承包经营权数据库成果质量检查的规则,基于ArcGIS10.2.2平台,利用Python脚本语言设计开发了属性数据、权属数据及其关联信息一致性的自动检查工具。该检查工具的使用提高了数据库建设的工作效率,保证了数据库建设的质量[5]。在云南省广南县、富宁县、新平县、江城县、永德县等地项目的应用实践,进一步验证了该工具在数据库建设生产上的可行性和实用性。
农村土地承包经营权数据库是一个兼顾了空间矢量数据和属性数据的一个集合库,其中,包含了描述承包地块空间位置信息、承包方相关的属性信息数据及两者间的信息关联。一个合格、标准的农村土地承包经营权数据库,其建设时的规范化、标准化、信息化等的表达极为重要。
(1)要素表达的完整性。农村土地承包经营权数据库涵盖了关于承包地块及其界址所有矢量信息和权属信息,满足空间、属性要素关联和不重不漏等要求,可完整地表达出各类矢量图形元素和属性元素[7]。
(2)数据组织的规范性。县级农村土地承包经营权数据库所涉及到承包地块、界址点、界址线等矢量数据量大复杂,后期的不动产数据整合将对其进行分析和数据共享[7]。因此,在管理数据时采用了专业的地理信息软件和数据库平台,并根据信息化建设的要求对数据格式进行了规范化,便于后期的有效利用。
(3)足够的数学精度要求。为了后期的精细化数据管理,通过对位置、属性来进行表达实现,符合准确性和可靠性要求。
(4)准确无误的矢量拓扑和属性逻辑关系。成果表格的输出、证书打印和对空间数据的计算查询与分析都是以正确的拓扑关系和准确的属性逻辑关系为基础。
农村土地承包经营权数据库成果的质量直接反应了该项调查成果数据的质量,对后期农业主管部门对数据的管理、决策和应用有很大的决定性作用。数据成果质量检查是一个综合且复杂的过程,它针对不同的数据问题产生的过程和环节等采用相应的检查方法进行检查。现阶段测绘地理信息项目通常采用的方法主要有:常规人工检查、质检软件自动检查、人机交互综合检查等方法。其中,常规的人工检查方法具有简单易操作的优点,但投入的成本过高、检查效率较低;质检软件自动检查方法缺乏灵活性,局限于质检规则,检查结果可自动输出,相对较为规范;人机交互综合检查则集成了前两种方法的优劣,还可以加入自定义的检查内容和方法,也是目前应用较广泛的方法之一。
(1)矢量数据的检查
根据数据库汇交的要求,主要包含承包地块、界址点、界址线、行政区等要素间的拓扑错误及要素自相交、自重叠、细小缝隙、小于5°的尖锐角、节点距离应不小于0.05 m、要素多部分检查等内容。
(2)属性数据的检查
包括属性项和属性值的检查。其中,属性项检查主要对字段定义的类型、长度、小数位数进行规范符合性的检查。属性值检查主要针对属性数据必填字段是否存在空值、是否存在非法字符、取值是否在有效范围内、唯一值是否存在重复等方面进行检查[6]。
在调查成果数据正式导入农村土地承包经营权数据库之前,必须要进行全面的矢量数据和属性数据的相关项检查,在进行自身属性项和属性值的检查的同时还要进行相互间逻辑关联一致性的检查。
2.2.1 矢量数据的检查
(1)不合理缝隙
在农村土地承包经营权数据库中,不合理的缝隙是指界址线之间存在的狭小的不合理的隙缝。主要为相邻图斑的公共边上因捕捉等原因出现的图形间的微小间隙、矢量上图过程中因图形绘制时的抖动而导致图斑位移、不同村组数据接边导致出现缝隙等。在该数据库中,此类错误容易引发拓扑、面积等错误,在质量检查软件中作为严重缺陷项进行检查。其检查思路如下:首先提取待检查承包地块DK并导入新建立的GDB格式数据库,图层命名为DK_FX;其次创建容差为0.000 1的拓扑并加入拓扑要素DK,设置检查缝隙的拓扑规则生成拓扑;然后设置限值并导出要素为DK_FXJC。如图1所示。
(2)多部分
多部分是指存在一条属性记录对应多个矢量图形。该类错误主要原因是内业人员矢量化时分割合并出错,它不满足地块代码唯一性的要求。检查思路如下:遍历待检查的要素图层,导入GDB数据库,通过Part Count函数计算并通过其值是否大于零来判断记录对应的信息,完成后导出记录。
(3)小锐角
小锐角是指地块及地块界址线之间存在的不合理的角度小于5°或者大于355°的尖锐角。在实际过程中,通常存在以下两种:一种是同一地块界址线之间形成的尖角,另一种是相邻地块之间构成的尖角[6]。主要是因为内业上图技术人员矢量化时粗心或者对两个不同作业人员数据接边时因对重叠部分的叠加分析造成。在数据库建设时拓扑检查是难以发现该类错误的。其检查的思路如下:将DK导入新建的GDB数据库,依次逐个获取每个要素DK的顶点DK_D,连续的三个DK_D构成三角形,同时获取DK_D的坐标值及其边长,依据余弦定理可计算角度值;根据角度值来判读是否小于规定值5°,然后输出错误位置为DK_JD。如图2所示。
图1 不合理缝隙检查流程
图2 小锐角检查流程
主要代码如下:
#######角点数量及角度判断
angle_rj = 0
angle_cf = 0
num = 0
while row:
num += 1
shapeName= gp.Describe(input_poly).shapeFieldName
geom = row.getValue(shapeName)
part_count = geom.partCount
count = 0
while count < part_count:
p = geom.getPart(count)
p_b = p.next()
p_S = p_b
p1 = p_b
p2 = p.next()
p3 = p.next()
p_2 = p2
while p3:
x1 = round(p1.X,3)
####类似获取角点坐标
y1 = round(p3.Y,3)
####获得两角点间的线段长度
if (math.fabs(x1-x2)<0.5 and math.fabs(x2-x3)<0.5) or (math.fabs(y1-y2)<0.5 and math.fabs(y2-y3)<0.5):
jiao = -1
else:
l1 = math.sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3))
l2 = math.sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3))
l3 = math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))
if l1==0 or l2==0 or l3==0:
angle_cf += 1
else:
cj = (l1*l1+l3*l3-l2*l2)/(2*l1*l3)
jiao = math.cos(angle_min*3.1415926/180)
if cj >= jiao:
angle_rj += 1
count = count+1
#####同上原理处理其他情况的角度,然后判定结果:当计算角度小于设定值时即可认为角度存在问题。
if angle_cf >0 :
str_Err = "存在"+str(angle_cf)+"个重复点 "
if angle_rj >0 :
str_Err = "存在"+str(angle_rj)+"个尖角"
str_Err = str_Err.strip()
if len(str_Err)!=0:
row.setValue("Angle_chk",str_Err)
cur.updateRow(row)
str_Err = ""
row = cur.next()
(4)自相交和过近点
自相交在数据库建设过程中较为常见,主要是在进行地块图形编辑时采集要素节点时反复添加某一点位会产生自相交错误,或者是作图人员误操作拖动了节点引起图形产生自相交[6]。该类错误在质检规则中属于严重缺陷,应及时处理以满足地块面积计算和入库的需要。
根据农村土地确权数据库建设质量要求,矢量数据地块界址线两节点间的图上距离小于0.05 m时,应该实际核实界址线的真实性[3-4]。
自相交检查思路如下:遍历图层要素将DK导入新建的GDB数据库,把面要素DK转成内部点(Inner_Point)作为接下来线转面(New_DK)的标记要素;其次,通过地块界址点分割面要素DK转成线要素DK_L,再由线DK_L和Inner_Point转成面DK_LP,提取Join_Count为0的可疑地块,将面相交后转内部点,关联新点与原有地块面,输出错误SHP。另一种方法是将面转成线要素后,通过建立拓扑Must Not Self-Intersect (Line)进行检查。
近节点检查思路:遍历图层要素,地块面状要素在节点处分割线,筛选线长小于等于0.05 m的线段,输出错误SHP。
2.2.2 属性数据的检查
该项检查主要是按照以下步骤进行:(1)收集相关标准规范资料,分析数据库标准;(2)分析数据,对待检查的数据进行分析,按标准要求制作检查模板。(3)判断检查项。根据质检软件检查规则及相关技术规范要求,列出如下自定义的检查项:
表1 部分自定义检查项
(4)制作检查记录模板。根据列出的检查项,编制检查模板。
部分主要代码如下:
# 关联性检查条件设置
for row in cbf_list:
cbf_bm14_xm.append(row.CBFBM[:14]+row.CBFMC)
cbf_bm.append(row.CBFBM)
for row in jtcy_list:
jtcy_cur.append(row.CBFBM+row.CYXM)
jtcydict[row.CBFBM+row.CYXM]=row.JTCYDM
for row in dk_list:
if row.CBFMC[-2:] != "31":
dk_cur.append(row.DKBM[:14]+row.CBFMC)
with arcpy.da.UpdateCursor(cbf) as cbf_list:
for row in cbf_list:
if row.CBFBM not in cbf_bmcf:
cbf_bmcf.append(row[0])
cw0=""
else:cw0="承包方编码{0}重复".format(row[0])
if (row.CBFBM+row.CBFMC) not in jtcy_cur:
cw1="承包方没有在成员表中"
elif jtcydict.get((row[0]+row[1]))[:1]!="0":
cw1="承包方在成员表中不是本人或户主"
else:cw1=""
if row[0][:14]+row[1] not in dk_cur:
cw2="该承包方没有地块,"
else:cw2=""
cbf_list.updateRow(row)
with arcpy.da.UpdateCursor(jtcy) as jtcy_list:
for row in jtcy_list:
if row[0] not in cbf_bm:
row[2]="没有在承包方内,"
else:row[2]=""
jtcy_list.updateRow(row)
with arcpy.da.UpdateCursor(dk) as dk_list:
for row in dk_list:
if row.DKBM not in dk_bm:
dk_bm.append(row[0])
cw0=""
else:cw0="地块编码{0}重复".format(row.DKBM)
if "{0}{1}".format(row.DKBM[:14],row[ZJRXM]) not in cbf_bm14_xm:
cw1="权利人没有在承包方内"
else:cw1=""
dk_list.updateRow(row)
为了保障农村土地承包经营权确权登记颁证成果数据库的质量,在项目启动后,结合农业农村部数据库质量建设要求和农村土地承包经营权数据库成果质量检查规则等相关文件,建立了县级土地确权数据库检查的模型,基于Python语言构建了属性数据、权属数据及其两者关联一致性的自动检查模型。
为了方便建库人员调用,引入Add-In插件,通过Add-In创建按钮加载项,完成项目设置与定义要创建的多种加载项,并在加载项内容选项卡中设置工具条,将相关脚本与加载项对应的脚本相结合,安装加载项以后在ArcGIS10.2.2中可直接调用自定义的工具条[10]。软件配置及界面如图4和图5所示。
其中,config.xml定义存储了软件的作者、版本、帮助、描述等相关信息;Install文件存放了软件脚本调取的相关逻辑信息;Images存储了软件按钮图标等相关图像数据;makeaddin.py用于打包和压缩成“土地确权数据检查.esriaddin”。
前期在各县土地确权数据生产的过程中,传统的检查方式存在检查效率低、漏查误查、检查结果不规范、投入成本多等问题。后期,通过对形成的矢量数据、权属数据等成果的差错率进行统计分析,结合数据库建设标准和汇交要求,构建了成果数据质量检查模型,对矢量数据、权属数据以及两者的逻辑关联性设计了针对性的检查算法,采用Python制定检查工具脚本,引入Add-In创建定义了工具条。该检查工具实现了质检方案灵活、可定制、可实现“一次定制、反复使用”,在云南省广南县、富宁县、新平县、江城县、永德县等地的农村土地承包经营权确权登记项目中的应用取得了良好的效果。
图3 工具使用界面
图4 软件配置
图5 软件Add-In界面
以农业农村部农村土地承包经营权确权数据库建设质量要求和数据库质量检查规则为标准,以农村土地承包经营权确权调查数据库成果质量检查为切入点,通过分析数据库中矢量数据和权属数据的质量要求,针对矢量数据、属性数据及两者间的逻辑关联关系进行全面的质量检查,基于ArcGIS10.2.2平台,采用Python脚本语言设计并实现了矢量数据、权属数据及两者关联一致性的自动检查模型,最后通过对广南等县农村土地承包经营权确权数据库成果质量检查的实际应用验证了可行性。
(1)利用Python脚本语言构建自动检查模型,能够快速实现矢量数据、属性数据及两者关联一致性的自动检查,保证了数据成果质量。
(2)针对农村土地确权矢量数据的问题,主要研究了要素自相交等错误的解决办法,充分发挥了Python脚本语言在农村土地确权矢量图形数据检查中的优势。
(3)以规范统一的检查规则为基础,不同质量问题可设计针对性检查方法,将形成的针对性检查方法整合构成检查模型,实现调用检查模板即可自动检查。