地理处理服务的重要概念

地理处理服务包括可通过启用了 Web 的客户端进行访问的地理处理任务。通过发布地理处理模型和脚本工具可以创建任务。

在 ArcGIS Desktop 中,可通过以下两种方法创建地理处理服务:

地理处理服务及其任务可以通过公共 Internet 和私有 Intranet 访问,并且可以在 ArcGIS Desktop、ArcGIS Explorer 和 Web 应用程序(如使用 ArcGIS Server 管理器构建的网站)中使用。在 ArcGIS Desktop 中,可以将地理处理服务作为工具箱添加到 ArcToolbox 窗口中,而任务将成为工具箱中的工具。

本主题的其他部分将介绍与地理处理服务和任务相关的重要设计理念、规则及原则。

生成地理处理服务

Web 客户端是轻量级应用程序,它们只知道如何向服务器发送简单数据包,例如文本、数字及简单的地理要素。地理处理服务采用此类简单数据,对其进行处理,然后返回一些有意义且有用的输出,例如危险化学泄漏物的可能疏散区、逐渐增大的飓风的预测踪迹和强度、用户定义的分水岭内的土地覆被地图、包含所有权历史详细信息的宗地地图或经由市区的行进路线的准许证。这些服务的可能性是无穷的。

地理处理为您提供了丰富且功能强大的工具库,您可以根据此工具库生成用于处理输入数据的服务。如果您当前正在使用地理处理,则可能已经对如何使用模型和脚本来创建工具有所了解。学习如何生成工具以使用最简单的可能输入数据来达到最多的可能客户端用户数,这或许是您需要了解的内容。

例如,假设您拥有一个模型,它可以根据一组点计算出上游分水岭并提取计算出的分水岭内的面。此模型的输入参数可以是

此模型适用于 ArcGIS Desktop,但不适用于地理处理服务。将需要对此模型进行如下修改:

修改后的模型采用简单的输入并回答特定的空间查询:对于研究区域,什么是通过此点定义的位于分水岭内的土地覆被?此模型将作为地理处理服务进行发布,并且在用作研究区域内的土地管理器的网站中使用。

这并不表示您不能使用 ArcGIS Server 构建通用服务。示例缓冲点服务即是一个可以缓冲任何点要素集的完全通用的服务。ArcGIS Server 十分灵活,您可以使用一些高级技术或自定义编程来构建一些通用服务,以便对用户提交的大型数据集进行处理。但多数服务都针对特定的地理区域、回答特定的空间查询并适用于轻量级客户端。因为需要构建上述类型的专注服务并为其提供服务,因此需要设计 ArcGIS Server 地理处理服务。

地理处理服务配置

通过发布两个不同的 ArcGIS Desktop 资源,即一个地理处理工具箱或一个包含工具图层的 ArcMap 文档 (.mxd),可以创建地理处理服务。

以下是三种配置的说明。

三种配置

工具箱中的地理处理服务

发布工具箱时,此工具箱内的所有工具都将成为地理处理任务。任务输出的数据会被传输回客户端。

具有源地图文档的地理处理服务

如果您曾经在 ArcMap 会话中使用过地理处理工具,则应该知道这些工具可能会经常使用 ArcMap 内容列表中的图层以及磁盘上的数据。

与此相同,地理处理任务可能会使用在其源地图文档中的图层。在这种情况下,源地图文档用作图层的容器。您可以将源地图文档中的图层作为任务的输入参数。在下图中,要提取的数据变量是输入参数,用户可以使用此参数从源地图文档中选择图层。

图层来自相关联的地图服务或地图文档。
警告警告:

地理处理任务只能访问在它的源地图文档中找到的图层,不能访问在其他地图服务或客户端应用程序中找到的图层。

使用来自模型或脚本进程的源地图文档中的图层可以提高性能。下图中显示的模型使用网络数据集 StreetsNetwork 来构造路径分析图层。StreetsNetwork 变量可以引用磁盘上的图层(本例中引用的是图层)或数据集。相对于打开其他类型的数据集而言,打开网络数据集的开销更大,这是因为网络数据集包含多个必须进行读取和缓存的高级数据结构和表。如果使用图层来代替数据集,则会带来性能优势;因为 ArcMap 打开数据集一次之后,就会缓存数据集的基本属性并一直使数据集处于打开状态。当模型执行时,您不必重新打开数据集,因为源地图文档已经将其打开,这样会提高性能。与此相反,如果 StreetsNetwork 变量直接引用了数据集,则模型每次执行时都会打开该数据集,这样会降低性能。

使用源地图文档中的图层

为进行网络分析,您始终要将网络数据集作为源地图文档中的图层,以便在模型变量中使用该图层。而对于其他类型的数据集(如要素和栅格),使用源地图文档中的图层所带来的性能优势则微乎其微。

具有结果地图服务的地理处理服务

地理处理服务可包含结果地图服务,以创建任务结果的数字地图图像。数字地图包含向用户传达信息的地理数据集的直观表示。数字地图以图像形式(如 .jpg)通过 Web 进行传输。与要素类中的原始要素相比,字节组成的地图图像中包含的信息更易于为人类所理解。地图图像也是易于管理的 - 可轻松地将其压缩,将其分成易于管理的块,并且已建立在 Web 上传输和查看图像的方法。

地图图像由 ArcGIS Server 地图服务创建,通过发布 ArcMap 文档 (.mxd) 而生成。鉴于地图图像的上述特征,您最好为地理处理任务的结果创建一个地图图像,然后在 Web 上传输该图像,而不是传输一个或多个结果数据集。地理处理服务可包含由 ArcGIS Server 使用的结果地图服务,以创建输出数据的地图图像。

在以下情形下应使用结果地图服务:

  • 任务的结果是(可能是)大型数据集。
  • 客户端不支持输出的数据类型,如 ArcGIS Explorer 中的栅格。在这种情况下,应使用结果地图服务来显示输出。
  • 您想要通过以下方法对任务的结果加以保护:只允许以地图形式进行查看,而不允许以数据集形式进行下载。
  • 您具有需要通过结果地图服务(而非客户端)进行绘制的复杂制图。

使用结果地图服务时,需要特别注意的一点是存在两种服务:地理处理服务和结果地图服务。这两种服务在执行时彼此相互独立。任务执行过程中,ArcGIS Server 会首先执行地理处理任务,然后再执行结果地图服务从而绘制地理处理服务的输出。由于这样的执行顺序,结果地图服务需要使用地理处理服务在磁盘中生成的数据集。这表示地理处理服务中各项任务的输出必须是磁盘上的数据集,而非图层或内存中的数据集。

用于地理处理服务的底图

对于大多数地理处理任务,您的用户都需要将某种类型的底图用作地理参考。地理参考可以是道路的底图、人口密集场所、感兴趣点或其他任何要素。

当输入位置时,地理处理服务可能会依赖特定底图对用户进行引导。例如,如果您的用户输入一个必须落在特定城市的宗地边界内的点,则底图应显示该城市的宗地边界。此外,您的服务可能只在某个研究区域内工作,与在全局范围内工作的服务恰好相反。由于服务只对研究区域内的数据有所了解,因此可以将研究区域视为地理处理范围

注意注意:

使用结果地图服务来显示地理处理服务的底图,这是一个常见的错误。 例如,如果您的用户通过点击方式对宗地进行标识,然后您的任务对通过某些宗地属性进行符号化处理的已标识宗地进行绘制,则您首先会想到使用结果地图服务来显示输入宗地数据(底图)和标识的宗地。之所以不应将结果地图服务用作底图,是因为以下两个原因:

  • 将结果地图服务添加到应用程序之后,便可显示该地图服务中的所有图层。这些图层包括用于绘制输出的地理处理工具图层、可能包含敏感数据的图层、或者由地理处理服务使用的但对用户没有任何意义的图层(如工具图层)。
  • 底图具有多比例和多分辨率。进行缩放时,底图会随之变化:在大比例下显示详细信息,在小比例下将详细信息聚合到制图综合中(例如,河流在小比例下显示为线要素,在大比例下显示为面要素)。构造能够快速进行绘制的多比例和多分辨率底图并不是结果地图服务需要处理的工作,它的工作是绘制输出。底图地图服务的设计和实现过程需要与结果地图服务的设计和实现过程保持独立。

返回到点击宗地应用程序时,应使用地图服务来显示宗地数据(底图)并使用结果地图服务来返回宗地以供显示(可能会通过某些属性进行色彩编码)。这两种地图服务都使用相同的宗地数据集(这并不会产生问题),然后您将显示参考底图的工作从显示结果的工作中划分出来。

设计地图服务时还需要考虑到客户端的属性。对于 Web 应用程序,您对将在应用程序中获取到的地图和地理处理任务具有完全控制权限,而且,结果地图服务不需要在 Web 应用程序的内容列表中以地图图层的形式呈现。ArcMap 和 ArcGIS Explorer 客户端的问题会略多一些,因为实际上,用户可以浏览到任何地图或地理处理服务,并且会在底图范围与地理处理范围不匹配的情况下结束操作。发布服务时,您无法指定“何时添加此地理处理服务以及何时添加其他地图服务”。但是,您可以分发包含正确服务的 ArcMap 文档 (.mxd) 或 ArcGIS Explorer 文档 (.nmf)。您还可以为地理处理服务和任务提供内置任务文档,用以说明需要哪些地图服务。所有客户端均可访问任务文档。

客户端的数据类型和功能

与 ArcGIS Desktop 不同,ArcGIS Explorer 是轻量级客户端应用程序,这意味着它具有小型安装。Web 应用程序是通过 Internet 浏览器进行访问的网站。浏览器是超轻量级(薄)客户端。由于这些客户端具有轻量级属性,因此在 ArcGIS Desktop 中找到的输入和输出数据类型的整个范围并不适用于这些客户端(否则,客户端会像 ArcGIS Desktop 一样具有重量级属性)。例如,轻量级客户端不支持将栅格作为地理处理任务的输入。

注意注意:
因为您所发布的模型或脚本中的进程是在可以获取到所有数据类型的服务器上执行操作,所以您可针对模型或脚本进程使用任何数据类型,如下图所示。只有输入和输出参数数据类型受到限制。只要是服务器能够访问的数据类型,模型或脚本进程就可以使用。
输入和输出数据类型与模型进程

下表汇总了三种客户端的主要输入参数的数据类型。

输入参数数据类型

在 ArcGIS Desktop 客户端上是否受支持?

在 ArcGIS Explorer 客户端上是否受支持?

在 Web 应用程序客户端上是否受支持?

要素集

记录集

要素类

否(但可通过要素集数据类型间接 支持要素类输入。)

否(但可通过记录集数据类型间接 支持表输入。)

栅格

标准类型(如长整型、双精度型、布尔型、日期型和字符串型)和线性单位(如“1000 米”)

文件(如 .zip.xml 文件)

图层(任何类型的图层;如,要素图层、栅格图层和网络分析图层)

仅支持在结果地图服务或源地图文档中找到的图层

仅支持在结果地图服务或源地图文档中找到的图层

仅支持在结果地图服务或源地图文档中找到的图层

用于地理处理服务的输入类型

上面未列出的任何数据类型不是被转换为字符串数据类型,就是被禁止使用。主题输入和输出数据类型对用于地理处理服务的数据类型进行了更为详细的说明。

很可能您的现有模型和脚本采用要素类和表作为输入,因为它们是地理处理过程中最常用的数据集类型。这意味着,这些现有模型和脚本必须在将自身发布为地理处理任务之前进行修改。如果您的模型或脚本采用要素类作为输入,则可以对其进行修改,以使用要素集作为输入。如果您的模型采用表作为输入,则可以对该模型进行修改,以采用记录集作为输入。

下表汇总了三种客户端的主要输出参数的数据类型。

输出参数的数据类型

在 ArcGIS Desktop 客户端上是否受支持?

在 ArcGIS Explorer 客户端上是否受支持?

在 Web 应用程序客户端上是否受支持?

要素类

栅格

否(只能使用结果地图服务在地图中显示)

否(只能使用结果地图服务在地图中显示)

否(含有表数据类型作为输出参数的服务不会显示在可用任务列表中。)

标准类型(如长整型、双精度型、布尔型、日期型和字符串型)和线性单位(如“1000 米”)

是(在 ArcToolbox 窗口的“结果”选项卡的服务结果中查看)

是(在任务结果中查看)

文件

输出数据

数据的并发使用 — %scratchworkspace%

地理处理任务可以被若干个用户并发(同时)使用。对于通过模型或脚本读取的数据,不存在并发使用问题;所有并发用户都可以读取相同的数据。但是,通过服务创建或更新的数据则需要您对与并发写入者相关的问题有所了解。

创建新数据

地理处理任务一般会创建中间数据和输出数据。ArcGIS Server 提供了一种可确保中间数据和输出数据不会发生并发问题的机制。执行任务时,ArcGIS Server 会在作业目录中创建一个唯一的作业文件夹。如下图所示,此作业文件夹包含一个名为 scratch 的文件夹,而该文件夹又进一步包含一个名为 scratch 的文件地理数据库。创建完此文件夹结构之后,ArcGIS Serve 将地理处理临时工作空间环境变量设置为 scratch 文件夹(不是 scratch 地理数据库,而是文件夹)。通过将百分号放置在环境变量名称 %scratchworkspace%) 的周围,模型和脚本可以轻松地查找到此临时工作空间并加以使用。您必须将中间数据和输出数据写入到 scratch 文件夹或 scratch 地理数据库。

中间数据和输出数据的位置

可以使用以下两种方法确保将数据写入到 scratch 文件夹或地理数据库中:

  • 在模型构建器中,右键单击任何中间数据变量,然后选择托管
    警告警告:

    请不要将输出变量设置为“托管”,仅设置中间变量即可。

  • 为路径使用变量替换 (%scratchworkspace%)。例如:
    %scratchworkspace%/templines.shp %scratchworkspace%/scratch.gdb/outWatershed

您也可以将中间数据写入内存。与写入磁盘相比,将数据写入内存速度更快。如果将中间数据写入内存,则无需使模型变量成为中间变量或托管变量,因为数据会在任务执行后被删除。

更新现有数据

更新现有数据的任何任务都需要特别注意。例如,服务中的某个任务可能会更新现有表或要素类、添加新行或要素(例如,使用追加工具)或更新现有属性(例如,使用计算字段工具)。如果将地理处理服务配置为允许多个并发实例(用户),并且多个实例正在运行,则当您尝试更新同一个数据集时,多个实例之间可能会发生冲突。在此类情况下,您必须在配置服务时将实例数限制为 1。这样,ArcGIS Server 会将请求置于队列中,以便每次只有一个实例访问数据。另一个问题是锁定 - 如果您正在更新一个数据集,而该数据集同时是地图服务中的一个图层,则该地图服务会锁定数据,从而导致更新失败。请不要创建用于显示通过其他服务更新的数据的地图服务。

对数据进行符号化

有两种方法可以绘制任务的输出数据:

当客户端绘制输出数据时,将向客户端发送两条信息:数据以及图层绘制描述。图层绘制描述包含您在图层属性 对话框的符号系统选项卡中指定的信息。该信息包括如何分组数据(图层符号系统)以及使用何种符号(符号类型)。客户端仅支持某些特定的图层符号系统和符号类型。

当结果地图服务绘制数据时,将使用在相应的工具图层中找到的图层符号系统和符号类型。使用结果地图服务时,可使用任何图层符号系统和符号类型,因为 ArcMap(在服务器上运行)将绘制数据并将完成的地图的图像传回客户端。客户端的功能不会影响 ArcMap 绘制结果的方式。

了解有关为地理处理任务定义输出符号系统的详细信息

验证

如果您曾经在 ArcGIS Desktop 中使用过地理处理工具,则可能会了解地理处理工具验证输入的方式。例如,输入表更改时,字段列表即会随之更改。

工具验证的示例

其他验证示例包括警告(警告)和错误(错误)、根据输入数据更改默认值以及启用和禁用参数。

注意注意:

地理处理任务无需验证。例如,假设您要创建一个具有输入图层参数和输入字段参数的模型。显示在字段参数中的字段列表取决于图层参数的值。在 ArcGIS Desktop 中,如果图层发生变化,字段列表也将随之改变。但任务却不会出现上述情况:

  • 字段列表将包含您在发布时使用过的列表。
  • 如果任务的用户选择了其他图层,则字段列表将不会刷新。

安全性

GIS 服务器代表投入的精力以及要保护的资源。ArcGIS Server 包含可以防止未授权用户访问服务和应用程序的安全机制。您还可以使用 ArcGIS Server 配置对组织内不同组的访问的级别。

存在两个能够提供安全性的地理处理服务的属性:


3/7/2012