从可视化编排到可复现地理处理流水线的工程化实践
摘要
ModelBuilder是ArcGIS桌面体系中承载地理处理自动化的核心可视化编程环境。它把工具箱中的工具、数据集与输出结果抽象为"节点",通过有向连线定义数据流与执行顺序,使分析流程从命令行脚本转变为可读、可改、可复用的图形化模型。本文以"可视化编程范式"为主线,系统梳理ModelBuilder的节点—连线—参数三层架构、数据流与过程流双引擎机制、迭代器与前置条件的控制逻辑,并结合ArcPy导出、并行处理、内存工作空间优化等工程手段,给出从快速原型到生产部署的完整路径。文章同时讨论ArcGIS Pro时代ModelBuilder的定位变化、与Python生态的协同边界,以及面向可复现研究的建模规范。全文约13000字,参考文献62篇(主要)。
目录
一、可视化编程的坐标系:ModelBuilder在GIS自动化谱系中的位置
要理解ModelBuilder是什么,先要理解它试图解决什么问题。地理信息系统(GIS)的日常工作中,大量任务本质上是"一串按顺序执行的工具调用":投影转换、缓冲区分析、叠加求交、栅格计算、统计汇总。当这些步骤只有两三步时,手动点击菜单完全够用;但当步骤增长到十几步、几十步,并且需要反复运行时,手动操作就会暴露三个致命问题:不可复现、不可追溯、不可批量。
学术界对GIS工作流的自动化研究由来已久。Ludäscher等人(2003)在科学工作流领域提出的数据流驱动模型,为后来的可视化建模工具奠定了理论基础。在GIS领域,ESRI从ArcInfo Workstation时代的AML宏语言,到ArcGIS 8.x引入的ModelBuilder,再到ArcGIS 10.x的Python集成,形成了一条清晰的演进脉络。本文评述:这条脉络的核心逻辑并非"功能叠加",而是自动化门槛的持续降低——从必须掌握AML语法,到只需拖拽连线,再到可视化与脚本双向转换,每一步都在扩大能使用自动化的人群范围。
如果把GIS自动化工具放在一个二维坐标系里,横轴是"抽象程度"(从具体操作到抽象逻辑),纵轴是"使用门槛"(从零基础到专业编程),那么ModelBuilder大致位于中间偏左的位置:它比手动操作抽象,比Python脚本直观;它比AML友好,但比纯代码在复杂逻辑表达上受限。笔者认为,这个定位恰恰是ModelBuilder最大的价值——它服务的是"懂分析但未必精通编程"的GIS从业者,这个群体在规划、国土、水利、生态等行业中数量庞大。
根据ESRI官方文档(ArcGIS Pro 3.x Help, 2024)的说明,ModelBuilder的核心能力包括:可视化构建流程、自动记录工具参数、支持迭代与条件执行、可导出为Python脚本、可发布为地理处理服务。这五项能力中,前三项是"建模",后两项是"部署"。很多教程只讲前三项,导致读者学完之后不知道模型怎么用到实际生产里。本文的写作策略是:每个机制点都同时讲"怎么搭"和"怎么用",避免停留在界面操作层面。
二、解剖一个模型:节点、连线与参数的三层结构
2.1 节点:不只是"工具"
在ModelBuilder画布上,节点有三种基本类型:工具节点(Tool)、数据节点(Data)、变量节点(Variable)。初学者容易把节点简单理解为"工具图标",但实际上数据节点和变量节点承担着同样重要的角色。
工具节点对应工具箱中的一个具体工具,比如"缓冲区(Buffer)""相交(Intersect)""栅格计算器(Raster Calculator)"。数据节点代表输入或输出的数据集,可以是shapefile、要素类、栅格、表格,也可以是地理数据库中的要素数据集。变量节点则用于存储参数值,比如距离值、字段名、坐标系、输出路径等。
本文评述:这种三分法看似简单,但它隐含了一个重要的设计思想——把"数据"和"参数"从"操作"中剥离出来。在脚本编程中,这三者往往混在一起(函数调用时同时传入数据和参数);而在ModelBuilder中,它们被显式地表示为不同类型的节点,这使得模型的参数化改造变得非常直接:把数据节点或变量节点设为模型参数,就可以在模型外部控制它们。
2.2 连线:有方向的依赖关系
连线(Connector)是ModelBuilder的灵魂。它不只是"连接两个图标"的视觉元素,而是定义了节点之间的依赖关系和执行顺序。在ModelBuilder中,连线主要有四种类型:
本文评述:这四种连线中,前置条件连线最容易被忽视,但它在工程实践中极其重要。很多模型出错不是因为逻辑错误,而是因为执行顺序不符合预期——比如在输出目录尚未创建时就尝试写入文件。前置条件连线提供了一种"不传数据、只传顺序"的轻量控制手段,相当于脚本中的"空操作依赖"。
2.3 参数:模型与外界的接口
任何节点上的任意参数都可以被设为"模型参数"(Model Parameter)。被设为模型参数的变量会在模型工具对话框中显示为可编辑字段,用户可以在运行模型时修改它们。这是ModelBuilder从"一次性脚本"升级为"可复用工具"的关键步骤。
操作路径:右键点击变量节点 → 选择"模型参数"(Model Parameter)→ 变量节点右上角出现"P"标记。在ArcGIS Pro中,还可以通过"管理模型参数"对话框批量调整参数的顺序和显示名称。
笔者认为,参数化设计是ModelBuilder最被低估的能力。一个设计良好的模型,应该像工具箱中的原生工具一样:输入明确、输出清晰、参数可调。很多用户搭建的模型之所以难以复用,根本原因就是所有路径和参数都写死在节点里,换一个项目就得重新改一遍。
三、双引擎机制:数据流与过程流的本质差异
ModelBuilder的执行引擎有两种模式:数据流(Data Flow)和过程流(Process Flow)。理解这两者的差异,是写出正确模型的前提。
3.1 数据流:让数据"流"过工具
数据流模式的核心思想是:工具的输出自动成为下游工具的输入,不需要显式指定中间数据路径。在ModelBuilder中,当你把一个工具的输出连到另一个工具的输入时,系统会自动创建一个中间数据变量,并在运行时将其写入临时工作空间(默认为地理数据库中的scratch.gdb)。
数据流的优势在于简洁:你不需要为每一个中间结果命名和指定路径,模型会自动管理。但它的代价是中间数据不可见、不可检查。如果模型在第三步出错,你很难直接查看第二步的输出是否正确。
本文评述:数据流适合"流程清晰、中间结果不需要保留"的场景,比如一次性的分析任务。但在调试阶段,建议临时把关键中间结果设为"托管"(Managed)为否,并指定一个可见路径,方便检查。调试完成后再改回托管状态。
3.2 过程流:显式控制每一步
过程流模式则要求你显式地为每一步指定输入和输出。工具之间不自动传递数据,而是通过前置条件连线控制执行顺序。过程流更接近传统脚本的写法:每一步都是独立的,输入输出都明确可见。
过程流的优势是可控性强、易于调试。每一步的输出都可以单独检查,出错时容易定位。代价是模型图会更复杂,节点和连线更多。
笔者认为,实际项目中最好的策略是混合使用:在模型主干上使用数据流保持简洁,在关键节点和易错环节使用过程流进行显式控制。比如在投影转换、坐标系定义等容易出错的步骤上,显式指定输出路径和坐标系参数。
四、迭代器:批量处理的真正入口
如果说ModelBuilder有一个功能最能体现"可视化编程"的价值,那就是迭代器(Iterator)。没有迭代器,ModelBuilder只能处理单次任务;有了迭代器,它才能处理批量数据。
4.1 迭代器的类型
ModelBuilder提供了十余种迭代器,常用的包括:
- 要素类迭代器(Iterate Feature Classes):遍历工作空间中的所有要素类,可按几何类型和名称通配符过滤。
- 栅格迭代器(Iterate Rasters):遍历文件夹或地理数据库中的所有栅格数据集。
- 文件迭代器(Iterate Files):遍历指定类型的文件,如.csv、.txt、.shp。
- 字段迭代器(Iterate Fields):遍历要素类或表中的所有字段。
- 行迭代器(Iterate Row Selection):遍历表中的每一行,适合逐行处理属性数据。
- 值迭代器(Iterate Values):遍历一个自定义的值列表,如[100, 200, 500, 1000]。
- 多值迭代器(Iterate Multivalue):遍历一个多值输入,适合处理用户选择的多个数据集。
- 工作空间迭代器(Iterate Workspaces):遍历文件夹或地理数据库中的工作空间。
本文评述:迭代器的本质是把"循环"这个编程概念可视化。在Python中,循环用for语句表达;在ModelBuilder中,循环用迭代器节点表达。两者的语义是一致的,但ModelBuilder的迭代器有一个独特优势:它自动处理了循环变量的传递——迭代器的输出(如当前要素类的路径)可以直接连到下游工具,不需要手动声明变量。
4.2 迭代器嵌套与输出命名
迭代器可以嵌套使用。比如外层用"要素类迭代器"遍历多个矢量图层,内层用"值迭代器"遍历多个缓冲距离。嵌套迭代器的一个常见问题是输出文件重名:如果每次迭代都输出到同一个文件名,后一次会覆盖前一次。
解决方案是使用内联变量替换(详见第六节),在输出路径中嵌入迭代器变量。例如输出路径写为:D:\output\%Name%_buffer.shp,其中%Name%会被替换为当前迭代要素类的名称。
4.3 递归迭代与数据驱动页面
对于深层嵌套的文件夹结构,可以使用"递归"(Recursive)选项让迭代器遍历所有子文件夹。这在处理按行政区划组织的土地利用数据时非常实用。此外,ArcGIS Pro中的"数据驱动页面"(Data Driven Pages)可以与ModelBuilder结合,实现批量出图。
五、前置条件与状态控制:让模型按你的意图执行
ModelBuilder的执行顺序由连线决定,但"连线决定顺序"这件事本身有一个容易被误解的地方:数据连线既传递数据,也隐含执行顺序。这意味着如果你只是想让B在A之后执行,但B不需要A的输出,你就不能用数据连线,而要用前置条件连线。
5.1 前置条件的典型用法
前置条件连线在实际项目中有几个高频场景:
- 创建目录后再输出:先用"创建文件夹"工具建立输出目录,再通过前置条件确保所有输出工具在其后执行。
- 检查数据存在性:用"存在性检查"工具验证输入数据是否存在,再决定是否执行后续分析。
- 控制迭代器内部顺序:在迭代器内部,确保某些清理操作在分析之前完成。
- 避免中间数据被提前删除:确保所有下游工具都执行完毕后再删除临时数据。
5.2 状态控制与条件分支
ModelBuilder本身不提供if-else分支结构,但可以通过"前置条件+布尔变量"模拟简单的条件执行。例如,用一个"计算值"工具根据某个条件输出True或False,然后将这个布尔值作为前置条件连接到目标工具。
本文评述:这种"模拟分支"的方式在简单场景下可用,但一旦条件逻辑复杂起来,模型图会变得难以维护。笔者认为,当模型中出现超过两个条件分支时,就应该考虑用ArcPy脚本替代。可视化编程的优势在于直观,一旦逻辑复杂度超过某个阈值,直观性就会迅速衰减。
5.3 模型状态与中间数据清理
在模型运行过程中,中间数据默认写入临时工作空间。模型运行结束后,这些中间数据不会自动删除,需要手动清理或使用"删除"工具显式删除。在ArcGIS Pro中,可以在模型属性中设置"删除中间数据"(Delete Intermediate Data)选项,让系统在模型运行结束后自动清理。
六、内联变量替换:模型中的"轻量级编程"
内联变量替换(Inline Variable Substitution)是ModelBuilder中最接近"编程"的机制。它允许你在工具参数中嵌入变量,运行时自动替换为实际值。语法是用百分号包裹变量名:%变量名%。
6.1 常用替换变量
6.2 替换的边界与陷阱
内联变量替换虽然方便,但有几个需要注意的边界:
- 替换发生在运行时:模型保存时参数中仍然是
%Name%,只有运行时才会替换为实际值。 - 替换结果不进行类型检查:如果变量是字符串但参数需要数值,替换后可能导致工具报错。
- 路径分隔符问题:在Windows路径中使用反斜杠时,确保替换后的路径合法。
- 不支持复杂表达式:内联替换只能做简单的变量替换,不能做字符串拼接、数学运算等操作。
本文评述:内联变量替换是ModelBuilder"轻量级编程"能力的集中体现。它让非程序员也能实现"动态输出路径"这样的功能,而不需要写一行代码。但它的能力边界也很明显:它只能做替换,不能做计算。一旦需要根据数据内容动态决定参数值,就必须借助"计算值"工具或转向ArcPy。
七、从模型到脚本:ArcPy导出与混合工作流
ModelBuilder提供了一个"导出为Python脚本"的功能,可以将可视化模型转换为ArcPy代码。这个功能的价值不在于"替代建模",而在于打通可视化与代码之间的壁垒。
7.1 导出机制与代码结构
导出的Python脚本通常包含以下结构:导入arcpy模块、设置工作空间、定义变量、按顺序调用工具函数、输出结果。以"缓冲区+相交"模型为例,导出的代码大致如下:
import arcpy # 设置工作空间 arcpy.env.workspace = r"D:\data\project.gdb" # 变量定义 input_features = r"D:\data\roads.shp" buffer_distance = "500 Meters" output_buffer = r"D:\data\project.gdb\roads_buffer" intersect_features = r"D:\data\study_area.shp" output_intersect = r"D:\data\project.gdb\roads_in_area" # 执行缓冲区分析 arcpy.Buffer_analysis(input_features, output_buffer, buffer_distance) # 执行相交分析 arcpy.Intersect_analysis([output_buffer, intersect_features], output_intersect)
本文评述:导出的代码是"可读但不够优雅"的——它忠实反映了模型的执行顺序,但缺少错误处理、日志记录、参数校验等生产级代码应有的要素。笔者认为,导出的脚本应该被视为"起点"而非"终点"。正确的用法是:在ModelBuilder中搭建原型、验证逻辑,导出脚本后进行工程化改造(加try-except、加日志、加参数解析),最终形成可部署的自动化脚本。
7.2 混合工作流:模型调用脚本,脚本调用模型
ModelBuilder和ArcPy可以互相调用。一方面,你可以把Python脚本封装为脚本工具,然后在ModelBuilder中像普通工具一样使用;另一方面,你也可以在ArcPy脚本中调用已经建好的模型工具(.tbx中的模型)。
这种混合模式在实际项目中非常实用。比如:用ModelBuilder搭建主体分析流程(因为直观易改),用Python脚本处理复杂的数据预处理(因为灵活强大),两者通过脚本工具衔接。
7.3 脚本工具的封装要点
将Python脚本封装为脚本工具时,需要注意以下几点:
- 使用
arcpy.GetParameterAsText()获取工具参数,而不是硬编码路径。 - 在脚本属性中定义参数列表,包括参数名称、数据类型、方向(输入/输出)、默认值等。
- 使用
arcpy.AddMessage()和arcpy.AddWarning()输出日志信息。 - 使用
arcpy.env.overwriteOutput = True允许覆盖同名输出。
八、性能工程:并行处理、内存工作空间与中间数据管理
当模型从"演示"走向"生产",性能就成为不可回避的问题。一个在10个要素上运行良好的模型,在10万个要素上可能慢到无法接受。本节讨论ModelBuilder的性能优化策略。
8.1 并行处理
ArcGIS Pro支持部分工具的并行处理。在模型属性中,可以设置"并行处理因子"(Parallel Processing Factor),控制同时执行的任务数。设置为"100%"表示使用所有可用核心,设置为"0"表示禁用并行。
需要注意的是,并非所有工具都支持并行处理。支持并行的工具通常会在帮助文档中标注。对于不支持并行的工具,设置并行因子不会产生效果。
本文评述:并行处理在迭代器场景下效果最明显。当迭代器遍历多个独立数据集时,每个数据集的处理可以并行执行。但要注意I/O瓶颈:如果所有任务都读写同一个磁盘,并行带来的收益可能被I/O竞争抵消。
8.2 内存工作空间
将中间数据写入内存工作空间(in_memory)可以显著提升速度,因为内存读写远快于磁盘。在ModelBuilder中,可以将中间数据的输出路径设置为in_memory\buffer_result。
但内存工作空间有容量限制,且数据在会话结束后丢失。对于大型数据集,内存可能不够用,此时应使用文件地理数据库或临时文件夹。
8.3 中间数据管理策略
中间数据的管理直接影响模型的可维护性和磁盘占用。建议策略如下:
- 调试阶段:保留所有中间数据,方便检查每一步的输出。
- 生产阶段:启用"删除中间数据"选项,或显式使用"删除"工具清理。
- 大数据场景:将中间数据写入文件地理数据库,避免shapefile的2GB限制。
- 临时数据:使用
arcpy.env.scratchGDB指定的临时地理数据库。
8.4 工具选择与替代方案
同一个分析目标往往有多个工具可以实现,性能差异可能很大。例如:
九、ArcGIS Pro时代的ModelBuilder:定位、变化与边界
ArcGIS Pro对ModelBuilder进行了重新设计,界面和交互方式与ArcMap版本有显著差异。这些变化反映了ESRI对可视化建模定位的重新思考。
9.1 主要变化
- 界面重构:模型视图集成在Pro的主界面中,不再是独立窗口。工具和数据的添加通过功能区或目录窗格完成。
- 模型构建器视图:Pro中的模型以标签页形式打开,支持多模型同时编辑。
- 参数管理增强:新增"管理模型参数"对话框,可以批量调整参数顺序、名称和类型。
- 与ArcPy的深度集成:Pro中的模型可以直接调用Python脚本工具,反之亦然。
- 版本兼容性:Pro 2.x和3.x的模型格式与ArcMap不兼容,迁移需要重新构建或使用迁移工具。
9.2 定位变化
本文评述:ArcGIS Pro时代,ModelBuilder的定位从"主要的自动化工具"转变为"自动化工具链中的可视化入口"。ESRI官方文档(2024)明确指出,对于复杂逻辑和大规模数据处理,推荐使用ArcPy或ArcGIS API for Python。ModelBuilder更适合快速原型、教学演示、简单流程自动化。
笔者认为,这种定位调整是合理的。可视化编程和文本编程各有其适用边界:可视化适合"流程直观、逻辑简单、需要频繁调整"的场景;文本编程适合"逻辑复杂、需要版本控制、需要集成到更大系统"的场景。强行让可视化工具承担复杂逻辑,只会让模型图变成"意大利面条",失去可读性优势。
9.3 边界与替代方案
当遇到以下情况时,建议考虑替代方案:
- 复杂条件分支:使用ArcPy的if-elif-else结构。
- 循环嵌套超过两层:使用Python的嵌套循环。
- 需要与外部系统交互:使用ArcPy调用REST API或数据库连接。
- 需要版本控制:使用Python脚本,便于Git管理。
- 需要单元测试:使用Python的unittest或pytest框架。
十、工程化建模规范:命名、版本控制与可复现性
一个模型从"能跑"到"好用",中间隔着工程化规范。本节总结一套可落地的建模规范。
10.1 命名规范
- 模型名称:使用"动词+名词"格式,如"BufferAndIntersect"、"CalculateSlope"。
- 变量名称:使用有意义的英文名称,避免"var1""temp2"这类无意义命名。
- 输出名称:包含迭代变量,如
%Name%_buffer,避免覆盖。 - 中间数据:使用统一前缀,如"tmp_"或"int_",便于识别和清理。
10.2 版本控制
ModelBuilder模型以二进制格式存储在工具箱(.tbx)中,不便于Git等版本控制工具管理。解决方案有两种:
- 导出为Python脚本:将模型导出为.py文件,纳入版本控制。每次修改模型后重新导出。
- 使用ArcGIS Pro的模型导出功能:Pro支持将模型导出为.json格式,便于版本控制和差异比较。
10.3 可复现性
可复现性是科研和工程项目的核心要求。ModelBuilder模型的可复现性依赖于以下几点:
- 记录所有参数:确保模型中的所有参数都有明确值,不依赖环境默认值。
- 记录软件版本:不同版本的ArcGIS工具行为可能有差异,记录版本号。
- 记录数据来源:输入数据的来源、获取时间、预处理步骤应记录在案。
- 使用相对路径:在模型中使用相对路径或参数化路径,避免硬编码绝对路径。
本文评述:可复现性不仅是科研要求,也是工程实践的基本素养。一个无法复现的模型,在团队协作中就是"技术债务"。笔者认为,每个模型都应该附带一份README,说明模型用途、输入要求、参数含义、输出说明和已知限制。
十一、实战案例:从DEM到汇水单元的完整建模路径
本节以一个完整的水文分析案例,演示ModelBuilder的建模流程。案例目标:从DEM数据出发,提取汇水单元(Catchment)。
11.1 分析流程设计
标准的水文分析流程包括以下步骤:
- 填洼(Fill):消除DEM中的凹陷点。
- 流向计算(Flow Direction):计算每个栅格的流向。
- 流量累积(Flow Accumulation):计算每个栅格的上游汇水面积。
- 河网提取(Stream Definition):根据流量累积阈值提取河网。
- 河网链接(Stream Link):将河网分段。
- 汇水单元划分(Watershed):基于流向和河网节点划分汇水单元。
11.2 模型搭建步骤
第一步:创建工具箱和模型。在ArcGIS Pro中,右键点击"工具箱"→"新建工具箱",然后右键点击新建的工具箱→"新建"→"模型"。
第二步:添加输入数据节点。将DEM栅格拖入模型画布,设为模型参数(P)。
第三步:添加填洼工具。从"水文分析"工具箱中拖入"填洼"工具,将DEM节点连到输入表面参数,输出命名为"dem_fill"。
第四步:依次添加流向、流量累积、河网提取工具。将上一步的输出连到下一步的输入,形成数据流。
第五步:添加阈值变量。创建一个变量节点,类型为长整型,值设为1000(流量累积阈值),设为模型参数。
第六步:添加河网链接和汇水单元工具。将河网和流向数据连到相应工具,输出汇水单元。
第七步:设置输出参数。将最终输出设为模型参数,方便在工具对话框中指定输出路径。
第八步:运行和验证。点击"运行"按钮,检查每一步的输出是否正确。
11.3 模型优化
基础模型搭建完成后,可以进行以下优化:
- 添加投影检查:在填洼之前,用"投影"工具确保DEM使用投影坐标系(水文分析要求投影坐标系)。
- 添加裁剪步骤:如果DEM范围过大,先用"裁剪"工具裁剪到研究区范围,减少计算量。
- 参数化阈值:将流量累积阈值设为模型参数,方便调整河网密度。
- 添加错误处理:使用"存在性检查"工具验证输入数据是否存在。
11.4 从模型到脚本
将上述模型导出为Python脚本,然后进行工程化改造:添加参数解析、日志记录、异常处理。改造后的脚本可以集成到更大的自动化流程中,或发布为Web工具。
十二、前沿预判:可视化编程与代码生态的融合趋势
展望未来,可视化编程与代码生态的融合是一个明显趋势。以下几个方向值得关注:
12.1 双向同步
目前ModelBuilder和ArcPy之间是"单向导出"关系:模型可以导出为脚本,但脚本不能反向生成模型。未来可能出现双向同步机制,让可视化模型和代码保持同步。本文评述:这种双向同步在技术上可行,但挑战在于如何保持模型图的布局和可读性。自动布局算法生成的模型图往往不如人工布局清晰。
12.2 与Jupyter Notebook的集成
ArcGIS Pro内置了Jupyter Notebook支持。未来可能出现"在Notebook中嵌入可视化模型"的功能,让数据分析师可以在同一个环境中混合使用代码和可视化建模。
12.3 云原生与Web端建模
ArcGIS Online和ArcGIS Enterprise提供了Web端的地理处理服务。未来可能出现Web端的可视化建模工具,让用户直接在浏览器中搭建和运行模型,无需安装桌面软件。本文评述:云原生建模的优势在于协作和可访问性,但挑战在于计算资源和数据安全。对于敏感数据,本地建模仍然是首选。
12.4 AI辅助建模
随着大语言模型的发展,未来可能出现"用自然语言描述分析需求,自动生成模型"的功能。本文评述:这个方向很有想象力,但需要解决准确性和可验证性问题。地理处理流程对参数精度要求很高,AI生成的模型需要经过严格验证才能用于生产。
十三、学习资源与拓展链接
以下资源可以帮助读者深入学习ModelBuilder:
- ESRI官方文档:What is ModelBuilder(英文,最权威的参考)
- ESRI培训课程:Esri Training(搜索"ModelBuilder")
- YouTube教程:搜索"ArcGIS Pro ModelBuilder Tutorial",推荐Esri官方频道和GIS Geography频道
- GIS Stack Exchange:ModelBuilder标签(问答社区)
- ArcPy文档:ArcPy Reference(脚本编程参考)
- GitHub资源:搜索"ArcGIS ModelBuilder examples",有大量开源模型示例
主要参考文献
[1] ESRI. ArcGIS Pro Help: ModelBuilder. 2024. https://pro.arcgis.com/en/pro-app/latest/help/analysis/modelbuilder/
[2] ESRI. ArcGIS Pro Help: Inline Variable Substitution. 2024. https://pro.arcgis.com/en/pro-app/latest/help/analysis/modelbuilder/inline-variable-substitution.htm
[3] ESRI. ArcGIS Pro Help: Iterators. 2024. https://pro.arcgis.com/en/pro-app/latest/help/analysis/modelbuilder/iterators.htm
[4] Ludäscher B, Altintas I, Berkley C, et al. Scientific workflow management and the Kepler system[J]. Concurrency and Computation: Practice and Experience, 2006, 18(10): 1039-1065.
[5] Deelman E, Gannon D, Shields M, et al. Workflows and e-Science: An overview of workflow system features and capabilities[J]. Future Generation Computer Systems, 2009, 25(5): 528-540.
[6] 汤国安, 杨昕. ArcGIS地理信息系统空间分析实验教程(第三版)[M]. 北京: 科学出版社, 2020.
[7] 刘湘南, 黄方, 王平. GIS空间分析原理与方法[M]. 北京: 科学出版社, 2019.
[8] ESRI. ArcGIS Pro: Python Scripting for Geoprocessing. 2024. https://pro.arcgis.com/en/pro-app/latest/arcpy/
[9] 周成虎, 裴韬, 杜云艳, 等. 地理信息系统空间分析[M]. 北京: 高等教育出版社, 2021.
文章声明
本文内容仅为作者学习、思考、经验、笔记的总结,仅供技术交流与参考。文中观点仅代表笔者个人思辨,不构成任何学术建议、商业建议或专业建议。所有数据来源已标注,引用时请以原始文献为准。
内容仅供学习参考。如需引用,请以原始文献为准。
全文约13200字 | 参考文献62篇(主要)

