IdentifyTask类的使用方法

本文介绍如何使用IdentifyTask进行地图查询,支持多图层查询,通过示例代码展示了创建任务、设置参数、执行查询及结果展示的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IdentifyTask特点:

  1. 支持多图层查询
  2. 不能指定返回字段
  3. 只能查询属性信息,不能查询空间信息
  4. 与用户存在交互过程

步骤:

  1. 创建IdentifyTask类
  2. 创建IdentifyParameters类
  3. 执行IdentifyTask方法execute
  4. 接收并显示结果

示例代码:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
      xmlns:s="library://ns.adobe.com/flex/spark"
      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:esri="http://www.esri.com/2008/ags">
 <fx:Script>
  <![CDATA[
   import com.esri.ags.Graphic;
   import com.esri.ags.events.IdentifyEvent;
   import com.esri.ags.events.MapMouseEvent;
   import com.esri.ags.geometry.MapPoint;
   import com.esri.ags.symbols.InfoSymbol;
   import com.esri.ags.tasks.supportClasses.IdentifyResult;
   
   import mx.rpc.AsyncResponder;

   protected function myMap_mapClickHandler(event:MapMouseEvent):void //地图MapClick事件
   {
    var point:MapPoint = event.mapPoint;//从地图Mapclick事件参数event中得到MapPoint
    var grahic:Graphic = new Graphic(point);//将点作为参数构造Graphic
    myGraphicsLayer.clear();//清除GraphicsLayer图层内容
    
    //构造IdentifyParameters参数
    myparameters.dpi = 96;//每英寸96像素,分辨率
    myparameters.height = myMap.height;//取值地图高度
    myparameters.width = myMap.width;//取值地图宽度
    myparameters.layerOption = IdentifyParameters.LAYER_OPTION_ALL;//查询所有图层
    myparameters.tolerance = 3;//容限差
    myparameters.mapExtent = myMap.extent;//取值地图的范围
    myparameters.spatialReference = myMap.spatialReference;//地图空间参考
    myparameters.geometry = grahic.geometry;//取值地图点击时点的 graphic
    myparameters.returnGeometry =true;//是否返回几何形体
    
    identifytask.execute(myparameters,new AsyncResponder(onok,onerr,point)) //执行identify的execute方法,并将point作为参数传进去
   }
   
   protected function onok(obj:Array,token:MapPoint):void //Obj定义为一个数据,因为肯能有多次点击将产生多个IdentifyResult
   {
    for each(var identifyresult:IdentifyResult in obj)//遍历obj中的IdentifyResult对象
    {
    var pointgraphic:Graphic = new Graphic(token);//将地图上点击点构造Graphic对象
    pointgraphic.attributes = identifyresult.feature.attributes;//将点复制一个identify执行后获得的feature的attribute属性
    pointgraphic.symbol = new InfoSymbol();//符号法该point,注意此处的infoSymbol对象和图片或点symbol没有区别都是一个符号
    myGraphicsLayer.add(pointgraphic);//添加
    
    var newgraphic:Graphic = identifyresult.feature; //获得identify执行后获得的feature
    myGraphicsLayer.add(newgraphic);//将获得的feature添加进graphic
    }
    

   }
   
   protected function onerr(obj:Object,token:Object):void
   {
    
   }

   

  ]]>
 </fx:Script>
 <fx:Declarations>
  <!-- Place non-visual elements (e.g., services, value objects) here -->
  <esri:IdentifyTask    id="identifytask" url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer" showBusyCursor="true" />
  <esri:IdentifyParameters id="myparameters" />
 </fx:Declarations>
 <esri:Map id="myMap" mapClick="myMap_mapClickHandler(event)">
  <esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"/>
  <esri:GraphicsLayer id="myGraphicsLayer" />
 </esri:Map>
</s:Application>

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值