ArcGIS 10.1 for Server 服务端查询统计 -ArcGIS API for Silverlight 实现

本博文编写时的软件件环境,为 

ArcGIS Server 10.1sp1 ,ArcGIS API for Silverlight 3.0,VS2010sp1

需求:我有一堆点 ,分为不同的种类,每个点都有一个value属性,我要统计某一空间范围内不同种类点的个数以及每种类型的点的value属性和。以下是数据,为10万个点分为七类。属性表如下

ArcGIS 10.1 for Server 服务端查询统计 -ArcGIS API for Silverlight 实现_第1张图片

ArcGIS 10.1 for Server 服务端查询统计 -ArcGIS API for Silverlight 实现_第2张图片


如果在10.1 之前的话,我们需要通过空间查询把所有符合条件的的要素查回来,在前端进行遍历,然后根据属性自己判断一个点要素属于哪一类的,以及计算属性值得和。代码大致如下

[csharp]   view plain copy
  1. Query query = new Query();  
  2.            query.ReturnGeometry = false;  
  3.            query.Geometry = geo;  
  4.            OutFields f = new OutFields();  
  5.            f.Add("value");  
  6.            f.Add("class");  
  7.            query.OutFields = f;  
  8.            queryTask.ExecuteCompleted += new EventHandler<QueryEventArgs>(queryTask_ExecuteCompleted);  
[html]   view plain copy
  1. _dicResults = new Dictionary<string, double>();  
  2.   
  3.             var graphics = from graphic in e.FeatureSet orderby graphic.Attributes["class"] select graphic;  
  4.             double sum = 0;  
  5.   
  6.             foreach (Graphic g in graphics)  
  7.             {  
  8.                 string key = g.Attributes["class"].ToString();  
  9.                 double value = Convert.ToInt32(g.Attributes["value"]);  
  10.   
  11.                 if (_dicResults.ContainsKey(key))  
  12.                 {  
  13.                     _dicResults[key] += value;  
  14.                 }  
  15.                 else _dicResults.Add(key, value);  
  16.   
  17.                 sum += value;  
  18.             }  

如果使用上述方式的话查询的数据过多的话,还需要修改服务器返回到前端的最大要素的个数(默认是1000),相当于求和,求数量 还容易一些,如果我计算标准差,方差的话要麻烦一些了,不过ArcGIS 10.1 for Server 在查询中支持了服务端的分组统计功能,ArcGIS API 3.0 for Silverlight 开始了支持这些新功能。直接把返回我们要得到的统计结果

看一下OMDArcGIS 10.1 for Server 服务端查询统计 -ArcGIS API for Silverlight 实现_第3张图片ArcGIS 10.1 for Server 服务端查询统计 -ArcGIS API for Silverlight 实现_第4张图片

从以上可以看出 API 与之前 不同是 查询参数增加了。其中  GroupByFieldsForStatistics  意思是以那个字段分组统计,相当于我们在SQL 语句中写的 Groupby 可以为多个字段, OutStatistics代表统计方法 比如求一组内的数据的和,最大值 最小值,平均值,数量,标准差。实现如下。跟原来的查询类似 新建立一个Querytask,初始化查询查询参数Query,执行查询 在回调函数里面处理返回结果。

[csharp]   view plain copy
  1. queryTask = new QueryTask();  
  2. Query query= new Query()  
  3. {  
  4.     GroupByFieldsForStatistics = new List<string> { "class" },  
  5.     OutStatistics = new List<OutStatistic> {   
  6.         new OutStatistic(){  
  7.             OnStatisticField = "class",  
  8.             OutStatisticFieldName = "count",  
  9.             StatisticType = StatisticType.Count  
  10.         },  
  11.         new OutStatistic(){  
  12.             OnStatisticField = "value",  
  13.             OutStatisticFieldName = "sum",  
  14.             StatisticType = StatisticType.Sum  
  15.         }   },  
  16.     Geometry=geo  
  17.                };  
  18. query.ReturnGeometry = false;  
  19. queryTask.ExecuteCompleted += new EventHandler<QueryEventArgs>(queryTask_ExecuteCompleted);  
  20. queryTask.Failed += new EventHandler<TaskFailedEventArgs>(queryTask_Failed);  
  21. queryTask.ExecuteAsync(query);  

以class 为字段进行分组同时计算 每种class的点的个数,然后计算每一类 class 要素的value之和,时传入的参数Geometry=geo 是自己绘制的查询范围,处理返回结果的函数如下

[csharp]   view plain copy
  1. void queryTask_ExecuteCompleted (object sender,QueryEventArgs e)  
  2.        {  
  3.            _dicResults = new Dictionary<stringdouble>();  
  4.   
  5.            var graphics =  e.FeatureSet ;  
  6.            double sum = 0;  
  7.            //输出的是一个表格 形式如下 三个字段  
  8.            // class  count  sum            
  9.            foreach (Graphic g in graphics)  
  10.            {  
  11.                string key = g.Attributes["class"].ToString();                  
  12.                double value = Convert.ToInt32(g.Attributes["sum"]);  
  13.                _dicResults.Add(key, value);  
  14.                sum += value;  
  15.            }  
  16.        }  
返回的是一个表 ,Graphic的集合,一条记录就是一个graphic,这个Graphic 是没有空间信息的,只是一个属性表而已。 Demo 在线体验地址 http://tm.arcgisonline.cn/2012/0914/504.html ArcGIS 10.1 for Server 服务端查询统计 -ArcGIS API for Silverlight 实现_第5张图片

你可能感兴趣的:(ArcGIS 10.1 for Server 服务端查询统计 -ArcGIS API for Silverlight 实现)