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

查看: 1792|回复: 11
收起左侧

在ArcGIS中创建Python工具(三)

[复制链接]

665

主题

2万

铜板

34

好友

传奇会员

Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30

积分
20649

精华勋章爱心勋章地信专家组贡献勋章冰雪节勋章

发表于 2021-1-14 14:30 | 显示全部楼层 |阅读模式
认识 Python工具箱

Python 工具箱 (.pyt) 是一个简单的文本文件,可以在任何文本编辑器中或者任何 Python IDE 中创建、查看和编辑。要确保 ArcGIS 正确识别 Python 工具箱,工具箱类的名称必须是 Toolbox。在 Toolbox 类的 __init__ 方法中定义工具箱的属性,这些属性包括 alias、label 和 description,我们可以按照 帮助文档 中的模板构建 Python 工具箱模板。

如下代码中创建了包含一个工具(名为 Tool)的 Python 工具箱:

1610604758(1).jpg

1610604799(1).jpg

动手做做

下面我就依据这个模板,写一个简单的脚本工具箱。需求是批量裁剪,我希望我只提供一个文件夹或者数据库等这样的工作空间和一个裁剪区域面,就可以批量完成工作空间内全部数据的裁剪工作,并且无视栅格还是矢量,一并裁剪。

Let the scripting begin ……


1 创建工具箱

工具箱的name就是 .pyt 文件的名字,通常我们把工具添加到 ArcToolbox窗口中时会显示工具箱的 label。在 Toolbox 类的 __init__ 方法中定义属性,例如: aliaslabeldescription

工具作为被添加至 .pyt 中,工具箱的 tools 属性必须设置为包含定义的所有工具列表。比如,需要做ATool,ATool,CTool三个工具,不是写三个脚本,而是创建三个,然后将类名放入列表, self.tools = [ATool,ATool,CTool]


这里,我仅定义一个工具类 ClipWorkspace,来说明构建过程即可 :

1610604851(1).jpg


2 定义工具

下面就是完善工具内部的代码。我就以 ClipVectorWorkspace 为例。


每个工具类应至少包括 __init__execute 方法。此外,还可以选择使用 getParameterInfoisLicensedupdateParametersupdateMessages 方法向工具的行为中添加其他控制。

工具类中的 __init__ 方法是标准 Python 类初始化方法。对于 Python 工具箱中的工具,__init__ 方法用于设置该工具的属性,例如工具的标注、描述、是否允许在后台运行等。

下面的例子就创建了ClipVectorWorkspace这个工具:

1610604899(1).jpg

1610604941(1).jpg


PS : 在代码中,如果仔细看,或许你会疑惑,为何输出工作空间的方向是 input ,而不是 output? 因为工具最终输出的为 Feature Class 或 Raster,输出工作空间也是作为输入参数传入工具使用的。如果不关心,也可以不在意这些细节…… 继续向下了解工具的构建过程。


下面就是工具的具体执行部分了,当然里面还加了些辅助了解工具执行状态的消息:

1610605034(1).jpg

1610605068(1).jpg

到这里,工具的核心部分已经完成,执行下试试。

1610605195(1).jpg

OK,应该是预期的结果:

1610605253(1).jpg

3 完善

我们发现不像标准工具箱中的脚本工具和脚本文件本身是散列存储的,python工具箱以及其中的所有工具的代码都在这一个pyt文件中,维护起来便利了不少。如果想在工具箱中继续添加工具,只要继续增加一个工具类即可。

经过前两步的过程,工具已经可以拿去使用。如果为了工具更友好,还可以继续调整下代码,以便遇到异常的时候,让用户了解更详细的原因,这里就再往下进行了。工具分享给别人,最后只差要丰富下工具文档了,同样在 Python 工具的 Item Description 中编

1610605285(1).jpg


本文转载来自CSDN作者:kikita   版权归作者所有

原文链接:https://blog.csdn.net/kikitamoon/article/details/48239807

4

主题

4147

铜板

6

好友

高级工程师

Rank: 9Rank: 9Rank: 9

积分
890
发表于 2021-3-17 17:34 | 显示全部楼层
:zt学习学习
回复 支持 反对

使用道具 举报

0

主题

314

铜板

1

好友

技术员

Rank: 3Rank: 3

积分
32
发表于 2021-3-29 15:10 | 显示全部楼层
谢谢分享
回复

使用道具 举报

9

主题

1万

铜板

7

好友

教授级高工

Rank: 12Rank: 12Rank: 12

积分
1409
发表于 2021-4-26 21:06 | 显示全部楼层
地信论坛的发展离不开您的支持!
回复 支持 反对

使用道具 举报

0

主题

1万

铜板

2

好友

地信院士

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
2537
发表于 2021-12-16 13:54 | 显示全部楼层
感谢分享,支持
回复 支持 反对

使用道具 举报

2

主题

3万

铜板

6

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
5663
发表于 2021-12-19 09:01 | 显示全部楼层
谢谢分享
回复

使用道具 举报

10

主题

1万

铜板

19

好友

资深会员

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

积分
3720
发表于 2022-1-21 12:30 | 显示全部楼层
谢谢分享
回复

使用道具 举报

15

主题

1万

铜板

14

好友

地信院士

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
2008

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

发表于 2023-1-11 08:36 | 显示全部楼层
感谢分享,支持
回复 支持 反对

使用道具 举报

32

主题

3万

铜板

16

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
7165

活跃勋章

发表于 2023-1-27 11:08 手机频道 | 显示全部楼层
学习了。
回复

使用道具 举报

4

主题

4392

铜板

1

好友

地信院士

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
2027
发表于 2024-2-28 10:20 | 显示全部楼层
感谢分享!
回复

使用道具 举报

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

本版积分规则

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