利用SQL语句实现宗地快速编号

2016-12-18 14:12王志平
北京测绘 2016年2期
关键词:宗地界址排序

王志平

(上海瑞纳信息技术有限公司,上海200433)

1 前言

为推进以土地为基础的不动产统一登记工作,推动城乡一体化地籍管理进程,逐步实现国土资源信息化、标准化,国土资源部印发了《全国宗地统一代码编制工作实施方案》的通知(国土资发〔2012〕4号)。不仅最近几年开展的集体土地所有权调查、村庄地籍调查要求以新的编码规则进行宗地编号,老的城镇地籍系统升级时,所有宗地也要按照新规则进行统一编号。面对数量巨大的宗地和界址点,如何快速高效的进行重新编号是一个值得研究的问题。

2 宗地统一编号原则

全国宗地统一编码采用“地籍区和地籍子区”两个级别的编码分区概念,遵循宗地统一编码的原则。地籍区、地籍子区的划分有三种模式:一是按照现行乡镇、街道划分;二是以现行乡镇街道为基础,结合典型线状地物划分;三是完成按照典型线状地物划分。

《地籍调查规程》要求[1],在地籍子区范围内,从西到东,从北到南,统一预编宗地号。宗地代码采用五层19位层次码结构,按层次分别表示县级行政区划、地籍区、地籍子区、土地所有权类型、宗地号。第一层次为县级行政区划,代码为6位,采用《中华人民共和国行政区划代码》(GB/T 2260)。第二层次为地籍区,代码为3位,用01~999表示。第三层次为地籍子区,代码为3位,用01~999表示。第四层次为土地权属类型,代码为2位,其中第一位表示土地所有权类型,用G、J、Z表示,第二位表示宗地特征码,用 A、B、S、X、C、W、Y表示。第五层次为宗地顺序号,代码为5位,宗地顺序码用00001~99999表示,在相应的宗地特征码后顺序编码。

3 常见编号方法

过去,开展城镇地籍调查,一般在调查阶段采用人工的方式进行编号,系统地对宗地自动进行编号的研究较少。目前,常见的商品软件一般采用带状法实现自动编号[2],用定位点位置代替宗地位置,并通过设定间距来划分条带,然后在条带内依据横坐标实现从左到右的排序。这种编号法清晰简单,容易实现,但是对地块形状敏感性较差,会出现编号跳跃,但跳跃范围不大,总体效果比较好。

改进的编号方法如改进锥形编号法、递归分解编号法[3],优先考虑了编号地块的连续性,方向关系定位比较准确,解决了一些复杂形状地块的空间关系,编号更合理,但是涉及到地块空间关系的判断,不可避免的要进行复杂繁琐的图形运算,在处理大量地块的编号时,其编号效率就难以令人满意了。

对于城镇地籍数据库升级来说,宗地往往都以数万或数十万计,界址点以数十万或数百万级。以县为单位开展的村庄地籍调查往往有数十万个宗地和数百万个界址点。面对海量地块,如果在编号运算时要进行大量的空间关系的运算,编号效率是不能接受的。常规的带状编号法由于涉及到图形运算,其编号效率仍然不够理想,在处理大量宗地和界址点上常常需要花费很长时间。例如,我们使用某采用带状编号法的商品软件对约10万个宗地进行编号时,用时达数小时。

本文在遵循基本编号原则的基础上,主要把重点放在提高编号效率上,在带状法编号思路的基础上,将空间排序巧妙的转换为利用SQL的排序查询来实现,编号效率实现了数量级的提高。

4 算法设计

由于涉及到对图形的读写,为了实现更快的读取速度,我们将ArcSDEGeodatabase数据库中的图形数据全部导出为本地Personal Geodatabase数据库,所有的处理和转换直接针对本地数据库操作[4]。图形数据处理程序编写全部在Arc Map环境中以VBA+Arc Objects的本地开发模式进行[5][6]。

宗地统一编号不仅涉及到图形运算,还要修改图形及调查表的宗地编号等属性信息。通过分析,我们发现影响宗地编码速度的主要瓶颈在宗地图形的空间排序和宗地号赋值,因此,需要在这两个方面进行突破才能实现编号速度的大幅提升。

为了实现宗地的快速空间排序,我们读取地籍子区内每个宗地面要素的FeatureID值和中心点或者外界矩形左上角点的纵、横坐标写入本地数据库临时表中,并采用合适的间距对纵坐标进行分行,然后直接用Select语句对临时表中的记录进行行号倒序、横坐标正序的查询就可以实现宗地从上之下、从左到右的快速排序。

对宗地图形要素的宗地号赋值,使用ADO连接本地数据库,依据FeatureID值用Update语句逐个更新Personal Geodatabase中宗地层要素表记录即可,试验证明其比调用IFeature对象来修改宗地要素地籍号要快数十倍。

以“之”字形编号为例,核心算法主要包括以下三个步骤。

(1)第一步:遍历地籍子区内的所有宗地,将宗地要素OID值、中心点坐标和所属行号写入临时表Tempfor TB中。

Set p Query Filter=New Query Filter

p Query Filter.WhereClause= ″SSQY=″″&Trim(DjzqBh)

Set p FeatureCursor = p Featureclass.Search(p QueryFilter,False)

Set p Feature=pFeatureCursor.NextFeature

Do While Not p FeatureIs Nothing

Set p Area=p Feature.Shape

OID=p Feature.OID

X=p Area.Centroid.X

Hanghao=Int(p Area.Centroid.Y/30)‘行号,30为行距

sql= ″insert into Tempfor TB(OID,X,Hanghao)values(‴&OID&‴,‴ &X&‴,‴&Hanghao&‴)″

Set rs=datacn.Execute(sql,1,adCmd T-ext)

Set rs=Nothing

Set pFeature=pFeatureCursor.NextFeature

Loop

(2)第二步:对临时表Tempfor TB中的记录根据行号倒序和横坐标值正序进行SELECT查询,实现对宗地从上到下、从左到右的编号方式。

sql=″SELECT OID,X,HanghaoFROM Tempfor TB order by Hanghaodesc,X″

rs.Opensql,datacn,adOpenForwardOnly,ad Lock ReadOnly

(3)第三步:根据查询结果逐个更新宗地编号。

TBBH=1

'根据OID值对宗地逐个更新地籍号

Do While rs.EOF=False

sql2= ″update″&pZDFeatureclass.Alias Name&″set DJH=‴&Trim(DjzqBh)&″GB″ &TBBH& ‴ where OBJECTID=″&rs!OID

Set rs2=datacn2.Execute(sql2,1,adCmd Text)

Set rs2=Nothing

rs.MoveNext

TBBH=TBBH+1

Loop

上述算法,稍加改动就可以实现“弓”字形顺序流水编号。界址点、图斑的编号规则和宗地类似,因此同样可以采用上述算法实现快速统一编号。

5 结束语

由于尽量避免了图形运算和读写,将编号中最耗时的空间排序和宗地号赋值过程都通过SQL语句操作本地数据库来实现,故编号效率较高。在一台较高配置的PC机上对约10万个宗地全部进行重新统一编号用时不到3分钟,对约54万个界址点重新编号费时约11分钟。虽然本算法不能做到像智能化编号方法那样做到编号更加合理化,但是在遵循基本编号规则的前提下,在编号速度上做到了完胜,在批量处理大量宗地、图斑的编号上具有一定的效率优势。

猜你喜欢
宗地界址排序
农村不动产测量中界址点、界址线属性数据快速处理方法
作者简介
基于ArcObjects二次开发的宗地四至快速提取方法的实现与改进
CASS地籍图中界址信息批量转出方法研究
恐怖排序
基于ArcGIS的宗地图自动化制图研究
节日排序
地籍调查成果在数字时代下的管理研究
基于宗地层次的合肥市产业用地集约利用评价
在ArcMap中实现对金图建库系统中界址线属性的便捷录入