畢業半年,又總結了一下之前的工作,發現很多知識不複習都忘記了。最近新聞總是報道北京的空氣汙染,各種霧霾,各種PM X超標,然後想到以後我們有飯吃了(俺也算是搞環境的科班出身,本科環境科學專業),然後聯絡到本科的畢業論文,剛好做的是大氣汙染相關的,於是閑來和大家分享一下,也算是對自己的之前工作的一個總結。
論文主要做的一個基於Web和Windows Phone平台的汙染預測和汙染源管理的應用,大體的功能就是根據汙染物的擴散模型,對大氣汙染的擴散,濃度分布進行類比和可視化表達,同時對排放汙染物的汙染源進行線上的管理和監測。
這裡分享一下我的Windows Phone部分的畢設內容,主要實現的就是汙染源的管理,例如汙染源資訊的增刪改查。廢話少說,下面就進入正題:
本次的主要內容大致有以下幾個部分:
1.GIS服務部分,如何搭建GIS服務環境,如發布帶有關係類的要素服務,及其注意事項
2.ArcGIS API for Windows Phone中的資料繫結,如要素資訊的顯示。
3.ArcGIS API for Windows Phone中要素資訊的管理(添加要素,刪除要素,編輯要素屬性,查詢屬性)
4.ArcGIS API for Windows Phone中如何查詢要素關聯的資料表(非要素本身)
首先看一下最終的效果:
主介面,及查詢頁面
要素資訊顯示:
點擊跟多查詢汙染來源詳細資料和排放口資訊
添加或刪除要素:
以上的內容大致就是畢設做的,其中還包括了GPS定位導航等,由於是模擬器,所以無法實現定位的功能。在此就不再多言。
一、ArcGIS API For Windows Phone 的地理要素屬性編輯
在這裡主要實現的功能是實現移動智能終端對汙染來源資料的訪問及查詢。這裡採用中國ArcGIS Online所提供的中國地圖作為本程式的底圖,並在底圖上載入汙染來源資料圖層。汙染源的資料圖層類型應為FeatureLayer,其Url地址應指向ArcGIS Server發布的FeatureService中的地理要素資源。下面範例程式碼聲明了一個FeatureLayer的圖層:
<esri:FeatureLayerID="ConverntionalSourceLayer" Url="http://qzj-pc/ArcGIS/rest/services/PollutionSourceInfo/FeatureServer/1"AutoSave="True"OutFields="*" MouseLeftButtonDown="FeatureLayer_MouseLeftButtonDown" />
在ArcGIS API for Windows Phone 中可以通過Editor組件完成要素的編輯工作。Editor編輯的對象要求是FeatureService中的要素資源。
如下所示聲明了一個Editor:
<esri:Editorx:Key="MyEditor"LayerIDs="ConverntionalSourceLayer"GeometryServiceUrl="http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer" EditCompleted="Editor_EditCompleted"/>
Editor組件包含以下編輯命令:
功能名稱 |
功能說明 |
Add |
繪製並添加一個Graphic |
CancelActive |
取消編輯功能中所有啟用的操作 |
ClearSelection |
取消選擇所有已選擇的Graphic |
DeleteSelected |
刪除一個Graphic,如果此Graphic與可編輯的FeatureLayer關聯,則該Graphic也會從地理資料庫中刪除 |
Cut |
通過一個geometry service服務剪輯某一Graphic |
EditVertices |
編輯Graphic的頂點,該功能針對多變要素的編輯 |
Reshape |
通過geometry service重新繪製某一選定的Graphic的形狀 |
Save |
儲存所有的編輯操作 |
Union |
通過geometry service串連所有選定的Graphic |
Select |
選擇一個Graphic |
Editor中的每一個命令都包含了兩個方法,一個是 CanExecute,一個是Execute方法,前一個方法用來判斷該命令是否可以執行,當確認可以執行時,便開始執行相關操作。例如對於Add命令來說,其範例程式碼如下:
if (editor.Add.CanExecute("ConventionalSource"))editor.Add.Execute("ConventionalSource");
這裡CanExecute以及Execute函數中的參數為編輯圖層中特定模版的名稱或者類型的ID值。圖5.15顯示了要素服務圖層中的Templates屬性。
其他動作類似於添加操作,不一樣的地方為函數的輸入參數不同,因此在此不再敘述。
在建立好編輯的圖層以及聲明了編輯的工具之後,下一步便是通過編輯工具對圖層的資訊進行查看和編輯。顯示了移動終端訪問地理資料庫中相關要素的過程。
這裡實現訪問和編輯的核心是GIS服務,所有的操作都是通過GIS服務來完成的,其中GIS服務包含了常用的FeatureService,GeometryService,MapService等。
說明了移動終端訪問的過程,以及Windows Phone手機上的操作介面。
在設定好Edior工具之後,本文還定義了一個ListBox的控制項,用來將汙染源的屬性綁定到ListBox的內容,這樣當修改ListBox的內容時,同時也會更改汙染源的屬性,並將更改更新到背景資料庫中,從而達到對汙染源屬性進行編輯的效果。此外結合之前的Add方法以及刪除方法,通過添加或刪除一個汙染源,那麼就可以很好的完成關於汙染來源資料編輯以及資料提交的功能。最後的如下所示:
二、ArcGIS API For Windows Phone 的地理要素屬性查詢
在本文中提供了兩種查詢方式,一種是按屬性查詢,一種是空間查詢。兩種查詢的基本原理是一致。其查詢的過程和原理與ArcGIS API for Silverlight一致。都是通過QueryTask來實現查詢的功能。
對於屬性查詢來說,是給定了查詢的屬性條件,例如我們只查詢汙染物排放量大於100kg的汙染源,那麼只需通過設定Query的where屬性即可。
query.Where="PS_PollutionQ >100";queryTask.ExecuteAsync(query);
對於空間查詢實際上是通過設定Query的Geometry屬性。首先通過一個Draw事件捕捉使用者繪製的圖形,然後將此圖形賦值給Query的Geometry,最後執行查詢,代碼如下所示:
SpatialQuery.Geometry = e.Geometry;queryTask.ExecuteAsync(SpatialQuery);
顯示了按屬性條件查詢和按空間查詢的:
三、ArcGIS API For Windows Phone 的地理要素關聯屬性工作表查詢
在關聯屬性工作表查詢中和Silverlight同樣是類似的,都是通過指定RelationshipParameter,來進行查詢,例如下面聲明的一個RelationshipParameter :
RelationshipParameter relationshipParameters = new RelationshipParameter() { //通過Source_ID欄位來查詢關聯的資料//需要注意的是用於查詢的欄位必須為Integer類型的(String類型的將查詢不到結果) ObjectIds = new int[] { Convert.ToInt32(_SelectedGraphic.Attributes["Source_ID"])}, RelationshipId = _relationshipId, OutFields = outFildes, OutSpatialReference = BaseMap.SpatialReference, ReturnGeometry=true };//UserToken指定為關聯的ID值,這樣可用來判斷查詢的結果是那一張表queryTask.ExecuteRelationshipQueryAsync(relationshipParameters,_relationshipId);
最後即可查詢關聯的資料資訊,最後的:
PS:代碼上傳了好久沒有成功,蛋疼的校園網啊,有需要代碼的可以留言....我會將代碼和測試資料發送到您的郵箱,關於GIS服務的發布,可以參見之前的系列博文,歡迎關注我的部落格.....您的支援是我堅持不懈的動力。