免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 6657|回复: 4
收起左侧

[技术交流] 使用ArcGIS脚本工具将点数据进行排序并编号

[复制链接]

10

主题

556

铜板

1

好友

技术员

Rank: 3Rank: 3

积分
78
QQ
发表于 2019-6-28 17:16 | 显示全部楼层 |阅读模式
本帖最后由 大栗子 于 2019-6-28 17:21 编辑

今天我们就来分享使用ArcGIS脚本工具将点数据进行排序并编号文末我们会附上点数据和直接使用的脚本工具。
我们先来看一下我们要达到的效果图
2.webp.jpg
详细步骤:
第一步:打开点要素,在属性表中添加X和Y两个字段。
3.webp.jpg
第二步:使用sort工具,将X和Y字段作为排序字段,生成排序后的点数据。
4.webp.jpg
第三步:添加一个排序结果字段,将OBJECTID字段值赋给这个字段。
5.webp.jpg
第四步:创建脚本工具
①首先创建工具箱
6.webp.jpg
②添加脚本
7.webp.jpg
③打开脚本工具创建向导,填写信息
8.webp.jpg
④添加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 arcpy
import time
# 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)
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参数。
9.webp.jpg 10.webp.jpg 11.webp.jpg
设置完成后,点击finish,脚步工具创建完成!
第六步:对上述的三个参数设置list列表
①点击脚本工具的属性
12.webp.jpg
②切换至验证选项卡(Validation),点击Edit,编辑验证代码,添加如下3行代码
self.params[1].filter.list = ['横向','纵向']
self.params[2].filter.list = ["ASCENDING","DESCENDING"]
self.params[3].filter.list = ["ASCENDING","DESCENDING"]
13.webp.jpg
至此,ArcGIS的点排序编号脚本工具基本完成,为了方便别人使用,可以添加描述等辅助。
①打开工具描述
14.webp.jpg
②编辑工具信息
15.webp.jpg
体验一下该工具:
16.webp.jpg
                工具界面
查看结果编号:
17.webp.jpg
                工具结果
18.webp.jpg
                编号结果
提取码:2fkt

6

主题

1万

铜板

4

好友

地信名人堂

Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19

积分
1439

宣传勋章爱心勋章组织勋章地信元老灌水勋章荣誉会员勋章活跃勋章地信专家组贡献勋章名人堂勋章成就学员勋章

发表于 2019-7-1 17:08 | 显示全部楼层
python是个好东西,感谢分享
回复 支持 反对

使用道具 举报

0

主题

7964

铜板

6

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
1048
发表于 2020-2-10 15:02 | 显示全部楼层
认真学习。
回复

使用道具 举报

2

主题

1万

铜板

12

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
1104
发表于 2020-10-23 10:06 | 显示全部楼层
学习了,谢谢分享。
回复 支持 反对

使用道具 举报

1

主题

1万

铜板

2

好友

黄金会员

Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23Rank: 23

积分
5179
发表于 2022-12-16 09:09 | 显示全部楼层
感谢分享!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表