zoukankan      html  css  js  c++  java
  • 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结果参数都只有一个。

  • 相关阅读:
    POJ 2186 Popular Cows
    POJ 1364 King
    poj1811
    poj1404
    poj1781
    poj1386
    poj1442
    C#中调用IE打开某文档
    【观点】什么时候学习编程都不晚
    遍历DataTable内存数据的三种方法性能对比
  • 原文地址:https://www.cnblogs.com/onsummer/p/6872367.html
Copyright © 2011-2022 走看看