ArcGIS网络分析之Silverlight客户端服务区分析(三)
来源:互联网 发布:hadoop2.6 windows 编辑:程序博客网 时间:2024/05/17 06:04
下面就来说一下具体的实现过程。
服务区分析算是在Web端实现网络分析的最后一个部分,之前已经讲解了关于网络数据集的制作,网络分析服务的发布,以及最近路径,最近设施点查询,今天来讲述最后一个部分,服务区分析。
如果您已经学完了最短路径以及最近设施点的分析,那么对于服务区分析,肯定也是小菜一碟了。这里也没有什么新内容,实现的过程依然和之前的路径分析以及设施点分析类似,不同的依然是参数不同,同时这里我们同样需要发布一个服务区分析图层。
假设我们已经构建好了网络分析服务(具体的发布网络分析服务的过程在之前的博文有详细的介绍,在此不再说明),打开我们的网络分析服务的地址,地址格式还是和之前的一样。例如本文的地址为:
http://qzj-pc/ArcGIS/rest/services/NetworkAnaysisMap/NAServer/ServiceArea
之前说服务区的参数和之前的其他分析不同,那么服务区的参数又有那些呢?
在 ArcGIS Silverlight 中,最近设施分析使用RouteServiceAreaParameters作为参数,RouteServiceAreaParameters的重要属性如下:
参数名称 参数含义 Facilities表示设施点,即出发点DefaultBreaks表示默认中断值,string字符串,注意用逗号分割,例如"10,20,30"(假如时间是min)则表示搜索10分钟20分钟30分钟之内分别能够达到的区域ExcludeSourcesFromPolygons由逗号分割的字符串名称,表示分析要排除的源要素类TrimPolygonDistance表示修剪多边形的容差距离。TrimPolygonDistanceUnits表示修剪多边形的容差距离单位。SplitPolygonsAtBreaks表示从中断处(不同区域等级)拆分多边形,这样可得到不同时间内到达的区域多边形SplitLineAtBreaks表示从中断处(不同区域等级)拆分线。OverlapLines表示多个设施点生成的线是否相互覆盖OverlapPolygons表示多个设施点生成的多边形是否相互覆盖ReturnFacilities表示是否返回设施点MergeSimilarPolygonRanges表示是否合幵相似中断值(等级)的多边形范围OutputPolygons表示生成的多边形类型,默认由网络图层指定TravelDirection表示路径方向,例如以设施为起点或终点为起点以上为RouteServiceAreaParameters参数的一些重要属性。下面看看代码的声明:
RouteServiceAreaParameters serviceAreaParameter = new RouteServiceAreaParameters() { //获得设施点,即出发点 Facilities = stopsGraphicsLayer.Graphics, //设置终端值,breakString为声明的字符串变量 DefaultBreaks = breakString, //设置容差 TrimPolygonDistance = 10000, //是否返回设施点(出发点) ReturnFacilities = true, SplitPolygonsAtBreaks = true, SplitLineAtBreaks = false, OverlapLines = false, OverlapPolygons = true, MergeSimilarPolygonRanges = true, OutSpatialReference = MyMap.SpatialReference, };
以上的示例代码声明了一个RouteServiceAreaParameters变量。breakString为文本框的值,其中时间单位有小时和分钟,因此在此需要判断用户选择的时间单位是小时还是分钟(默认设置和网络分析图层一致,本文是小时)。
因此这里需要做相应的转换,比如用户输入的是30分钟,那么需要将其转换为0.5小时,因此我们定义了一个breakString。示例代码如下:
string breakString = ""; if (TimeUnitcomboBox.SelectedIndex == 0) { breakString = ServiceAreaBreakTextBox.Text; } else if(TimeUnitcomboBox.SelectedIndex==1) { string[] TimeString = ServiceAreaBreakTextBox.Text.Split(','); for (int i = 0; i < TimeString.Length-1;i++ ) { breakString += (Convert.ToDouble(TimeString[i]) / 60).ToString(); breakString += ","; } breakString += (Convert.ToDouble(TimeString[TimeString.Length - 1]) / 60).ToString(); }
在完成参数的定义之后,下面我们就可以开始进行网络分析服务的查询了。当然,首先我们需要定义一个RouteTask,以及查询成功和失败的事件相应函数。这和最近设施点分析以及路径分析也是一样的:
定义RouteTask,将url指向服务区网络分析图层:
RouteTask ServiceAreaTask = new RouteTask("http://qzj-pc/ArcGIS/rest/services/NetworkAnaysisMap/NAServer/ServiceArea");//服务区Task
注册事件的响应函数:
ServiceAreaTask.SolveServiceAreaCompleted += new EventHandler<RouteEventArgs>(ServiceAreaTask_SolveServiceAreaCompleted);ServiceAreaTask.Failed += new EventHandler<TaskFailedEventArgs>(Task_Failed);
private void ServiceAreaTask_SolveServiceAreaCompleted(object sender, RouteEventArgs e) { } private void Task_Failed(object sender, TaskFailedEventArgs e) { MessageBox.Show("求解失败" + e.Error.ToString()); }
基本的准备工作都已完毕,接下来就可以通过该RouteTask来查询服务区了。
if (ServiceAreaTask.IsBusy) ServiceAreaTask.CancelAsync(); ServiceAreaTask.SolveServiceAreaAsync(serviceAreaParameter);
到这里你应该也会想到,下一步就是获取查询的结果了,如果你细心,你会发现这和之其他的分析实现过程基本一致。
那么服务区分析的结果是什么呢?
我们知道服务区是一个面,那么肯定得到的结果是面要素。但是不同的是服务区分析的结果不再是RouteResult了,直接通过事件参数e的ServiceAreaPolygons属性即可得到服务区面要素。下面来看一下代码的实现获取结果的过程:
private void ServiceAreaTask_SolveServiceAreaCompleted(object sender, RouteEventArgs e) { int i = 1; foreach (Graphic g in e.ServiceAreaPolygons) { //这里我们输入的中断值一般是3个,所以结果会有三个面要素,分别表示不同时间内能够达到的区域 switch (i) { case 1: g.Symbol = LayoutRoot.Resources["MyServiceArea1"] as SimpleFillSymbol; break; case 2: g.Symbol = LayoutRoot.Resources["MyServiceArea2"] as SimpleFillSymbol; break; case 3: g.Symbol = LayoutRoot.Resources["MyServiceArea3"] as SimpleFillSymbol; break; } i++; serviceAreaLayer.Graphics.Add(g); } }
这里的MyServiceArea1,MyServiceArea2,MyServiceArea3为在XAML中定义的面要素资源样式,参考示例代码:
<esri:SimpleFillSymbol x:Name="MyServiceArea1" Fill="Red" BorderBrush="Yellow" BorderThickness="3"/> <esri:SimpleFillSymbol x:Name="MyServiceArea2" Fill="Yellow" BorderBrush="Green" BorderThickness="3"/> <esri:SimpleFillSymbol x:Name="MyServiceArea3" Fill="Green" BorderBrush="Blue" BorderThickness="3"/>
到此,所有的工作算是结束了,如果一切顺利,那么你也会得到和本文开始给出的那张照片。
Web端的网络分析的全部功能算是讲解结束了,欢迎大家相互交流!
(版权所有,转载请标明出处)转载于http://www.cnblogs.com/potential/archive/2012/11/20/2779989.html
- ArcGIS网络分析之Silverlight客户端服务区分析(三)
- ArcGIS网络分析之Silverlight客户端服务区分析(五)-分析部分
- ArcGIS网络分析之Silverlight客户端服务区分析(五)-源码部分
- ArcGIS网络分析之Silverlight客户端服务区分析(五)
- ArcGIS网络分析之Silverlight客户端服务区分析(五)
- ArcGIS网络分析之Silverlight客户端路径分析(三)
- ArcGIS网络分析之Silverlight客户端路径分析
- ArcGIS网络分析之Silverlight客户端最近设施点分析(四)
- ArcGIS网络分析之Silverlight客户端最近设施点分析(二)
- ArcGIS的网络分析(三 )
- [ArcGIS] 空间分析(五) 网络分析
- ArcGIS.Server.9.3和ArcGIS API for Flex的GeoprocessingServices和服务区分析(十二)
- ArcGIS.Server.9.2.DotNet网络分析之最短路径分析
- ArcGIS网络分析之发布网络分析服务(二)
- ArcGIS网络分析之发布网络分析服务(二)
- ArcGIS Mobile 10开发(三)–网络分析
- ArcGIS教程:网络分析图层的类型(三)
- (五)ArcGIS Server之发布网络分析服务
- HttpURLConnection和HttpClient获取Json数据
- 微信安卓内置浏览器文本换行bug解决
- 【资料整理】CentOS5.6 升级 Python2.4.3 到 2.7.5
- linux下安装svn 解决svn: Unrecognized URL scheme
- C# 委托
- ArcGIS网络分析之Silverlight客户端服务区分析(三)
- Smack 结合 Openfire服务器,建立IM通信,发送聊天消息
- 【python项目】扩展---公交换乘
- 数据结构之排序--交换类排序
- 关于eclipse的空格上屏的问题
- mysql error 1415 not allowed to return a result set from a trigger
- C#控件的闪烁问题解决方法总结
- mipsel-linux-uclibc交叉编译libogg
- java学习笔记(一)