APP下载

基于ArcGIS 城乡建设用地增减挂钩地块编号生成方法探究

2020-10-26朱永华

科学技术创新 2020年30期
关键词:字段行政村项目区

陈 磊 朱永华

(1、陕西聚信规划设计咨询有限公司,陕西 西安710018 2、西安华泰测绘工程有限公司,陕西 西安710054)

通常在城乡建设用地增减挂钩项目实施方案编制过程中,地块信息入库均在ArcGIS 环境下完成。由于部分项目区拆旧地块面积较小,地块数量较多,导致地块入库编号困难,具体表现为三种情况:一是地块数量大,手动输入编码工作量巨大;二是增减地块导致已编号出现“断号”、“跳号”、“重号”,二次手动编号困难;三是检查工作量巨大,易发生错误。为提高工作效率,大幅降低编号错误率,采用计算机自动生成编号是增减挂钩工作发展趋势。

1 编号规则与含义

一般情况某一增减挂钩项目区内安置地块及留用地块数量相对较少,本次编号以拆旧地块为例。

根据陕西省自然资源厅的要求,拆旧地块编号为CJXXXXXXYY-QQ(NN),其中XXXXXX 为试点项目区所在地行政区划代码、YY 为项目区流水编号、QQ 为该项目区内的拆旧块流水号、NN 为项目实施年份。由编号规则可知,在某一个增减挂钩项目区内,地块实施类型、项目区所在地行政区划代码及项目区流水号为定量,变量为拆旧块流水号和实施年份。

2 编号思路

本次编号思路为“先拆分,后合并”,即拆分地块编号为定量和变量两部分,拆分变量为变量1 和变量2 两个子单元,待变量单元属性值赋值完成后,合并相关属性值得到完整编号。

基于ArcGIS 建立拆旧地块shp,设拆旧地块数据表名为CJDK,根据编号规则,建立地块类型(定量)、行政区划代码(定量)、项目区流水编号(定量)、块流水号(变量1)、实施年份(变量2)、地块编号等字段(详见表1),完成定量和变量赋值。

3 块流水号排序

对于拆旧地块,需要确定拆旧实施年份。一般情况下,同一实施年份地块相对集中,可批量赋值,且拆旧年份排序优先级最高。在不考虑拆旧年份的情况下,块流水号赋值需遵守两个规则:一是应按照乡(街、镇)、村两级辖区排序,即升序块流水号后不应出现乡镇、行政村乱序;二是按照自上而下、从左向右的位置顺序编号。总体排序优先级为乡镇>行政村>地块位置。经过辖区排序、位置排序后,将排序的顺序号转换为块流水号即可。

表1 字段结构表

3.1 乡镇排序

坐标值排序不可采用乡镇区域多边形质心坐标值。当某一行政区划多边形为狭长形,虽其位置处于左上,应优先排序,但其质心坐标靠右下导致排序靠后。本次采用多边形最小外接矩形的最小横坐标(左)和最大纵坐标(上)排序。

在乡镇多边形属性表中添加数据类型均为浮点的xmin(最小横坐标)和ymax(最大纵坐标)字段,使用python 对xmin 字段进行xmin=!shape.extent.XMin! 运算,对ymax 字段进行ymax=!shape.extent.YMax!运算,得到多边形最小外接矩形的最小横坐标和最大纵坐标,以sort 工具按照ymax 降序(DESCENDING)、xmin 升序(ASCENDING)排序得到顺序值。

由于一个增减挂钩项目涉及乡镇一般不会超过十个,在涉及乡镇数量较少的情况下也可手动排序。

3.2 行政村排序

行政村排序方法类似于乡镇排序,此处不再赘述。

优先行政区划排序的目的是保证行政区划范围内地块完整性。即某一乡镇内某一行政村内的地块全部排序后再进行本乡镇下一行政村地块排序,同时行政村排序同样遵守自上而下、从左向右的顺序。待某一乡镇内所有行政区内的所有地块排序完成后转至下一乡镇,确保块流水号在同一行政辖区的连续性。

3.3 地块位置排序

地块位置排序类似于乡镇排序。

得到全部顺序号后,使用sort 工具按照乡镇>行政村>地块位置的优先级排序。块流水号经乡镇、行政村、地块位置三级属性排序后,可将排序的顺序号转换为块流水号。即使排序工作完成后添加或者减少地块,由于涉及乡镇及行政村位置固定、行政区代码固定,运行上述运算后依然可迅速得到完整、连续、准确的块流水号。

4 编号方法

4.1 EXCEL 编号

EXCEL 编号是导出拆旧地块属性表,借助EXCEL 软件按照编码规则合并相关列达到修改拆旧地块数据表dbf 文件的目的,可采用代码完成。完成列合并后一是采用另存替换的方法,二是ArcGIS 中运用Joins and Relates 功能关联属性即可完成编号工作。

4.2 ACCESS SQL 更新编号

若以geodatabase 模型管理拆旧地块数据表,可借助ACCESS 设计SQL 更新完成编号。字段类型一致是字段合并的必要条件,需转换Longint 和Int 型字段为char 型。设计SQL 部分更新代码为:

Update CJDK set DKBH = DKLX +CStr (right(100+XMQLSH,2))+'-' +CStr(right(1000+KLSH,3))+'('+CStr(CJNF)+')'。

由于ACCESS 暂不支持SQL 中的cast()函数,此处以CStr()函数代替。使用right()函数的目的是补齐虚位。

4.3 ArcGIS 字段计算器编号

ArcGIS 属性表的字段计算器功能非常强大,借助此功能可轻松完成编号生成。ArcGIS 字段计算器提供两种解析程序,分别是VBScript 和python。

(1)VBScript 编号。

VBScript 编号与SQL 更新运算方式相似,且都采用right()函数补齐虚位。与SQL 不同的是,由于VBScript 不允许显式声明任何数据类型,所有变量均属于隐式变量,可不用函数转换数据类型。

设计VBScript 部分更新代码为:

DKBH=[DKLX]&[XZQDM]&right(100+[XMQLSH],2)&"-"&right(1000+[KLSH],3)& "(" &[CJNF] & ")"

(2)Python 编号。

Python 是ArcGIS 建议使用的脚本语言。与SQL 类似,"+"运算符两边的数据需要类型一致,因此在字符串中使用整数时,需要显式地将整数用作字符串,使其与两侧的字符串数据类型保持一致,即调用str()函数。虚位补齐可直接使用zfill()方法右端补齐。

设计python 部分更新代码为:

DKBH=!DKLX!+str (!XZQHDM!)+str (!XMQLSH!).zfill(2)+"-"+str(!KLSH!).zfill(3)+"("+str(!CJNF!)+")"

5 方法比较

EXCEL 合并、ACCESS SQL 更新、ArcGIS 字段计算器都可以快速地完成编号。一般情况下,增减挂钩项目范围区划定、地类统计、规划复核、耕地等别判定等均在ArcGIS 环境下完成。使用ArcGIS 字段计算器编号不需要借助其他软件,避免操作环境切换和数据的转换,工作环节的减少可大幅提高工作效率。再者,拆旧地块的确定并非一次完成,需要经过多次论证及讨论,以致编号工作需反复多次。ArcGIS 环境下直接使用字段计算器编号不需要数据转换,可降低编号错误率。

6 讨论与展望

6.1 数据冗余

按照增减挂钩实施规划数据审核要求,建立的六个字段中仅需要地块编号一个字段信息,其余字段数据皆为过程数据。根据增减挂钩相关文件政策及地块最小图斑面积的要求,同一增减挂钩项目区内拆旧地块数量不会超过999 个。其冗余数据量非常小,几可忽略。

6.2 数据虚位

属性值虚位仅出现于两处,一是项目区流水号,二是块流水号。项目区流水号固定位数为二位,且此字段可批量赋值,此处不讨论。当少于10 个地块时和10-99 个地块时,其数值位数都固定为2 位,仅当地块数量大于100 时需补三位位数,故块流水号位数仅可能为2 或3。自动识别并自动更新虚位位数,进一步完善更新代码是下一步研究方向。

猜你喜欢

字段行政村项目区
更正说明
我国行政村、脱贫村通宽带率达100%
农业水权分配方法研究
带钩或不带钩选择方框批量自动换
浅谈台湾原版中文图书的编目经验
浅谈亚行贷款项目对项目区发展的影响
陕西 行政村将实现光纤全覆盖
宝鸡峡节水改造工程项目区水资源平衡分析
华阴市农发项目顺利通过省级验收
无正题名文献著录方法评述