毕业半年,又总结了一下以前的工做,发现不少知识不复习都忘记了。最近新闻老是报道北京的空气污染,各类雾霾,各类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服务的发布,能够参见以前的系列博文,欢迎关注个人博客.....您的支持是我坚持不懈的动力。