熟悉GPServer的同学肯定知道,GPServer在10.1的ArcMap后需要执行成功一次才能发布。
发布GPServer,可以是ArcMap的工具箱的工具,也可以是自己写的模型。
不管是ArcMap的工具还是自己写的模型,肯定有许多个输入与输出的参数。
ParameterValue的value属性类型(取决于ParameterValue的类型)
这些参数总有类型,那么这些参数对应ArcGIS API for JavaScript 4或者3这两个版本中,分别对应着JavaScript的什么数据类型呢?
还好这方面的资源很多,官方API中就有,其实就是ParameterValue类的Value属性的帮助文档:
推荐使用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结果参数都只有一个。