Questions tagged «python-toolbox»

3
为什么要通过Python脚本工具来学习/使用Python工具箱?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 我已经编写了一些Python工具箱(这是ArcGIS 10.1中的新增功能),但是还没有决定是否/何时应该在标准工具箱中编写而不是Python脚本工具。 我以为在线帮助开头带有一些点,可能会启发我: 创建后,Python工具箱中的工具具有许多优势 但是,列出的五个优点似乎都是无法使用Python编写工具的原因,而且似乎都没有一个比Python脚本工具更能说明Python Toolboxes的优点。 我能想到的两个优点是: 现在,我可以在一个Python脚本中编写“纯” Python工具,而不必像使用工具验证那样将其连接到单独编写的对话框中,但是我很乐于务实而不是单纯 我现在可以使用代码(Python或任何能够编写文本文件的语言)来自动编写Python工具箱,但是我还没有遇到这样做的要求 我是否忽略了导致Esri提供Python Toolbox功能的引人注目的案例,如果是的话,它是什么?

1
在ArcGIS中组织Python工具箱(.pyt)的准则
对于我的任务之一,我需要使用三个工具(python脚本)创建一个工具箱。 我决定将其写为Python Toolbox(pyt),而不是普通的tbx。 除了“良好”的组织代码方式之外,其他所有内容都很清楚。 由于我有三种工具,将它们存储在一个文件(pyt)中不是一种好方法。因此,我决定将每个工具都保存在单独的.py文件中。 这是一个问题:用PYT组织多个文件以在ArcGIS for Server上分发或部署的好方法是什么?我应该将它们与PYT文件保持在同一级别,还是应该将它们放置在某个子目录(即“工具”)中? 您可以推荐任何Esri准则或参考“大型PYT工具箱”示例吗? 我没有找到关于这个话题的任何东西。在10.0版中,我使用了所谓的ToolShare文件夹结构。 这更多是一个编码风格的问题。因为用500-1000行或更多行代码创建一个PYT文件的想法在我看来并不好,我认为这不是“ pythonic”方式。

2
在ArcGIS Python Toolbox中刷新导入的模块?
在ArcMap中使用python工具箱(.pyt)时,我通常会遵循以下模式:.pyt文件本身只是包装器,用于收集输入参数并定义工具本身。支持代码保存在单独的可单元测试模块中。 例: import supporting_module class MyTool(object): ... def execute(self, parameters, messages): """The source code of the tool.""" some_input = parameters[0].valueAsText some_output = parameters[1].valueAsText supporting_module.do_something(some_input, some_output) arcpy.SetParameter(2, some_output) 这确实很好,但是在开发过程中遇到了一个令人沮丧的问题。在ArcMap中右键单击->刷新.pyt仅刷新.pyt文件的代码。它不会刷新导入的模块,因此,每当我在其中更改某些内容时,都必须关闭并重新打开ArcMap。幸运的是,由于我是独立测试代码,因此不必花很多时间,但这仍然是一个很大的麻烦。有没有办法解决?有点相关-有什么方法可以完全刷新Python控制台(我有一个自定义站点包,我还必须关闭/重新打开ArcMap才能从中引入更改)? 我正在使用ArcMap 10.2.1。

4
定义Python工具箱帮助的参数说明?
我正在尝试为我们的ArcMap应用程序创建一些Python工具箱(例如MyTool.pyt) 我可以看到帮助文本是使用class self.description属性定义的。 但是,一旦我运行该程序并单击任何参数字段,帮助/说明文本将变为空。我希望能够为每个参数提供描述字段。这是如何完成的? 经过一番回应之后,我发现通过“项目描述”右键单击上下文菜单,可以填充许多字段。有没有一种“ pythonic”的方式来做到这一点?也就是说,仅将某些属性嵌入.pyt文件类中? 例如,在.pyt工具箱定义中,您具有Toolbox类: import arcpy class Toolbox(object): def __init__(self): """Define the toolbox (the name of the toolbox is the name of the .pyt file).""" self.label = "My Toolbox" self.alias = "" # List of tool classes associated with this toolbox self.tools = [MyNiceTool] class MyNiceTool(object): def …

1
ArcGIS Pro任务是否支持可在地图框架上运行的Python Toolbox工具?
ArcGIS Pro任务是否支持可在地图框架上运行的Python Toolbox工具? 我问的原因是我在尝试执行以下操作时被卡住: 启动ArcGIS Pro 1.1.1 创建一个新项目-我叫mine TestProject并放在C:\ Temp中 使用“项目”窗格将“文件夹连接”添加到我拥有“自然地球”(Natural Earth)世界国家/地区的shapefile的位置 将ne_10m_admin_0_countries.shp拖放到地图中以创建名为ne_10m_admin_0_countries的图层 插入新的布局-我使用了A3横向 在布局上插入新的地图框 在“项目”窗格中,在TestProject文件夹中创建一个New Python Toolbox-我称为mine TestPYT 在“项目”窗格中右键单击“ TestPYT”以对其进行编辑 将代码替换为下面的代码,为Python Toolbox提供两个名为Chile和Switzerland的工具 保存脚本并刷新Python Toolbox以查看两个新工具 运行智利工具以查看布局图上的地图框缩放至智利 运行Switzerland工具,以查看版图上的地图框放大到Switzerland 插入新任务项 在任务项1中插入一个新任务,并将其命名为Chile 在智利任务中,插入一个新步骤,并将其命名为Zoom to Chile 对于“步骤行为”,将其设置为“自动”和“隐藏” 在“操作”选项卡上,我尝试选择“智利”工具将“命令/地理处理”设置为“地理处理工具” 当我选择“确定”时似乎会粘住 当我单击“完成”时,似乎“丢失”了该工具 具体来说,我要创建的工作流包含两个任务,可以单击以放大到智利或缩放到瑞士,但在上面的第19步中遇到了麻烦。 我总体上想做的是找到一个与ArcPy(对于ArcGIS 10.x体系结构)中的Python AddIn工具栏等效的ArcPy(对于ArcGIS Pro),并使用两个按钮(智利和瑞士)来放大这些国家/地区。 我已经执行了几次此程序,有一次我能够使智利和瑞士的工具作为任务使用,但即使那样,它们似乎也没有与地图框架交互(没有错误,只是没有变化)到它们在运行时在“地图框架”中显示的位置),即使从Python工具箱运行时这些工具仍然可以正常工作。 这是要复制/粘贴到Python工具箱(TestPYT)中的代码。 import arcpy class Toolbox(object): def __init__(self): """Define …

1
在Python工具箱工具中设置值表的默认值
我创建了一个Python工具箱工具来对字段重新排序,并使用重新排序的字段创建新的要素类。该工具运行良好,并且我可以使用值表让用户按他们选择的顺序排列字段,也可以为每个字段填写排名值。但是,此工具的烦人之处在于,在重新排序之前,所有字段都必须一次添加到值表中。 我试图将其设置为默认情况下将所有字段引入值表,并且可以在重新排序之前删除所有不需要的字段。以前有人做过这样的事吗?我试图在UpdateParameters方法中实现这一点。这是我正在尝试的代码: import arcpy import os class Toolbox(object): def __init__(self): """Define the toolbox (the name of the toolbox is the name of the .pyt file).""" self.label = "Reorder Fields" self.alias = "Reorder Fields" # List of tool classes associated with this toolbox self.tools = [ReorderFields] class ReorderFields(object): def __init__(self): """Define …
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.