ArcGIS 3个查询 =>QueryTask、FindTask、IdentifyTask

查询Task:查询任务

  • QueryTask、``FindTaskIdentifyTask都是继承自ESRI.ArcGIS.Client.Tasks`
  • 看看就行啊,别拿来用啊!我可不负责运行的!!!

query:询问

QueryTask:是一个进行空间和属性查询的功能类

  • 它可以在某个地图服务的某个子图层内进行查询。

    • 假设一个地图有底图(背景),县的一张图,市的,省的,都是叠加上去的,一层层覆盖
    • 某个子图层就是县或者市这些图的某一张

    image-20210122102413611

  • QueryTask进行查询的地图服务并不必须加载到Map中进行显示。

    • 只是查询数据,不是查了北京就会显示北京,但是可以看到数据,面积等等
  • QueryTask的执行需要两个先决条件:一个是需要查询的图层URL、一个是进行查询的过滤条件。

    • URL:哪个地图的,哪个子图层。http://xx/地图/第一个图层.
    • 过滤条件:名字,坐标等等

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);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值