在前面的博文中,说到了当设置条件显示DynamicLayer子图层和FeatureLayer里的元素时,图形查询时不能自动过滤掉不显示的元素,本文就是针对这个问题,这个问题可以通过图形和条件查询一起执行的方式来实现,即对Query.Geometry赋值查询图形,而Query.Where则赋条件显示的条件字符串。
条件显示部分,以“条件显示FeatureLayer要素内容”博文问基础,这里只讨论图形过滤查询的内容。
1.创建QueryTask和Query对象
QueryTask task = new QueryTask();
task.ExecuteCompleted += new EventHandler<QueryEventArgs>(task_ExecuteCompleted);//查询成功处理事件,查询结果通过其参数获取,这里不赘述,网上教程很多
task.Failed += new EventHandler<TaskFailedEventArgs>(task_Failed);//查询失败处理事件
task.Url = "http://localhost/arcgis/rest/services/BeiJingMap/FeatureServer/1";//查询的图层
Query query = new Query();
query.SpatialRelationship = SpatialRelationship.esriSpatialRelIntersects;//查询图形和目标元素的拓扑关系,在“点查询点的实现”博文中有介绍
query.ReturnGeometry = true;
query.OutFields.Add("*");//默认输出字段为全部
query.OutSpatialReference = map1.SpatialReference;//查询结果的空间坐标系,必须设置,否则查询出错;
2.在draw_Completed事件中设置查询参数、执行查询
draw_Completed是绘制操作的结束事件,关于绘图操作可以网上教程很多,可以自己查看
selPoint = e.Geometry;//获取点击点位置
query.Geometry = e.Geometry;//查询图形
query.Where="Class='其他'";//过滤条件
task.ExecuteAsync(query);//执行查询
效果如下:
全部显示的效果
部分显示
查询整个地图范围,结果是条件显示的内容