好久没更新博客了,就好像好久没谈过恋爱,实际压根没谈过(手动滑稽),今天跟别人说,他们都很诧异,想想自己已近中年(联合国的标准),确实不可思议,所以很遗憾呀!
有人说到了什么年龄就该做什么事,这样才不负时光,而我感觉在这十年里,时光仿佛静止了一样,自己停滞不前,任风云万变,如今却一声长叹。
唉,又发了个牢骚,人到中年是不是这个状态呢?
切到正题!
前段时间,和同事都接到一个问题,是关于点排序的,用户想将一些点,按照空间位置,从左到右,再从上之下排序编号,如下图所示:
本来是个很简单的事情,主要使用sort工具就可以。
但是用户觉得麻烦,
因为详细的步骤还是有些繁琐的,步骤如下:
1、先要在点要素属性表中添加X和Y两个字段,
2、然后将这两个作为排序字段,生成排序后的点数据
3、之后再添加一个排序结果字段,将OBJECTID字段值赋给这个字段
确实步骤有些多,最后通过脚本工具一键生成排序序号
创建脚本工具的过程如下
1、首先创建工具箱
2、添加脚本
3、打开脚本工具创建向导,填写信息
4、添加Python脚本
这一步要加载已经写好的Python文件(*.py格式)
Python脚本的思路主要为:
4.1 首先规划好该工具需要多少个参数
1 | # Script Tool Parameters |
4.2 然后使用arcpy.CopyFeatures_management()将原数据复制一下
4.3 再使用arcpy.AddXY_management()将复制得到的数据添加XY两个字段
4.3 随后判断一下点排序的大体方向
这里要注意一下,由于编码问题,当代码有中文字符,需要使用.decode()方法解码中文,不然工具运行时会报错
1 | if Order == '横向'.decode('UTF-8'): |
4.4 准备好输入参数后,使用arcpy.Sort_management(),生成排序后数据
4.5 接着用arcpy.AddField_management()添加排序编号字段
4.6 最终使用字段计算工具arcpy.CalculateField_management(),将OBJECTID字段值赋给这个字段
python脚本完成!
所有代码如下:
1 | import arcpy |
添加完Python脚本文件后,继续往下
5、添加界面参数
这一步很重要,各个参数属性要逐个填入,分别如下
其中Order、Sort_X、Sort_Y属于list参数
6、脚本工具创建向导完后,要对上述的三个参数设置list列表
6.1 点击脚本工具的属性
6.2 切换至验证选项卡(Validation),点击Edit,编辑验证代码,添加如下3行代码
1 | self.params[1].filter.list = ['横向','纵向'] |
至此,ArcGIS的点排序编号脚本工具基本完成,为了方便别人使用,可以添加描述等辅助信息
体验一下该工具
查看结果编号