ArcGIS API for JavaScript 中的数据类型【vs】GPServer的数据类型

熟悉GPServer的同学肯定知道,GPServer在10.1的ArcMap后需要执行成功一次才能发布。

发布GPServer,可以是ArcMap的工具箱的工具,也可以是自己写的模型。

不管是ArcMap的工具还是自己写的模型,肯定有许多个输入与输出的参数

ParameterValue的value属性类型(取决于ParameterValue的类型)

这些参数总有类型,那么这些参数对应ArcGIS API for JavaScript 4或者3这两个版本中,分别对应着JavaScript的什么数据类型呢?

还好这方面的资源很多,官方API中就有,其实就是ParameterValue类Value属性的帮助文档:

3.X中的ParameterValue

4.X中的ParameterValue

推荐使用3.X的表格,因为3.X的表格的GPServer参数类型与ArcGIS for Server上的参数类型名称一模一样。

上表的意思是,如果ParameterValue的类型是“Data Type”中的某一个,那么value属性的类型就是“JavaScript Type”中的某一个。

举例说明

例如,在官方的Viewshed这个Task服务中,有如下的参数:

参数列表:

Input_Observation_Point(GPFeatureRecordSetLayer类型的输入参数)

Viewshed_Distance(GPLinearUnit类型的参数)

Viewshed_Result(GPFeatureRecordSetLayer类型的输出参数)

在前端代码中,就变成了这样:

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

          var featureSet = new FeatureSet();
          //...featureSet的属性设置代码被我省略

          var vsDistance = new LinearUnit();
          //...vsDistance的属性设置代码被我省略

          var params = {
            "Input_Observation_Point": featureSet,
            "Viewshed_Distance": vsDistance
          };
          //两个输入参数就被设置成了FeatureSet类型与LinearUnit类型
          //与上表一致

          gp.execute(params).then(drawResultData);
        }
    

在drawResultData方法中,获取结果参数的代码如下:

        function drawResultData(result) {
          //从execute()方法的返回值result(本方法的参数)中获取
          //ParameterValue[]的第一个元素的value中的features
          var resultFeatures = result.results[0].value.features;

          var viewshedGraphics = resultFeatures.map(...);//处理结果

          graphicsLayer.addMany(viewshedGraphics);

          view.goTo({
            target: viewshedGraphics,
            tilt: 0
          });
        }

什么类型的ParameterValue的value属性拥有features属性呢?

没错,当value是AJS中的FeatureSet时,value的features属性才能与之对应。

这又印证了ParameterValue若为GPFeatureRecordSetLayer类型(与GPServer的参数类型一致),则其value的数据类型必为FeatureSet了。


 

多说一句,ParameterValue类的实例用在哪里?

ParameterValue类没有构造器,也就是说这个类用户不能自己实例化。

这个类的实例是GPTask(Geoprocessor的实例)execute方法的返回值之一:

execute()方法接受一个Object参数对象,返回一个Object结果对象。

其中接受的Object对象就是输入参数;

返回的Object对象如上图,其results属性就是ParameterValue[]类型。

在execute().then(回调函数)的回调函数中,回调函数的参数result就是execute()的返回值——Object对象。

我们可以这样取得results中的ParameterValue:

var paramterValue = result.results[0];

取数组的第一个元素,GPServer中返回的参数有多少个,那么这个返回的Object对象的results属性的数组就有多少个元素,一般简单的GPServer结果参数都只有一个。

posted @ 2017-05-18 11:14  四季留歌  阅读(1606)  评论(0编辑  收藏  举报