巧用Excel函数实现林业小班号自动赋值
2018-11-06秦沂林秦峰杨
秦沂林,秦峰杨
(1.重庆忠县国有林场;2.重庆工业职业技术学院,重庆 忠县 404300)
在林业调查设计成果图中,要分行政区域从上往下、从左向右对小班编号,若小班数量多,内业工作量就大。如按传统方法逐个编号,费时费力,一旦出错,功亏一篑,又得重新编辑。
笔者在ArcMap图层属性表中,添加Xmin(代表小班周界上点集中横坐标最小值)、Ymax(代表小班周界上点集中纵坐标的最大值)、自动编号等字段,编辑Phthon语句,直接求得Xmin、Ymax数据,再导出属性表,利用常用Excel2007中IF函数嵌套ROW函数、MATCH函数及数组公式,简化了Arcgis 10.0操作,实现了不同区域内小班号自动赋值,解决了横向跨越多个小班界的小班赋值的瑕疵,节省了时间、人力和购买插件资金,提高了处理内业的工作效率,达到了事半功倍的效果。
1 直接求得Xmin、Ymax数据
启动ArcMap,将需要编号的SHP格式的小班面文件添加到工作区,打开属性表,添加Xmin、Ymax、自动编号等字段后,在SHP格式的小班面图层处于编辑状态下,单击鼠标左键选中Xmin字段列,单击鼠标右键弹出对话框,打开字段计算器选项,选中Phthon,编辑Phthon语句!shape.extent.Xmin! (在英文输入状态编辑下),单击“确定”(如图1),直接求得Xmin值。同方法编辑Phthon语句!shape.extent.Ymax!,直接求得Ymax值。
图1
2 导出的属性表,排序数据
在Arcmap工作界面,点击图层属性表的表选项下拉框,切换到导出选项,导出属性表,其导出的是DBF文件,用Excel2007打开导出的DBF文件,另存为以 .xls扩展名的Excel表。删除不需要的字段(其作用是提高计算机运行速度),左键单击工具栏中数据选项,展开下一级工具条,左键单击表格中有内容的任意位置,左键单击工具栏中数据下的排序选项,添加主要关键字“乡镇”, 次要关键字“村”、“Ymax”、“Xmin”,将“乡镇”“村”及“Ymax”字段按降序排序,“Xmin”字段按升序排序,左键单击“确定”,完成所需字段排序。此项操作目的是实现全县不同乡镇不同村区域内小班分片编号。
3 巧用Excel2007函数自动赋值小班号
如小班编号要按上步排序好的自然行政村编号,则打开新存储的Excel表,在自动编号字段对应列首空格内,键入IF函数并嵌套ROW、MATCH函数(英文输入)=IF(G2=$G$2:$G$89860,ROW()-MATCH(G2,$G$2:$G$89860,0),"") ,按住用鼠标左键拖动选中公式内所有G2:G89860,点击F4键直至变成“$G$2:$G$1952”样式后,“$G$2:$G$89860”表示该区域绝对引用,向下填充时不会改变引用区域。选中公式内容格,按下shift键不放,滑动下拉条,点击要填充的最后格后,放开shift键,则自动按要求赋值后保存(如图2)。
图2
4 连接及导出
打开ArcMap图层属性表的连接选项,按属性表及.xls扩展名的Excel表中唯一且内容不重复的“OBJECTID”字段连接后,用字段计算器,令“小班号=自动编号”,单击确定,最后导出该图层全部数据。
5 实例比对
笔者用ArcMap加载原忠县2015年林地变更Shape格式数据,按小班质心坐标值编辑的小班号,标注小班号后截图(图3)。按1-4步骤操作后,笔者用Excel2007时,为减少计算机内存负荷,删除不需要的字段,经过20 s运行,实现全县89 860个小班号自动赋值,连接至原忠县2015年林地变更Shape格式属性表后标注,选择同一区域截图(图4)。经图3与图4比对,发现两者有5处不同。图4是严格取小班周界点集坐标极值,从上往下,从左向右自动赋值的结果。如按传统方法编号,全县89 860个小班,每天编2 000个小班号,需45 d,勘误不经过比对,很难发现的。按笔者的方法,操作和运算总时不超过30 min,能迅速完成全县 89 860个小班号的自动赋值,又快又准,达到事半功倍效果。
图3
图4