查询Task:查询任务
QueryTask
、``FindTask、
IdentifyTask都是继承自ESRI.ArcGIS.Client.
Tasks`- 看看就行啊,别拿来用啊!我可不负责运行的!!!
query:询问
QueryTask:是一个进行空间和属性查询的功能类
-
它可以在某个地图服务的某个
子图层
内进行查询。- 假设一个地图有底图(背景),县的一张图,市的,省的,都是叠加上去的,一层层覆盖
- 某个子图层就是县或者市这些图的某一张
-
QueryTask进行查询的地图服务并不必须加载到Map中进行显示。
- 只是查询数据,不是查了北京就会显示北京,但是可以看到数据,面积等等
-
QueryTask的执行需要两个先决条件:一个是需要查询的图层URL、一个是进行查询的过滤条件。
- URL:哪个地图的,哪个子图层。
http://xx/地图/第一个图层
. - 过滤条件:名字,坐标等等
- URL:哪个地图的,哪个子图层。
QueryTask的基本过程
- 新建一个QueryTask => 一个查询的任务:
参数url
:xx/MapServer/5 => MapServer的第5个子图层
过滤条件
:没有写后面肯定会加的 => 两个先决条件:这个肯定需要的
QueryTask queryTask = new QueryTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/5");
- Query对象:这个就是
过滤条件
了 => 条件加在这里
Query query = new Query();
- 传入空间几何范围,可以不设置 => geometry:几何
- geometry对象中有很多参数 => Extent范围, Point点, Polyline线,面等等
//你要根据一个几何图形查询(正方形),如果地图中有的话 => 如果没有,sql你学过了,你懂了,加了会怎么样
query.Geometry = geometry;
- 查询结果返回的字段,字段必须在图层中,字段的大小写可忽略
quer.OutField.Add("*");
=> select * where x=geometry; //不懂别学了好吧
query.OutFields.AddRange(new string[] { "AREANAME", "POP2000" });
- 外比巴卜
query.Where = "POP2000 > 350000";
- 任务执行 => 执行条件是query
- 返回一个fratureset => 就是返回一个你查询到的一块你指定小地图(北京)的所有数据
- 这个返回的数据不会直接显示,所以有个set,你可以自己去设置
- 比如直接add到Map地图显示,或者打印出来给别人看 => 北京1949年xx…
FeatureSet featureSet = queryTask.Execute(query);
find:发现找到
FindTask:对地图中一个或多个图层的要素进行基于属性字段值的查询
- FindTask不能进行“空间查询”。
- 就是不能用
点线面
这些几何数据查询。 - 你问我为什么 => 我TM怎么知道,他只让你用名字这些查就查喽,不然你用query查啊
- 就是不能用
- 因为FindTask可以对
多个图层
进行查询 - 所以它的url属性需要指向所查询的地图服务的REST URL,而不像QueryTask需要指定某个图层的URL。
- 就是说,你不要指定第几个图层了,因为你可以查多个,到时候,你想查哪些,就1234都加上
FindTask的基本过程
- FindTask的执行需要两个先决条件:
- URL:不同的是query是/MapServer/5 => 你是/MapServer/就可以了,后面的等会where加
- 过滤条件:你懂的,没有还查个屁
- 新建一个Findtask:
FindTask findTask = new FindTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/");
- 初始化FindParameters参数 => 跟query一样的,就是往这里面加where条件嘛,改了个名字
- find:找到 => Parameters:参数s(复数)
FindParameters findParameters = new FindParameters();
- 查找的图层 => int数组吧,逗号分开,搞就完了,县啊,市啊都加上
- 查找的字段范围 => 可能是带广的啊或者是带京的啊
- 查找的“属性值” => 北京大学10001,清华大学10002:编号啥的东西而已
findParameters.LayerIds.AddRange(new int[] { 3 }); //查找的图层
findParameters.SearchFields.AddRange(new string[] { "NAME" }); //查找的字段范围
findParameters.SearchText = FindTextBox.Text; //查找的“属性值”
- 执行 => Async:异步
findTask.ExecuteAsync(findParameters);
Identify:识别,认出
IdentifyTask:是一个在地图服务中识别要素(Feature)的功能类。
- 要素(Feature):就是已经是指定的一小块地图了 => 北京
- 通过IdentifyTask可以搜索地图层中与
输入几何形相交的要素
- 比如你哪天手贱想自己画个五角星查查看地图中有没有
- 当然毕竟是自己画的,肯定不准确啊,所以用了相交这个词,把差不多的都显示给你看
- 因为也是在
多个图层
中查询,所以URL是动态图层服务的地址。
Identify基本过程
- 我不想写了
//新建一个Identify task
IdentifyTask identifyTask = new IdentifyTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer");
//初始化 Identify parameters
IdentifyParameters identifyParameters = new IdentifyParameters();
//传递地图属性给 identify parameters => MyMap:你自己画的 => Actual:实际
identifyParameters.MapExtent = MyMap.Extent;
identifyParameters.Width = (int)MyMap.ActualWidth;
identifyParameters.Height = (int)MyMap.ActualHeight;
//异步执行
identifyTask.ExecuteAsync(identifyParameters);