使用 web 应用程序中的地理处理服务

地理处理服务可在自定义 web 应用程序中使用,以便为 web 应用程序客户端提供强大的地理处理与分析解决方案。 一般来说,可将创建 web 应用程序视为开发人员(或程序员)的任务。 可使用 JavaScript API 在临时工作空间构建 web 应用程序。 此外,非开发人员可使用 ArcGIS Enterprise 中的 Web AppBuilder 部署可配置的 web 应用程序。

无论您使用哪种方法构建 web 应用程序,基础地理处理服务的通信都会通过 REST 进行并连接到 ArcGIS Server 中的服务端点。

  • 服务端点是一个 URL,通常为以下格式:http://<server>/arcgis/rest/<ServiceName>
  • 每个服务端点都有描述服务、可执行操作和服务组成资源的信息。 在地理处理环境中,服务资源由一个或多个工具组成。

要了解有关将 web 工具与 ArcGIS REST API 配合使用的详细信息,请参阅地理处理服务

将地理处理服务与自定义 web 应用程序配合使用

通常使用 ArcGIS API for JavaScript 构造自定义 web 应用程序。 虽然您可以构造任何可通过 REST 与服务进行通信的应用程序,但以下讨论主要关注 JavaScript。 如果您已经擅长 JavaScript 和地理处理,您可能希望查看示例与代码片段。 若非如此,本节的其余部分概述了将地理处理添加到 web 应用程序所需的以下过程:

  1. 正在初始化地理处理服务。
  2. 设置输入参数
  3. 正在执行
  4. 正在获取和处理一个或多个结果

以下 JavaScript 代码取自计算视域示例,其中仅有用于说明执行地理处理工具所需四个步骤的相关片段。 JavaScript 中的示例有助于提供一个完整的示例,而以下内容只会生成一个带有附加代码的工作网页:

// esri.tasks.Geoprocessor is required for using Geoprocessor.
//  Add it along with other dojo.require statements.
dojo.require(esri.tasks.Geoprocessor); 

// Step 1: Initialize the geoprocessing and point to the REST URL
var gpUrl = "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed";
var gp = new Geoprocessor(gpUrl);	

// Set output spatial reference 
gp.outSpatialReference = { wkid: 102100 };

function computeViewshed(event) { 
   graphicsLayer.removeAll();

   // Step 2: Set up input parameters and assign or collect inputs from user
   var point = new Point({ 
        longitude: event.mapPoint.longitude,
        latitude: event.mapPoint.latitude  
   });  

   var inputGraphic = new Graphic({
      geometry: point, 
      symbol: markerSymbol 
   }); 
   graphicsLayer.add(inputGraphic); 

   var inputGraphicContainer = [];
   inputGraphicContainer.push(inputGraphic);
   var featureSet = new FeatureSet();
   featureSet.features = inputGraphicContainer;  

   var vsDistance = new LinearUnit();  
   vsDistance.distance = 5;
   vsDistance.units = "miles";  
   var params = {  
      "Input_Observation_Point": featureSet,
      "Viewshed_Distance": vsDistance  
   };  

   // Step 3: Execute the service. In this instance, the service is Synchronous; Execute
   // will be called. An Asynchronous service will use gp.submitJob.
   gp.execute(params).then(drawResultData); 
}  

// Step 4: Render the result. Symbology is assigned and the graphics are added to the map.
function drawResultData(result) { 
   var resultFeatures = result.results[0].value.features;  
   // Assign each resulting graphic a symbol  
   var viewshedGraphics = resultFeatures.map(function(feature) { 
      feature.symbol = fillSymbol;     
      return feature; 
   });       
   // Add the resulting graphics to the graphics layer  
   graphicsLayer.addMany(viewshedGraphics);
}

在上例中,必须加载 Geoprocessor 类,并且服务的 REST URL 将与全局变量一起使用来定义地理处理任务。 下一步是构建特定于运行应用程序的工具的参数。 本示例需要一个点(要素)输入和一个距离(线性单位)。 特定于服务中工具的 REST URL 将定义输入参数。 服务将设置为同步或异步,此设置控制该执行以提交 GP 作业还是执行 GP 任务完成。 各工具的输出在与输入页面相同的页面有所说明;提供了关于类型和显示方式的相关信息。

有关这些步骤的详细说明,请参阅在 ArcGIS API for JavaScript 中使用地理处理服务

提示:

上例将返回代表可以在视域分析地球中看到的位置的要素。 地理处理服务可提供文本、编号或文件输出,即无法在地图中绘制的项目。 大多数情况下,需要采用一种不同的方法并以适用于所构建应用程序的方式显示服务中的输出。 例如,一个带有文本输出或文件保存链接的弹出窗口框即可。

将地理处理服务与 Web AppBuilder 配合使用

要使用 Web AppBuilder,无需编写代码;只需了解地理处理服务的服务端点 (REST URL) 即可。 通过配置地理处理微件可在 Web AppBuilder 创建的 web 应用程序中使用地理处理服务。 首先需要在门户中创建 web 应用程序。 选择样式和地图后,即可添加新地理处理微件并对其进行配置。 微件配置允许您设置与特定服务相关的输入和输出选项。 这些定义服务的输入参数和输出参数会指定可通过微件配置使用的选项。 例如,如果已发布地理处理服务以接受要素输入,则微件配置允许您控制用户可输入的要素类型(方形、圆形、手绘等等)。 相同的前提也适用于输出。 设置为输出要素的地理处理服务允许您配置符号系统和 web 应用程序渲染地理处理服务输出的方式。 已配置结果地图图层的服务会将结果添加到 web 应用程序并根据初始发布过程中选择的设置进行符号化。