ArcGIS 10.2以上GP服务调用

来源:互联网 发布:阿里云服务器怎么换ip 编辑:程序博客网 时间:2024/05/20 11:20

GP服务是个非常有用的工具,几乎所有的桌面版的地处理工具都可以发布称GP服务。笔者从自己的一个项目中用到一个简单的GP服务入手,介绍下GP服务的发布和调用过程。

这里以intersect相交为例,在客户端的geometryServices也提供intersect方法,但是这个方法有个致命的缺陷,就是仅针对几何类型,没法获取属性信息,所以我们可以采用地处理的intersect服务。

1.模型构建

    在Catolog中,选择Geoprocessing-ModelBuilder,然后选择菜单的Insert,选择Add Data or Tool,在系统工具里找到Intersect工具。如下图:  

   加进来的效果是这样的,这个时候没有设置任何功能参数,背景色都是白色的。

 我们知道,相交是必须要两个要素数据集的,因此我们要加两个参数,作为输入的要素数据集。我们在菜单栏上继续Insert,选择Create Varial,创建参数。我们分别重命名为Intersect1和Intersect2.

然后我们分别在Intersect1和Intersect2上面右击,选择属性,数据类型选择Feature Set,如果数据类型选择不正确,调用服务时会报错。这里一定要注意。

之后我们分别新建两个个shap文件,作为两个要素相交的模板。Import schema and symbology from:选择你刚才新建的模板。这时候这两个参数背景就会变成蓝色。

接下来,我们知道这里的两个要素是作为参数参与GP服务计算的,也就是在程序中是动态给予的,而不是死的,所以我们还需要右击,选择Model Parameter,这样我们会发现,在Intersect1和Intersect2旁边会出现一个P,这个就是动态参数的意思。


然后我们用连接工具将Intersect1和Intersect2连接到Intersect工具上,作为参数,连接后有一个提示,我们选择Input feature.之后我们重命名输出参数为Output,同样,输出参数也是动态参数,我们也要选择Model Parameter,让P显示出来。

   然后我们点击Run,来验证模型的正确。如果没有报错,等于模型通过了验证,这个时候我们保存模型。保存好之后,我们在模型上右击选择Debug,来测试模型,两个输入参数我们可以选择事先画好的两个面,并且给予相应属性,测试成功后,我们在Geoprocessing里面的result中右击选择共享到服务。

最后我们在客户端调用服务,这里以flex为例:这里注意输入的参数要保持和模型中参数的名字一样:Intersect1和Intersect2

var params:Object = {"Intersect1":featureSet,"Intersect1":drawFS};//参数      
    gp.addEventListener(GeoprocessorEvent.JOB_COMPLETE, completeCallback); 
    gp.addEventListener(FaultEvent.FAULT,onFault);
    gp.submitJob(params);  
    function completeCallback(event: GeoprocessorEvent) : void 
    { 
     var result:ArrayCollection = new ArrayCollection();
     if (event.jobInfo.jobStatus == JobInfo.STATUS_SUCCEEDED)
     {
      gp.getResultData(event.jobInfo.jobId,"output",new AsyncResponder(onResult,onFault));
      function onResult(pv:ParameterValue, token:Object = null):void
      {

           pv.value 就是你的结果集featureset
       }



1 0