何时在Python脚本上使用ModelBuilder,反之亦然?


71

我是ArcGIS中Python脚本的新手,但不是ModelBuilder的新手。

我想知道Python vs ModelBuilder的好处。

什么时候应该为GIS自动化编写Python脚本而不是使用ModelBuilder?

我们无法在ModelBuilder中找到哪些Python自动化功能?

Answers:


82

我认为,用户在决定使用哪种工具之前应明确定义其目标。ModelBuilder和Python脚本擅长于不同的任务。一些想法:

  1. ModelBuilder没有映射功能,而 arcpy.mapping有。
  2. Python可用于优化工作流程,例如使用 多处理程序包并行处理
  3. Python允许使用嵌套循环和其他方便的迭代逻辑工具。为了在ModelBuilder中获得相似的结果,您将必须构造复杂,复杂的嵌套模型。
  4. 简单的文本操作在Python中非常容易,而在ModelBuilder中则非常困难或不可能。

    例如,使用Python使用该os.path模块可以轻松完成将文件名列表从“ m_2010_naip_2310345_nw.img”重命名为“ 2310345nw.img”的操作。

另一方面:

  1. ModelBuilder对于快速组合常用工具并消除调试脚本的需求非常有用。

  2. ModelBuilder有一个非常有用的递归迭代器,易于实现,以遍历文件夹和子文件夹。

  3. ModelBuilder擅长在视觉和直观上描绘复杂任务的工作流程 。

  4. ModelBuilder可以合并Python 脚本工具


5
清楚地描述了Python和ArcGIS中的Model Builder之间的区别。谢谢
BBG_GIS

24
我还要添加:1.您可以在ArcMap外部运行Python脚本。2.您可以在Python中使用ArcObjects。3.可能会有一些速度差异。
Tomek 2013年


3
+1嵌套循环和arcpy.mapping!我喜欢在脚本中进行计算并将其添加到属性表中或更好地添加到地图布局中的能力(例如,每种湿地类型的区域)。
罗伊

2
我阅读了ArcGIS书的python脚本。我还添加了其他一些功能:1-脚本游标使您可以遍历表中的记录,读取现有行并插入新行。2-脚本可用于包装其他软件-即将应用程序粘合在一起。例如python可用于访问Microsoft Excel或统计数据包R中的函数。3-A脚本可作为独立脚本在ArcGIS之外的磁盘上运行。您无需运行ArcMap或ArcCatalog脚本即可工作。(适用于ArcGIS的Python脚本,第2章,第39页)
BBG_GIS

24

如果您仅在ArcGIS范围内工作,则在尝试确定采用的方法时应考虑一些注意事项。

  • 你想达到什么目的,
  • 您目前有哪些技能?
  • 您是否愿意与他人共享您的作品以使用,学习或操纵,以及
  • 谁是您的目标受众。

考虑到这些因素:

  1. 在ModelBuilder中构建流程通常比在Python中更快,更容易,除非无法在ModelBuilder中复制部分流程。
  2. 如果您不了解Python并且不想学习它,那么ModelBuilder是一个不错的选择。
  3. 如果您不了解Python并想学习将其纳入您的技能中,那么ModelBuilder是从创建简单模型开始,然后将其导出到Python的好方法,这样您就可以为您预先构建最终流程的框架。这种方法确实要付出一定的代价,因为通常会在转换过程中创建很多无关的信息和变量,但这仍然是开始学习的好方法。
  4. 如果您要构建供个人使用的工具,那么您通常会选择哪种方法最适合自己。我会根据自己的需要使用两者。
  5. 如果您打算与他人共享您的分析,并且希望与他人共享您的模型/脚本是过程文档的一部分,那么对于非技术人员而言,通常更容易遵循和理解模型。

对于个人使用“更好”可能没有答案,但是如果您长期寻找就业机会,那么通过学习Python,您将与那些只知道如何使用预编程工具的人脱颖而出,或者只知道如何使用ModelBuilder。您还可以超越Python for ArcGIS(ArcPy)的范围,并通过使用其他专有的开源GIS库以及许多非GIS库(例如,数据库)开始自动执行更多任务和项目。 ,图像处理,统计信息等)。


20

Model Builder是一种很棒且易于学习的可视化编程语言,通常是GIS编程的良好入口。但是在某些方面,python可以做得更多。

一个示例是非ESRI GIS库的集成。几乎所有的开源GIS都可以通过python处理(例如GRASSSextanteQGISSAGA)。这对我有很大帮助,因为我只有ArcView许可证。因此,每次我无法在ArcGIS中使用某个地理处理工具时,都会查看开放源GIS中还有哪些其他选项。然后,我将这些开放源代码工具与ArcGIS工具组合在一起,或者使用较大的python脚本,或者通过较小的python脚本将其集成到ModelBuilder中。

我相信其他成员可以说出更多优势。


9

使用Python和ArcGIS时,除了拥有ArcGIS中已有的功能外,还可以获得Python的全部功能。是否需要这种功能和灵活性取决于您的意愿。此外,了解并真正利用Python之类的编程语言还需要时间。如果这项投资对您来说值得,则取决于您。但是,对于认真的数据处理来说,真正的脚本语言是您武器库中的一个很好的补充。

除了ModelBuilder可能会错过的任何功能外,还有更基本的讨论。通常,脚本更适合于创建复杂的工作流程。代码从上到下进行处理,可以使用例如函数将复杂的任务细分为较小的子任务。或对象。诸如模型构建器之类的图形工具趋向于成为大面条。


7

我偏爱创建Python脚本。至少对我来说,编写代码比弄乱将电线连接到盒子等有趣。

Python脚本真正的优点是您可以安排脚本在方便的时候运行。如果您的脚本需要一段时间才能完成,或者需要在正常工作时间之外运行,那么这确实很方便。您可以在此处查看如何安排脚本的示例。

正如@Aaron所提到的,您可以轻松地在Python脚本中设置循环。

如果您仅打算使用Python脚本编写,则可能需要使用“模型构建器”创建模型并将其导出为Python脚本。如果我无法理解如何在脚本中使用多个工具,有时会这样做。它可以帮助您了解如何将脚本组合在一起。


5

我发现,与Python脚本编写相比,与模型构建器相比,我似乎更受困于解决方案。对我而言,模型构建者有点“黑匣子”性质,因此很难找到问题所在。

我还发现我可以在python上找到更多帮助。我倾向于找到很多关于模型构建器的死胡同线程和主题。还有更少的示例可供参考,与python一样,您可能会在所写脚本的大部分部分找到小片段。

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.