ArcGIS 10.1 讓GP服務變得更簡單

        我們知道ArcGIS 以強大的空間分析而獲得GISER的口碑(不僅僅如此),在桌面軟件中已經有了800多個空間分析工具,並且這些空間分析工具可以根據我們的業務需要而組合使用,使得我們在工作中能夠流程化的處理問題,爲我們的工作帶來了方便。

      ArcGIS Server作爲一個企業級的GIS平臺,能夠將我們的GIS資源作爲服務發佈出去,供客戶端使用,在ArcGIS Server中有一種服務類型我們稱之爲地處理服務或者GP服務,該服務簡單的說就是可以在Web端使用ArcGIS 提供的空間分析,而這些分析的能力是和桌面中的一樣的。使用GP可以讓我們用很少的代碼就可以完成一個複雜的操作。

 

    在Web使用這些GP工具和桌面端使用這些工具,在功能上是一樣的,但是在數據類型上就有限制了,比如我們在桌面端可以將要素類作爲參數,但是Web端就不行,所以在10或者之前的版本中,我們發佈的GP服務不能正常運行很多是因爲參數類型導致,在這裏我將這些參數類型對比下:

 

 

 

輸入參數數據類型

在 ArcGIS Desktop 客戶端上是否受支持?

在 ArcGIS Explorer 客戶端上是否受支持?

在 Web 應用程序客戶端上是否受支持?

要素集

記錄集

要素類

否(但可通過要素集數據類型間接支持要素類輸入。)

否(但可通過記錄集數據類型間接支持表輸入。)

柵格

標準類型(如長整型、雙精度型、布爾型、日期型和字符串型)和線性單位(如“1000 米”)

文件(如 .zip.xml 文件)

圖層(任何類型的圖層;如,要素圖層、柵格圖層和網絡分析圖層)

僅支持在結果地圖服務或源地圖文檔中找到的圖層

僅支持在結果地圖服務或源地圖文檔中找到的圖層

僅支持在結果地圖服務或源地圖文檔中找到的圖層

 

 

輸出參數:

在 ArcGIS Desktop 客戶端上是否受支持?

在 ArcGIS Explorer 客戶端上是否受支持?

在 Web 應用程序客戶端上是否受支持?

要素類

要素圖層

柵格

否;只能使用結果地圖服務顯示

否;只能使用結果地圖服務顯示

柵格圖層

地理數據集(除要素類或柵格外)

否;只能使用結果地圖服務顯示

否;只能使用結果地圖服務顯示

否;只能使用結果地圖服務顯示

否(含有表數據類型作爲輸出參數的服務不會顯示在可用任務列表中。)

標準類型(如長整型、雙精度型、布爾型、日期型和字符串型)和線性單位(如“1000 米”)

是(在結果 窗口的服務結果中查看)

是(在“任務結果”窗口中查看)

文件

        在10.1中發佈GP服務已經不能像以前那樣,建立一個模型然後右鍵share,地理處理服務的發佈將由運行成功的地理處理工具結果產生。

創建一個地理處理的模型(計算緩衝區分析),模型如下圖:

 

 

 

 

填寫模型參數,細心的讀者會發現這裏有所變化(發現了沒?):

 

模型運行結果:

填寫工具的描述信息,如果不填寫,那麼發佈服務的時候也會出錯:

發佈服務,在運行後的模型中,右鍵:

 

 

填寫一些描述信息,如下,然後發佈:

 

 

 

發佈成功後會在Manager中看到。

 

在Silverlight中使用該服務,核心代碼如下:

 

     

   private void _map_MouseClick(object sender, Map.MouseEventArgs e)
        {
            FeatureSet pFeature = new FeatureSet();

            Graphic pGraphic = new Graphic();

            pGraphic.Geometry = e.MapPoint;
            pFeature.Features.Add(pGraphic);


            pGraphicsLayer2.Graphics.Add(pGraphic);

            List<GPParameter> parameters = new List<GPParameter>();
            parameters.Add(new GPFeatureRecordSetLayer("Input_Features", e.MapPoint));
            parameters.Add(new GPDouble("Distance__value_or_field_", 1000));

            tStart2 = new TimeSpan(DateTime.Now.Ticks);
            pTask2.ExecuteAsync(parameters);

        }





 pTask2 = new Geoprocessor();
            initGP(pTask2, "http://localhost:6080/arcgis/rest/services/MyBuff/GPServer/MyBuff");





  void initGP(Geoprocessor pGpro,string pUrl)
        {

 

            pGpro.Url = pUrl;

 

            pGpro.ExecuteCompleted += new System.EventHandler<GPExecuteCompleteEventArgs>(pTask_ExecuteCompleted);

            pGpro.Failed += new System.EventHandler<TaskFailedEventArgs>(pTask_Failed);

           // pGpro.OutputSpatialReference = MyMap2.SpatialReference;
        }











  void pTask_Failed(object sender, TaskFailedEventArgs e)
        {
            return;
        }

        void pTask_ExecuteCompleted(object sender, GPExecuteCompleteEventArgs e)
        {
                           foreach (GPParameter gpParameter in e.Results.OutParameters)
                {
                    if (gpParameter is GPFeatureRecordSetLayer)
                    {
                        GPFeatureRecordSetLayer gpLayer = gpParameter as GPFeatureRecordSetLayer;
                        foreach (Graphic graphic in gpLayer.FeatureSet.Features)
                        {
                            graphic.Symbol = Layout.Resources["ResultsFillSymbol"] as Symbol;
                            pGraphicsLayer2.Graphics.Add(graphic);

                           
                        }
                    }
                }

                                  
        }








 

 

 

運行結果:

 

 

 

  總結:ArcGIS 10.1中GP的發佈方式發生了變化,但是這種變化給我們帶來了方便,我們可以將任何一個運行成功的工具進行發佈,這樣可以避免我們在輸入和輸出參數的時候發生困擾,只有GP運行成功才能發佈,這也爲我們模型的準確性做了保證。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章