根据list中某个字段的值排序

您所在的位置:网站首页 gis字段排序 根据list中某个字段的值排序

根据list中某个字段的值排序

2024-02-19 13:48| 来源: 网络整理| 查看: 265

2bf80787da5fca8973353b78ca5c470b.png

今天我们就来分享的是使用ArcGIS脚本工具将点数据进行排序并编号,文末我们会附上点数据和直接使用的脚本工具。

5925132d78d4377e7e860caa949ebd9d.png

我们先来看一下我们要达到的效果图

f7cf3fc6ee2963c252f7b042ca3d4cb4.png

详细步骤:

第一步:打开点要素,在属性表中添加X和Y两个字段。

e8dad3e6a9db842e007bf52c553b83f1.png

第二步:使用sort工具,将X和Y字段作为排序字段,生成排序后的点数据。

adab644343c2e3d6c3d603229dff8da8.png

第三步:添加一个排序结果字段,将OBJECTID字段值赋给这个字段。

6f5f29b52b99a44374a593fd8a5a1265.png

第四步:创建脚本工具

①首先创建工具箱

251b019085300da6eaaf9c13ddeb7081.png

②添加脚本

1ddc8516bdd7b48b600edf3a1ef8f1e4.png

③打开脚本工具创建向导,填写信息

34486c3bce506b740ce05bbf43972b92.png

④添加Python脚本,加载已经写好的Python文件(*.py格式)

Python脚本的思路主要为

首先规划好该工具需要多少个参数;

# Script Tool Parameters InputFeature = arcpy.GetParameterAsText(0) Order = arcpy.GetParameterAsText(1) Sort_X = arcpy.GetParameterAsText(2) Sort_Y = arcpy.GetParameterAsText(3) OutputFeature = arcpy.GetParameterAsText(4)

然后使用arcpy.CopyFeatures_management()将原数据复制一下;

再使用arcpy.AddXY_management()将复制得到的数据添加XY两个字段,随后判断一下点排序的大体方向。

这里要注意一下,由于编码问题,当代码有中文字符,需要使用.decode()方法解码中文,不然工具运行时会报错。

if Order == '横向'.decode('UTF-8'): sortfield = [["POINT_Y", Sort_Y],["POINT_X", Sort_X] ] elif Order == '纵向'.decode('UTF-8'): sortfield = [["POINT_X", Sort_X],["POINT_Y", Sort_Y]]

接着用arcpy.AddField_management()添加排序编号字段,使用arcpy.Sort_management(),生成排序后数据;

最终使用工具arcpy.CalculateField_management(),将OBJECTID字段值赋给这个字段;

python脚本完成!所有代码如下:

import arcpyimport time# Script Tool ParametersInputFeature = arcpy.GetParameterAsText(0)Order = arcpy.GetParameterAsText(1)Sort_X = arcpy.GetParameterAsText(2)Sort_Y = arcpy.GetParameterAsText(3)OutputFeature = arcpy.GetParameterAsText(4)tempfea = InputFeature+str(time.time()).split('.')[0][-5:-1]arcpy.CopyFeatures_management(InputFeature, tempfea)arcpy.AddXY_management(tempfea)if Order == '横向'.decode('UTF-8'): sortfield = [["POINT_Y", Sort_Y],["POINT_X", Sort_X] ]elif Order == '纵向'.decode('UTF-8'): sortfield = [["POINT_X", Sort_X],["POINT_Y", Sort_Y]]arcpy.Sort_management(tempfea,OutputFeature,sortfield)arcpy.AddField_management(OutputFeature,'order1','DOUBLE')arcpy.CalculateField_management(OutputFeature, 'order1','!OBJEC

第五步:下一步,添加界面参数,这一步很重要,各个参数属性要逐个填入,分别如下,其中Order、Sort_X、Sort_Y属于list参数。

91e552d31bd609c26b0e6a69b5128c25.png

f26d89c54c2523aa1302716935fedbc8.png

a52de0b3dadf2e6c1d55d8322e6b28ad.png

设置完成后,点击finish,脚步工具创建完成!

第六步:对上述的三个参数设置list列表

①点击脚本工具的属性

75e46612a0204e7eef4350ff756e5d49.png

②切换至验证选项卡(Validation),点击Edit,编辑验证代码,添加如下3行代码

self.params[1].filter.list = ['横向','纵向'] self.params[2].filter.list = ["ASCENDING","DESCENDING"] self.params[3].filter.list = ["ASCENDING","DESCENDING"]

144a1ecc33e6164c3022c40fe42ed9ac.png

至此,ArcGIS的点排序编号脚本工具基本完成,为了方便别人使用,可以添加描述等辅助。

①打开工具描述

9fceba60f99002683437ffa1ae17ffb3.png

②编辑工具信息

39c2290eaf82a863804cb60e56a338fa.png

体验一下该工具:

37a3defe1025bd4e26eb9c604f18300b.png 工具界面

查看结果编号:

4e0f59dc1d7f68d7b191b7c073efc344.png 工具结果

42a87d18dcf5b98eb89b1c2d66f616a4.png 编号结果

文件链接:https://pan.baidu.com/s/1CSwvph2Q5Cp46a-ICk6k4w

提取码:2fkt



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3