天天看點

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

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結果參數都隻有一個。

繼續閱讀