创作地理处理服务需要在服务中创作任务。创作任务就是选择或创建工具,定义任务的输入和输出参数以及任务使用的所有数据的位置。下面详细介绍了各步骤:
- 选择一个或多个要作为服务中的任务的地理处理工具。可以使用 ArcGIS 所提供的若干系统工具中的一个,或者使用 ModelBuilder 或 Python 脚本创建自己的工具。
- 收集执行工具所需的输入数据。通常,这些数据集是 ArcMap 内容列表中的图层。
- 执行工具在结果窗口中创建结果。
- 如有必要,定义输入和输出数据集的符号系统。
- 将结果共享为地理处理服务。共享结果时,使用服务编辑器定义数据集的输入模式(如下所述)以及服务和其任务的其他属性。
示例:简单的供需模型
下图以使用 ModelBuilder 创建的将包括到任务中的工具为例。该模型(和发布的任务)是一个非常简单的供需分配模型;给定一组用于表示提供服务的点位置(例如应急响应或零售设施点),以及另一组用于表示需求的点位置(例如需要服务提供的家庭和商店),目的是将需求点分配给最近设施点,为各设施点创建贸易区,并汇总设施点贸易区中的全部需求。输出是一组面,每个输入设施点对应一个面,每个面具有包含面内的总体需求的属性。
请注意,在上面的模型中,设施点、需求点和输出泰森多边形变量都是模型的参数(它们旁边有一个 P)。这些模型参数将作为任务的参数,由任务的客户端在执行任务时提供。
模型参数显示在工具对话框中,如下所示,其中,模型工具从 ArcMap 的目录窗口打开。
模型作为工具运行时,结果将写入到结果 窗口中,如下图所示。结果中包含了 ArcGIS 构造任务所需的全部信息。
- 用于创建结果的工具箱和工具的名称和位置。
- 运行该工具所生成的输出结果 (ThiessenPolys1)。
- 输出结果的方案(要素类型和属性)。
- 输出结果的符号系统。在此示例中,输出符号系统是分级色彩,具体取决于各面要素内的需求总和。
- 工具的输入(Fire Stations 和 Hazardous Material Sites 图层)。
- 各输入的方案(要素类型和属性)。本例中,Fire Stations 具有一个文本属性:FacilityName。Hazardous Material Sites 也具有一个属性:Demand,长整型。
- 输入的符号系统。在此示例中,Fire Stations 图层使用消防站符号对各位置点进行符号化, Demand 图层使用分级圆圈进行符号化。
- 工具执行时的地理处理环境设置。
结果的另一个重要方面是它是 ArcMap 会话的一部分,因此其对内容列表 中的所有图层和表格具有访问权限,发布的任务也可对这些图层具有访问权限。上图所示的内容列表仅包含两个输入图层和一个输出,但它也可以包含更多可用于任务的客户端的图层(例如零售点位置图层)。
地理处理服务及其初始任务的创建方法是右键单击结果并选择共享为 > 地理处理服务。这将打开共享为服务向导,并且在选择了服务器连接和服务名称之后,将打开服务编辑器对话框。服务编辑器用于定义服务的属性和设置以及各任务参数的属性。下图显示了如何设置 Facilities 参数的输入模式。在本例中,输入模式设置为用户定义值,也就是说,客户端将提供一组具有文本属性 FacilityName 的点。
这里的关键点是服务编辑器 可详细地控制任务的输入和输出的定义。虽然这发生在共享进程中,但它会影响您创作工具的方式。
示例:其他输入模式
生成近邻表工具是一种系统工具,用于计算距离输入要素最近的要素并在表中返回结果。在本例中,生成近邻表用于返回在任何输入点五英里范围内的所有小学、中学、消防站、杂货店和零售店。这里,输入点被视为待售房屋 - 这是一个用于帮助购房者评估待售房屋的简单服务。输入的所有数据集都是 ArcMap 内容列表中的图层。
结果共享为地理处理任务时,邻近要素可以是一个要搜索的邻近要素的选择列表,如下所示。客户端将指定这些图层中的一个或多个。例如,客户端可能仅对最近的中学和小学感兴趣,而对其他图层不感兴趣。
或者,邻近要素可以是固定值(常量值),在这种情况下,它不再是任务的参数,并且客户端不控制要返回的邻近要素;它们始终获取所有最近要素表。
输入模式
在在上面的示例中,您已经看到了设置输入模式是一个多么重要的任务设计和创作决策。输入模式在服务编辑器 中进行设置,因为这仅涉及地理处理任务,而不涉及基础工具。输入要素有三种输入模式:
- 用户定义值:客户端将创建一个要素集,该要素集将通过 Internet 传输以供任务读取。指定用户定义值作为输入模式时,输入图层的要素类型、属性、空间参考和符号系统都存储在要素集中。客户端可检索此方案并使用它将要素数字化到要素集中或将要素从磁盘上的文件中加载到要素集中。对于输入表而言,包含一个对应的记录集用于存储表的属性方案。
- 选择列表:客户端可输入您在图层列表中选中的一个或多个图层的名称。客户端是否可输入多个图层将取决于工具本身。上面所示的生成近邻表工具允许输入多个图层。其他工具(例如缓冲区)则仅允许输入选择列表中的一个图层。
- 常量值:任务将使用您运行工具时所指定的值。常量值与移除参数相同 - 图层(数据集)由任务内部地使用,而不提供给客户端。
示例:脚本工具
也可使用脚本工具来创建任务。下图显示了脚本工具的属性页,该脚本工具所做的工作与上面所创建的简单供需模型完全相同,唯一的区别是使用 Python 脚本语言而不是使用模型构建器。它所包含的参数与模型相同,并且使用相同的步骤来创建任务:运行工具来创建结果,然后将结果共享为地理处理服务。
项目数据和数据存储
项目数据是地理处理用来描述非参数的输入数据的术语;即数据不是由工具或任务的用户提供,但工具或任务可内部使用。例如,下面模型中的 San Francisco Network Dataset 变量就是一个项目数据,它被模型使用但并不显示为参数。一般地,模型的项目数据表示为一个蓝色椭圆,旁边没有 P。
项目数据也可以显示在脚本中,如下面的 Python 代码片段中所示。
import arcpy
# The inputPoints variable is considered to be project data
# since it is not an input parameter.
#
inputPoints = r"c:\data\Toronto\residential.gdb\shelters"
arcpy.Buffer_analysis(inputPoints, 'shelterBuffers', '1500 Meters')
在服务编辑器 中,输入模式为常量值的输入数据参数相当于项目数据 - 它是由工具使用的数据,但不显示为任务参数。可以将常量值输入模式视为移除模型构建器中变量参数旁的 P。
创作和共享任务时,需要重点考虑项目数据,因为在执行任务时,服务器必须可访问项目数据。地理处理服务往往会使用不同的位置上的许多不同的数据。通常情况下,服务中所存在的问题都可追溯为项目数据访问问题。
发布结果时,发布进程将对用于生成结果的所有模型和脚本进行扫描,查找其中的项目数据。然后确定如何使用该数据。只有两种选择:
- 如果可在服务器的数据存储中找到项目数据,那么发布的任务就会使用数据存储中的数据。
- 如果无法在服务器的数据存储中找到项目数据,那么数据会首先复制到服务器,置于服务器上一个可访问的已知位置(服务器的输入目录)然后发布的任务将使用复制的数据。复制的数据不会成为服务器的数据存储的一部分。如果重新发布该任务,则将再次复制数据。
关于数据存储
ArcGIS Server 的每次安装都将包含一个数据存储。数据存储是一种用户为服务器提供服务器可访问的一系列数据位置的方式。如果服务器可以访问数据,则在发布时,不会将在本地计算机上找到的数据复制到服务器。
有关将数据注册到 ArcGIS Server 的详细信息,请参阅:
简单数据输入,简单数据输出
GIS 服务必须使用所有客户端中的最简单客户端:在计算机上运行的没有任何 GIS 功能的 Web 浏览器。这些简单的客户端仅知道如何向服务器发送简单数据包,例如文本、数字、表和地理要素及其属性。而不知道您在 ArcGIS Desktop 中所使用的任何更高级的地理数据表达,例如网络数据集、拓扑、TIN、关系类、几何网络等。这些数据集称为复杂数据集;它们用于对简单要素之间的复杂关系进行建模。复杂数据集不能通过 Internet 进行传输;通过 Internet 只能传输简单的要素、表、栅格和文件。
创作任务时,您需要清楚的一点是,所有客户端(无论它们是 Web 应用程序、Explorer for ArcGIS 还是 ArcGIS Desktop)都仅仅知道如何发送和接收(传输)这些简单数据集。即便您知道服务将仅由复杂客户端访问,例如 ArcMap,创作任务时也应限制为简单输入数据。
有关可传输和不可传输数据集的详细信息,请参阅输入模式和参数数据类型主题。
使用地图服务绘制任务结果
发布地理处理服务时,可以选择以地图形式查看任务结果(以及任务的所有其他结果)。地图将在服务器上使用 ArcMap 创建,创建完毕后再将地图传输回客户端。返回地图的符号系统、标注、透明度和所有其他属性与当前 ArcMap 会话中的输出图层完全相同。创建结果地图服务的工作流非常简单:
- 运行工具以在结果窗口中创建结果。工具所创建的全部数据都将以图层形式添加到 ArcMap 的内部列表中。
- 更改作为您的工具输出的图层符号系统。
- 在结果上单击鼠标右键并共享为地理处理服务。
- 在服务编辑器中,单击参数并启用通过地图服务查看结果。
如果输出图层要绘制唯一值,则可能需要取消选中图层属性中的 <所有其他值> 以在绘制之前强制重新计算唯一值。有关详细信息,请参阅创建图层符号系统文件主题。
编写任务文档
如果您希望尽可能多的人发现、了解和使用服务,至关重要的一点是为服务和任务编写文档。
良好的文档的编写从创建要发布的结果的工具开始。系统中的每个工具都具有项目描述,可通过在目录 窗口中右键单击工具并选择项目描述来查看和编辑详细的描述信息。
地理处理环境设置
地理处理环境设置是影响工具执行结果的附加参数。这些参数与常规工具参数的区别在于它们不会显示在工具对话框中(存在某些例外情况)。更确切地说,这些参数是先前使用独立对话框设置的值,工具在运行时将询问和使用这些参数。
环境设置等级
可采用多种方法更改环境设置,并且可以将更改的地方视为等级中的级别。环境设置逐级别进行传递。在每个级别上,都可以用其他设置覆盖所传入的环境设置。
- 应用程序级别 - 在主菜单中,单击地理处理 > 环境。在此所做的更改将影响所有工具的执行。
- 工具级别 - 在工具对话框中,单击环境按钮。将打开环境设置对话框。请注意,无论工具是否支持所有环境设置,这些环境设置都会列出在环境设置对话框中。您需要查阅工具的参考页面以确定工具是否支持该环境设置。在此所做的更改将会覆盖在应用程序级别上所做的原始设置。这些设置仅应用于工具的执行;不会覆盖应用程序级别设置。
- 模型、模型过程或脚本级别 - 在模型或脚本中,可以高度控制环境设置。可以更改模型或脚本中某一特定工具、一组工具或所有工具的环境设置。在此级别所做的设置会覆盖在工具或应用程序级别所做的所有设置。
环境设置存储在结果中
结果窗口中的结果将存储在应用程序或工具级别所做的所有环境设置。在服务器上执行任务时,任务执行期间将使用结果中的环境设置。但是,在模型或脚本级别所做的设置不会显示在结果中,但在任务执行期间将使用这些设置。可以将结果中的环境设置视为传递到模型或脚本工具,然后将覆盖设置。