IdentifyTask特点:
- 支持多图层查询
- 不能指定返回字段
- 只能查询属性信息,不能查询空间信息
- 与用户存在交互过程
步骤:
- 创建IdentifyTask类
- 创建IdentifyParameters类
- 执行IdentifyTask方法execute
- 接收并显示结果
示例代码:
<?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>