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

时间:2021-07-02 20:07:14

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

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

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

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

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

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

3.X中的ParameterValue

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

4.X中的ParameterValue

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

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

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

举例说明

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

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

参数列表:

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方法的返回值之一:

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

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

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

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

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

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

var paramterValue = result.results[0];

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