畢業半年,又總結了一下以前的工做,發現不少知識不復習都忘記了。最近新聞老是報道北京的空氣污染,各類霧霾,各類PM X超標,而後想到之後咱們有飯吃了(俺也算是搞環境的科班出身,本科環境科學專業),而後聯繫到本科的畢業論文,恰好作的是大氣污染相關的,因而閒來和你們分享一下,也算是對本身的以前工做的一個總結。html
論文主要作的一個基於Web和Windows Phone平臺的污染預測和污染源管理的應用,大致的功能就是根據污染物的擴散模型,對大氣污染的擴散,濃度分佈進行模擬和可視化表達,同時對排放污染物的污染源進行在線的管理和監測。數據庫
這裏分享一下個人Windows Phone部分的畢設內容,主要實現的就是污染源的管理,例如污染源信息的增刪改查。廢話少說,下面就進入正題:函數
本次的主要內容大體有如下幾個部分:工具
1.GIS服務部分,如何搭建GIS服務環境,如發佈帶有關係類的要素服務,及其注意事項post
2.ArcGIS API for Windows Phone中的數據綁定,如要素信息的顯示。測試
3.ArcGIS API for Windows Phone中要素信息的管理(添加要素,刪除要素,編輯要素屬性,查詢屬性)url
4.ArcGIS API for Windows Phone中如何查詢要素關聯的數據表(非要素自己)spa
首先看一下最終的效果:3d
主界面,及查詢頁面rest
要素信息顯示:
點擊跟多查詢污染源詳細信息和排放口信息
添加或刪除要素:
以上的內容大體就是畢設作的,其中還包括了GPS定位導航等,因爲是模擬器,因此沒法實現定位的功能。在此就再也不多言。
1、ArcGIS API For Windows Phone 的地理要素屬性編輯
在這裏主要實現的功能是實現移動智能終端對污染源數據的訪問及查詢。這裏採用中國ArcGIS Online所提供的中國地圖做爲本程序的底圖,並在底圖上加載污染源數據圖層。污染源的數據圖層類型應爲FeatureLayer,其Url地址應指向ArcGIS Server發佈的FeatureService中的地理要素資源。下面示例代碼聲明瞭一個FeatureLayer的圖層:
<esri:FeatureLayer ID="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:Editor x: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);
下圖顯示了按屬性條件查詢和按空間查詢的效果圖:
3、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服務的發佈,能夠參見以前的系列博文,歡迎關注個人博客.....您的支持是我堅持不懈的動力。