为什么要通过Python脚本工具来学习/使用Python工具箱?[关闭]


25

我已经编写了一些Python工具箱(这是ArcGIS 10.1中的新增功能),但是还没有决定是否/何时应该在标准工具箱中编写而不是Python脚本工具。

我以为在线帮助开头带有一些点,可能会启发我:

创建后,Python工具箱中的工具具有许多优势

但是,列出的五个优点似乎都是无法使用Python编写工具的原因,而且似乎都没有一个比Python脚本工具更能说明Python Toolboxes的优点。

我能想到的两个优点是:

  • 现在,我可以在一个Python脚本中编写“纯” Python工具,而不必像使用工具验证那样将其连接到单独编写的对话框中,但是我很乐于务实而不是单纯
  • 我现在可以使用代码(Python或任何能够编写文本文件的语言)来自动编写Python工具箱,但是我还没有遇到这样做的要求

我是否忽略了导致Esri提供Python Toolbox功能的引人注目的案例,如果是的话,它是什么?

Answers:


34

两者在功能上非常非常接近,但并不完全等效。

两者共同

  • 包括一组具有唯一别名的工具以进行识别
  • 可以从arcpy打电话
  • 免费获取每个工具的地理处理工具对话框(基本上是完整的UI)
  • 可以将所有Python代码保存在一个文件中(嵌入工具源在其中TBX,将所有实现都保存在一个文件中PYT)并通过电子邮件或共享的网络驱动器进行分发
  • 对于桌面应用程序,始终在前台设置中运行在ArcPy代码中设置“始终在前台运行”?

TBX文件特有的:

  • 可以包括对系统工具箱,自定义COM工具和自定义.Net工具的引用
  • 可以在工具箱中包含Model Builder工具
  • 工具文档存储在.tbx文件中
  • 简单的向导UI,用于设置参数和执行验证代码
  • 在“处理”工具属性中运行“ Python脚本”
  • 缺点:不透明的二进制格式,需要将TBX文件的较新版本显式保存为较旧版本才能在该软件的早期版本中使用,UI可能是一把双刃剑,因为您必须在属性页之间切换以查看是否错过了设置(例如相对路径)

Python工具箱特有的:

  • 纯文本,所以工具箱可以同等对待任何其他代码(有用在良好的版本控制工具被用作可以追溯其发展历史环境-在GitHub上看看有多少项目中使用PYTTBX。)
  • 对某些参数类型有更多的控制权(即,您可以执行复合数据类型并定义值表的模式)
  • 如果产品(“ ArcInfo”)或扩展名(“ spatial”)不可用,则isLicensed属性可用于禁用工具。
  • 工具文档存储在与.pyt相同的文件夹中的XML文件中
  • 缺点:没有用于配置工具参数的向导UI,Python中更多的脚手架代码,将Toolbox开发变成了正式软件开发任务,而不仅仅是添加实现脚本。如果pyt很大,则在开发过程中重新加载pyt以加载更改可能会很慢(可以通过将工具放在其他文件中并进行导入来避免这种情况,因此无需重新编译)。

不久前,当我在使用最初的大约十二个PYT工具箱PYT时,我对第一次安装它的麻烦感到震惊,于是我开发了一个名为的工具tbx2pyt。它将需要一个TBX工具箱,并将其转换为,而将PYT代码损失降至最低。实际上,PYT最先启用的是TBX。如果您愿意,这可能是将现有工具转换为Python Toolbox格式的好方法。至少,它可以在切换到代码之前使用UI设置工具的参数。



11

我偏爱python工具箱的第一个原因是版本控制和源代码管理(请参阅将版本控制应用于ArcGIS Models),其次是能够使用带有制表符补全,正则表达式,代码段库的代码编辑器/ IDE,等等

但是,正如Ryan Dalton所指出的那样,这样做会失去使用Model Builder和旧式工具的能力-除非您愿意按照常规方法构建模型,然后导出为python,然后重写以适合到.pyt文件中 (如果这样做,请参阅ArcGIS中组织Python工具箱(.pyt)的准则)。目前,这个缺点足够大,以至于我还没有认真使用python工具箱。

如果您有想要转换为.pyt的工具箱,则可能会发现Jason Scheirer的tbxtopyt部分转换器很有用。

至于“引人注目的案子”?问题的一部分:如果您已经掌握了一些软件开发知识,肯定可以。如果像我一样,您是GIS Tech / Analyst的3部分,而pythonista则是1部分或更少。(至少还没有,我真的希望两种方法的这种二进制的一种或另一种性质在不久的将来会有所改变。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.