Silverlight 調用GP服務的總結
廢話少說,直接說怎么實現吧。這里我們的目標是學會使用ArcGIS Server發布GP服務,並在客戶端訪問,這里我們發布一個繪制等值線的GP服務,和一個繪制等直面的GP服務(確切的說是插值的格柵圖像)。下面就來看一下過程:
這里我把過程分為兩個階段:
第一篇是搭建GIS服務的過程。
第二篇是創建Silverlight應用,調用GP服務
第三篇是關於GP服務結果的獲取應注意問題。
第一篇: 搭建GP服務
在開始之前想說的話:以下是本人在摸索GP服務時的一點總結,因為很多人問到,所以在此小小的總結一下。由於時間倉促,所以不是很詳細,看不明白的可以留言,能解答的一定幫忙解答,如果有什么不對的也希望指出,相互學習,大家共同進步。
下面正式開始GP服務的內容:
主要從以下幾個步驟來說,
1 .准備數據,建立GP服務的文件夾結構。具體怎么做后面會講到。
2. 在MoudelBuilder中建立繪制等值線的GP模型,以及等直面的模型(插值模型)。
3. 針對於插值,由於結果是格柵圖像,因此在客戶端無法直接獲取,這里還需要制作插值服務的地圖文檔,也就是說我們需要將GP服務發布成結果地圖服務。發布GP服務的過程后面也會講到。
4. 在發布完GP服務之后,我們最好需要測試一下,看看在ArcMap中驗證是否成功。
以上是發布GP服務的簡略過程,下面詳細說明:
1. 准備數據
由於我們是想根據輸入的點要素,然后進行等值線繪制以及插值等。所以我們需要設定輸入要素的參數,比如說我們這里的點代表某一污染物的檢測點,並有一個濃度屬性,我們想根據這個濃度屬性來繪制等值線,那么我們需要在GP輸入參數中定義這個屬性,也就是說在輸入的點要素類中定義這個濃度屬性。
這里我們在ArcMap中新建一個要素類 PollutionPoints,並添加一個濃度屬性:PollutionC,該要素可以不包含任何的點,它只是提供我們GP服務輸入參數的一個模版。
首先我們建立好一個GP服務的文件夾,以及地理數據庫,用來存放我們模型數據。結構如下圖所示:

我們來建立如上PolutionPoints要輸類,右鍵Schema地理數據,選擇新建,要素類。

點擊下一步,選擇坐標系,這里我們選擇WebMecator坐標系(由於在之后Silverlight中采用的底圖是WebMecator的,因此選擇該坐標系,當然根據你自己的需要你可以選擇其他的)。

接着點擊下一步,一直到要素字段設置界面,這里我們自己添加一個字段:PolutionC,表示濃度值,類型為雙精度。

字段設置好之后點擊完成,這樣我們的輸入要輸就構建好了。
2. 在ModelBuilder中建立模型,關於建模的知識,可以參考:http://help.arcgis.com/zh-cn/arcgisdesktop/10.0/help/index.html#//002w00000001000000
以下是繪制等值線的模型:

說明:
- 這里采用的是樣條函數法進行插值,因為樣條函數可以得到比較光滑的曲線
- 這里增加了要素轉面,目的是去除沒有閉合線要素,這里得到是一圈一圈的等值線。
- 以上進行了平滑操作,經過測試發現,效果不是很明顯,當然如果你采用的是其他的插值比如克里金插值,那么還是會有效果的。
建模需要注意的問題:
a . 設定環境的工作空間,指定當前的工作空間為之前我們建立的Scratch文件夾。點擊ArcMap 地理處理——環境


b. 設置模型中每一個工具輸出參數的位置,並用 %scratchworkspace%\輸出文件名 這樣的格式。需要注意的是對於輸出結果是要素類,輸出文件名需要加上 .shp后綴 ,例如Contour.shp。

c. 設定模型參數,這里需要注意的是並不是所有的參數類型都可以作為GP服務的輸入或者輸出參數,以上模型中帶有P表示的說明是模型參數。具體可參考:
http://help.arcgis.com/zh-cn/arcgisdesktop/10.0/help/index.html#/na/002v00000004000000/
這里我么將PollutionPoints要素類作為模型參數,但是需要注意的地方是,我們需要在輸入模型參數中將其改為要素集,因為GP服務的輸入參數不支持要素類。

d. 設置需要根據那一個屬性值來插值,並進行等值線繪制。

關於等直面的模型比較簡單:

這里沒有做什么修改,最后輸出就是一個矩形的格柵圖像,如果想得到非矩形(例如和等值線一致,即橢圓形,或者和地圖一致,需要進一步操作,用掩膜工具提取即可,這里不做演示)。
GP服務的模型設置好了,我們建模就告一段落了。接下來說一下如何發布GP服務。
3. 發布GP服務
模型建立好了之后我們需要發布我們的模型,也就是GP服務。關於等值線的模型,我們右鍵點擊我們建立的繪制等值線的工具箱直接發布即可,而繪制等值面的要復雜一些,我們需要將其發布成結果地圖服務。下面來說一下如何發布結果地圖服務:
I. 和繪制等值線的過程一樣,需要建立如上的等直面模型,以及相應的文件夾結構,設置環境工作空間,以及模型參數。
II. 新建一個地圖文檔,該地圖文檔將在之后被發布。
III.運行我們的等值面模型,繪制生成柵格的數據圖像

這里我們使用一個圖層作為要素來源,也可以自己手動添加,並輸入PolutionC的值。得到柵格數據圖像。

說明:默認生成的柵格圖像是以 以分類 來顯示的,有可能得到的圖像不好看,這里我們右鍵TOC中生成右鍵新生成的柵格圖層(即運行模型得到的結果):RasterData,

點擊屬性,選擇符號系統。更改渲染的樣式,這里我們可以選擇拉伸方式,以便得到平滑漸變的渲染效果:

模型運行成功之后,我們需要手動的將繪制等值面的模型拖到TOC中,這時會自動的生成上一次運行模型時生成的結果,同樣默認生成的柵格不是很好看,需要我們自己手動設置其符號系統。
最后TOC中的面板如下所示:

提醒:這里需要注意到圖層的值,例如上述的值是 -0.115785 到66.2464,那么該工具就只能渲染該范圍內的屬性值,如果要素的濃度屬性值大於66.2464,則按照最大值的顏色渲染,同樣小於-0.115785時,則按照最小值的顏色渲染。
以上過程都成功之后,我們保存地圖文檔,接着就可以發布該地圖文檔了。
右鍵我們剛才保存的地圖文檔——發布到ArcGIS Server.接着如下圖所示:


這里會默認選中Geoprocessing.表示地圖文檔包含了一個工具圖層。點擊下一步,完成發布。這樣一個結果地圖服務就算發布完畢。
一般來說,以上過程成功之后,我么的GIS服務是不會出現什么問題的,但也有可能因為我們各自計算機的配置原因,無法使用GIS服務,所以我們最好在ArcMap中驗證一下是否成功,具體的做法是:
點擊我們工具箱——右鍵ArcToolBox——添加工具箱,接着如下圖所示,瀏覽到GIS服務器,打開之后,會發現我們剛才發布的GP服務:一個繪制等值線的工具箱,和一個繪制等直面的工具箱。


點擊打開,就會添加到我們ArcMap的工具箱中。然后就像運行我們自帶的工具箱一樣,運行即可。如果得到正確的結果,說GP服務發布成功,如果有問題,則按照以上說明需要檢查。在此不再講述。
到此為止關於GP服務的搭建過程已經完畢。
下一篇將講述如何使用Silverlight 調用這里的等值線服務和插值服務。
(版權所有,轉載請標明出處)
