原文:分享一下我的部分毕设内容:基于Windows Phone平台的污染源管理应用

毕业半年,又总结了一下之前的工作,发现很多知识不复习都忘记了。最近新闻总是报道北京的空气污染,各种雾霾,各种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: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);

下图显示了按属性条件查询和按空间查询的效果图:

三、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服务的发布,可以参见之前的系列博文,欢迎关注我的博客.....您的支持是我坚持不懈的动力。

 

分享一下我的部分毕设内容:基于Windows Phone平台的污染源管理应用的更多相关文章

  1. 基于Windows 10平台的PM2.5检测器制作

    本篇文章详细讲解了如何利用SDS011激光式PM2.5传感器.HC-06蓝牙模块和Windows 10设备完成一个简单的PM2.5检测器及其应用程序的开发.该检测器使用蓝牙完成数据输出,方便设备连接, ...

  2. 编辑方法分享之如何编辑PDF文件内容

    我们现在在工作中会经常使用到PDF文件,还会有遇到需要编辑PDF文件的时候,PDF文件的编辑问题一直是个大难题.很多朋友在面对PDF文件的时候束手无策,不知道该怎么对它进行编辑.下面小编就教给大家一个 ...

  3. 内网穿透神器(ngrok)服务端部署【分享一台自己的ngrok服务器】【多平台】

    Ngrok为何物 “ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道.ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放.”这是百度百科上给Ng ...

  4. asp.net基于windows服务实现定时发送邮件的方法

    本文实例讲述了asp.net基于windows服务实现定时发送邮件的方法.分享给大家供大家参考,具体如下: //定义组件 private System.Timers.Timer time; publi ...

  5. 基于Windows 7(本地)和CentOS7.6(云端)的Minecraft服务器(无Forge/有Forge)搭建方法

    炎炎夏日中想和小伙伴们开黑的同学可以进来看一下了,本教程教你搭建基于两个平台的Minecraft服务器,这里我以Minecraft 1.11.2版本为例给大家讲解搭建流程.其中有Forge版本可以加入 ...

  6. 基于科大讯飞AIUI平台自定义语义库的开发

    说明:我写这篇文章的主要目的是因为我在做这块的时候遇到过一些坑,也是希望后来者能少走一些弯路. 科大讯飞AIUI开放平台地址 科大讯飞AIUI开放平台后处理地址 AIUI后处理开放平台协议 1. 科大 ...

  7. Wizard Framework:一个自己开发的基于Windows Forms的向导开发框架

    最近因项目需要,我自己设计开发了一个基于Windows Forms的向导开发框架,目前我已经将其开源,并发布了一个NuGet安装包.比较囧的一件事是,当我发布了NuGet安装包以后,发现原来已经有一个 ...

  8. Metronic – 超赞!基于 Bootstrap 的响应式后台管理模板

    Metronic 是一套精美的响应式后台管理模板,基于强大的 Twitter Bootstrap 框架实现.Metronic 拥有简洁优雅的 Metro UI 风格界面,6 种颜色可选,76 个模板页 ...

  9. 在使用Kettle的集群排序中 Carte的设定——(基于Windows)

    本片文章主要是关于使用Kettle的UI界面: Spoon来实现基于集群的对数据库中的数据表数据进行排序的试验. 以及在实验过程中所要开启的Carte服务的一些配置文件的设置, 还有基于Windows ...

随机推荐

  1. 使用android SpannableStringBuilder实现图文混排,看到许多其他

    项目开发需要达到这种效果 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmFuY3lsb3ZlamF2YQ==/font/5a6L5L2T/fontsiz ...

  2. c# 在cmd中用 7z解压缩文件

    var exePath = @"C:\Program Files\7-Zip\7z.exe"; var path = @"I:\work\MusicCatcher2\Wi ...

  3. 矩阵求逆c++达到

    高斯消元法能够用来找出一个可逆矩阵的逆矩阵.设A 为一个N * N的矩阵,其逆矩阵可被两个分块矩阵表示出来.将一个N * N单位矩阵 放在A 的右手边,形成一个N * 2N的分块矩阵B = [A,I] ...

  4. mouseover与mouseenter与mousemove差额mouseout与mouseleave差额

    <1> HTML <html> <head> <title></title> </head> <body> < ...

  5. mysql语句中使用like后面的%(百分号)的问题

    问题:mysql语句中使用like后面的%(百分号) 是不是越多运行效率越慢! 总用时:0.0489秒 0.0691 0.0485 0.0467 SELECT `goods_name`, `goods ...

  6. BZOJ 2435 NOI2011 道路建设 BFS/DFS

    标题效果:给定一个树(直接将树.不要贪图生成树图!).寻找每条边权值*分差的两侧之间 BFS水必须是能 竟DFS能够住...系统堆栈可能有些不够,我们可以使用内联汇编手册中大型系统堆栈 详见代码 这个 ...

  7. 探索static——不需要能够使用该类实例?

    在一般情况下.需要使用一个上课时间.你必须先实例化类,它调用的能力.在编程过程中发现.有些类不能直接实例来使用,利用其场.法等等. 这时候.靠的就是static作用.static英文意思为" ...

  8. LAN远程重启server安全方法

    原创文章.转载请注明出处.(百度经验:http://jingyan.baidu.com/article/454316abaadc41f7a7c03a13.html) 在局域网中,管理和操作server ...

  9. EEPlat的元数据驱动的运行引擎

    EEPlat採用了元数据驱动的核心思想,因而EEPlat最重要的就是完好的元模型体系及高效灵活的解析运行引擎.EEPlat的运行引擎通过解析基于元模型的元数据,解释运行形成终于的业务系统. EEPla ...

  10. java 它 引用(基本类型的包装,构造函数和析构函数c++不同)

      一个:java 和c++参考控制 他提到引用,我们会想到java它不喜欢c++里面的指针.当然java内引用和c++里面的引用是不同的. 比如: 比方C++中,我对某一个函数的声明.int a(i ...