GP Raster Server

GP的输出类型是Raster时,那么这个GP工具发布的GP服务就只能在ArcGIS Desktop客户端调用,怎样可以在其他客户端使用呢?从http://help.arcgis.com/zh-cn/arcgisdesktop/10.0/help/index.html#/na/002v00000004000000/里可以知道,提供了将GP以结果地图服务进行发布这种方法。

本文以Natural Neighbor这个GP工具为例,展现一下整个操作流程。

第一部分:发布服务

1 创建目录结构

  http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Managing_the_jobs_directory/002v0000000m000000/

2 构建模型

  Natural Neighbor这个GP工具拖到Model里,然后设置点图层为输入参数。

其中,output的设置方法如下。在对output进行设置的时候,如果最后的结果不需要渲染,可以直接设置成“%scratchworkspace%/output,不需要设置最后输出栅格数据的格式(如.tif)。

3 设置工作空间

  ArcToolBox的空白处单击右键,选择“Enviornments,然后将“workspace”展开,将当前工作空间(Current Workspace)和临时工作空间(Scratch Workspace)指向在第一步创建的工作目录里。

4 配置渲染文件

 第一步在ArcMap里运行已经构建好的GP工具,结果图层output会自动加载进ArcMap里。

 第二步对output图层进行渲染,然后另存为.lyr文件(假如取名为output-config.lyr)。

 第三步打开GP工具,在output上单击右键,选择“Properties”,然后单击“Layer Symbology”,将第二步保存的lyr添加进来。进行保存。

5 准备发布的数据。

 再次运行这个GP工具,然后将GP工具直接拖到TOC上,那么这个GP工具就会以图层的形式存在。点击“保存“,命名为“gprater.mxd”。这里需要注意的是,一定要以相对路径进行存储。

 

6发布服务

 两种方式。第一种直接在ArcGIS Catalog里,找到gprater.mxd这个地图文档,单击右键,选择“Publish to ArcGIS Server”,在第二步将“Geoprocessing”勾选上,剩下的选默认参数就可以了。第二种采用“Add New Service”方式,服务类型选“Geoprocessing Service”,在第二步的时候,将“gprater.mxd”添加进来。

 在发布服务这一环节,经测试,只能选异步方式,不能选同步方式。

 

第二部分:测试服务

GP工具发布服务成功之后,需要对其发布的服务进行测试。

测试分为两个部分:

1打开ArcMap,加载测试数据ZPts.shp(测试的点图层)。然后将发布后的GP服务里的工具添加进ArcToolbox里,运行这个GP工具。

2rest环境下测试。

 http://localhost/ArcGIS/rest/services/gprater/GPServer/Model

 选择“Submit Job”,输入测试数据

 然后选择“Submit Job(GET).

Job Messages:

·        esriJobMessageTypeInformative: Submitted.

·        esriJobMessageTypeInformative: Executing...

·        esriJobMessageTypeInformative: Succeeded.

 

 第三部分:调用GP服务

环境:VS2010+Silverlight API for ArcGIS 2.1

a.txt放的是测试数据,放置路径是C:/inetpub/wwwroot

 

       Geoprocessor _geoprocessorTask;

       public MainPage()

       {

           InitializeComponent();       

       }

 

           private void button1_Click(object sender,RoutedEventArgs e)

         {

             _geoprocessorTask = new Geoprocessor("http://lius/ArcGIS/rest/services/gprater/GPServer/Model");

             List<GPParameter> parameters =new List<GPParameter>();

             parameters.Add(new GPFeatureRecordSetLayer("ZPts", "http://localhost/a.txt"));

           

             _geoprocessorTask.SubmitJobAsync(parameters);

             _geoprocessorTask.JobCompleted += new EventHandler<JobInfoEventArgs>(_geoprocessorTask_JobCompleted);

 

             _geoprocessorTask.Failed += GeoprocessorTask_Failed;

 

         }

 

         private   void _geoprocessorTask_JobCompleted(object sender,JobInfoEventArgs e)

           {

               Geoprocessor geoprocessorTask = sender as Geoprocessor;

               geoprocessorTask.GetResultDataCompleted += GeoprocessorTask_GetResultDataCompleted;

               geoprocessorTask.GetResultDataAsync(e.JobInfo.JobId, "output"); 

           }

 

         private void GeoprocessorTask_GetResultDataCompleted(object sender,GPParameterEventArgs e)

         {

             Geoprocessor geoprocessorTask = sender as Geoprocessor;

             _geoprocessorTask.GetResultImageLayerAsync(geoprocessorTask.SubmitJobLastResult.JobId, e.Parameter.Name);

             _geoprocessorTask.GetResultImageLayerCompleted += new EventHandler<GetResultImageLayerEventArgs>(_geoprocessorTask_GetResultImageLayerCompleted);

            

         }

 

         void _geoprocessorTask_GetResultImageLayerCompleted(object sender,GetResultImageLayerEventArgs e)

         {

             GPResultImageLayer mGPResultImageLAyer = e.GPResultImageLayer;

             MyMap.Layers.Clear();

             MyMap.Layers.Add(mGPResultImageLAyer);

         }

     

 

       private void GeoprocessorTask_Failed(object sender,TaskFailedEventArgs e)

       {

           MessageBox.Show(  e.Error.ToString());

       }

 

你可能感兴趣的:(server,object,测试,Parameters,工具,output)