ArcGIS 10.1 for Server 服务端查询统计 -ArcGIS API for Silverlight 实现
2012-10-30 20:37
429 查看
本博文编写时的软件件环境,为
ArcGIS Server 10.1sp1 ,ArcGIS API for Silverlight 3.0,VS2010sp1
需求:我有一堆点 ,分为不同的种类,每个点都有一个value属性,我要统计某一空间范围内不同种类点的个数以及每种类型的点的value属性和。以下是数据,为10万个点分为七类。属性表如下
如果在10.1 之前的话,我们需要通过空间查询把所有符合条件的的要素查回来,在前端进行遍历,然后根据属性自己判断一个点要素属于哪一类的,以及计算属性值得和。代码大致如下
如果使用上述方式的话查询的数据过多的话,还需要修改服务器返回到前端的最大要素的个数(默认是1000),相当于求和,求数量 还容易一些,如果我计算标准差,方差的话要麻烦一些了,不过ArcGIS 10.1 for Server 在查询中支持了服务端的分组统计功能,ArcGIS API 3.0 for Silverlight 开始了支持这些新功能。直接把返回我们要得到的统计结果
看一下OMD
从以上可以看出 API 与之前 不同是 查询参数增加了。其中 GroupByFieldsForStatistics 意思是以那个字段分组统计,相当于我们在SQL 语句中写的 Groupby 可以为多个字段, OutStatistics代表统计方法 比如求一组内的数据的和,最大值 最小值,平均值,数量,标准差。实现如下。跟原来的查询类似 新建立一个Querytask,初始化查询查询参数Query,执行查询 在回调函数里面处理返回结果。
以class 为字段进行分组同时计算 每种class的点的个数,然后计算每一类 class 要素的value之和,时传入的参数Geometry=geo 是自己绘制的查询范围,处理返回结果的函数如下
ArcGIS Server 10.1sp1 ,ArcGIS API for Silverlight 3.0,VS2010sp1
需求:我有一堆点 ,分为不同的种类,每个点都有一个value属性,我要统计某一空间范围内不同种类点的个数以及每种类型的点的value属性和。以下是数据,为10万个点分为七类。属性表如下
如果在10.1 之前的话,我们需要通过空间查询把所有符合条件的的要素查回来,在前端进行遍历,然后根据属性自己判断一个点要素属于哪一类的,以及计算属性值得和。代码大致如下
Query query = new Query(); query.ReturnGeometry = false; query.Geometry = geo; OutFields f = new OutFields(); f.Add("value"); f.Add("class"); query.OutFields = f; queryTask.ExecuteCompleted += new EventHandler<QueryEventArgs>(queryTask_ExecuteCompleted);
_dicResults = new Dictionary<string, double>(); var graphics = from graphic in e.FeatureSet orderby graphic.Attributes["class"] select graphic; double sum = 0; foreach (Graphic g in graphics) { string key = g.Attributes["class"].ToString(); double value = Convert.ToInt32(g.Attributes["value"]); if (_dicResults.ContainsKey(key)) { _dicResults[key] += value; } else _dicResults.Add(key, value); sum += value; }
如果使用上述方式的话查询的数据过多的话,还需要修改服务器返回到前端的最大要素的个数(默认是1000),相当于求和,求数量 还容易一些,如果我计算标准差,方差的话要麻烦一些了,不过ArcGIS 10.1 for Server 在查询中支持了服务端的分组统计功能,ArcGIS API 3.0 for Silverlight 开始了支持这些新功能。直接把返回我们要得到的统计结果
看一下OMD
从以上可以看出 API 与之前 不同是 查询参数增加了。其中 GroupByFieldsForStatistics 意思是以那个字段分组统计,相当于我们在SQL 语句中写的 Groupby 可以为多个字段, OutStatistics代表统计方法 比如求一组内的数据的和,最大值 最小值,平均值,数量,标准差。实现如下。跟原来的查询类似 新建立一个Querytask,初始化查询查询参数Query,执行查询 在回调函数里面处理返回结果。
queryTask = new QueryTask(); Query query= new Query() { GroupByFieldsForStatistics = new List<string> { "class" }, OutStatistics = new List<OutStatistic> { new OutStatistic(){ OnStatisticField = "class", OutStatisticFieldName = "count", StatisticType = StatisticType.Count }, new OutStatistic(){ OnStatisticField = "value", OutStatisticFieldName = "sum", StatisticType = StatisticType.Sum } }, Geometry=geo }; query.ReturnGeometry = false; queryTask.ExecuteCompleted += new EventHandler<QueryEventArgs>(queryTask_ExecuteCompleted); queryTask.Failed += new EventHandler<TaskFailedEventArgs>(queryTask_Failed); queryTask.ExecuteAsync(query);
以class 为字段进行分组同时计算 每种class的点的个数,然后计算每一类 class 要素的value之和,时传入的参数Geometry=geo 是自己绘制的查询范围,处理返回结果的函数如下
void queryTask_ExecuteCompleted (object sender,QueryEventArgs e) { _dicResults = new Dictionary<string, double>(); var graphics = e.FeatureSet ; double sum = 0; //输出的是一个表格 形式如下 三个字段 // class count sum foreach (Graphic g in graphics) { string key = g.Attributes["class"].ToString(); double value = Convert.ToInt32(g.Attributes["sum"]); _dicResults.Add(key, value); sum += value; } }返回的是一个表 ,Graphic的集合,一条记录就是一个graphic,这个Graphic 是没有空间信息的,只是一个属性表而已。Demo 在线体验地址http://tm.arcgisonline.cn/2012/0914/504.html
相关文章推荐
- ArcGIS 10.1 for Server 服务端查询统计 -ArcGIS API for Silverlight 实现
- ArcGIS.Server.9.3和ArcGIS API for JavaScript实现查询定位中心的功能和FindTask功能应用(七)
- ArcGIS.Server.9.3和ArcGIS API for JavaScript实现查询定位中心的功能和FindTask功能应用(七)
- ArcGIS.Server.9.3和ArcGIS API for JavaScript实现语句查询QueryTask(八)
- ArcGIS.Server.9.3和ArcGIS API for JavaScript实现查询定位中心的功能和FindTask功能应用(七)
- ArcGIS.Server.9.3和ArcGIS API for JavaScript实现语句查询QueryTask(八)
- ArcGIS.Server.9.3和ArcGIS API for JavaScript实现语句查询QueryTask(八)
- ArcGIS.Server.9.3和ArcGIS API for Flex实现Query查询定位中心功能(七)
- ArcGIS.Server.9.3和ArcGIS API for Flex实现Query查询定位中心功能(七)
- [转]ArcGIS.Server.9.3和ArcGIS API for Flex实现Query查询定位中心功能(七)
- ArcGIS.Server.9.3和ArcGIS API for Flex实现Query查询定位中心功能(七)
- ArcGIS.Server.9.3和ArcGIS API for JavaScript实现Identify功能(六)
- ArCGIS API for Silverlight 实现闪烁标注功能
- ArcGIS API for Silverlight 实现轨迹回放
- [转]ArcGIS.Server.9.3和ArcGIS API for Flex在MapTips显示饼图数据统计(九)
- ArcGIS API for Silverlight之Web Mapping开发:根据图层属性查询、定位、高亮显示并显示标注(2)
- 使用ArcGIS API for Silverlight 进行复合多条件空间查询
- ArcGIS Api For Flex 划选查询功能的实现
- ArcGIS API for Silverlight实现地形坡度在线分析
- ArcGIS.Server.9.3和ArcGIS API for Flex实现自己的Toc控件(三)