flex中的identify纠正

来源:互联网 发布:深圳大数据协会 编辑:程序博客网 时间:2024/05/01 08:16

1、发现了map的extent和spatial的重要性,没有这个话,会出现好多问题。就比如说我做的identify,在没加这个之前只有点是可以做的,线和面就不可以做,加上之后就都可以了,当然了中间identifyparametr也要设置spatial的。

2、identifytask要显示多个属性可以用以下代码设置

  var resultGraphic:Graphic=result.feature;     
   datas.push({"objectID":resultGraphic.attributes.OBJECTID,"BM":resultGraphic.attributes.BM});

正确代码如下:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:esri="http://www.esri.com/2008/ags">
 <mx:ToggleButtonBar id="toolBar"  y="10" x="33"  itemClick="itemClickHandler(event)">
    <mx:dataProvider>
     <mx:Array>
        <mx:Object icon="{point}"/>
      <mx:Object icon="{polyline}"/>
      <mx:Object icon="{polygon}"/>
    </mx:Array>
   </mx:dataProvider> 
 </mx:ToggleButtonBar>
 
    <esri:Draw id="drawTool" map="{myMap}" graphicsLayer="{myGraphicLayer}" drawEnd="drawEndHandler(event)"/>
   
 <esri:Map id="myMap" logoVisible="false" x="33" y="40" borderStyle="solid" borderThickness="3" width="1000">
   <esri:extent>
          <esri:Extent xmin="12662321.494300" ymin="4347904.020700" xmax="13341250.439500" ymax="5041318.416200">               
          <esri:SpatialReference wkid="102113"/>     
            </esri:Extent>
      </esri:extent>
  <esri:ArcGISDynamicMapServiceLayer id="myDynamicLayer" url="http://localhost/ArcGIS/rest/services/ggg/MapServer" complete="mapHandler(event)"/>
  <esri:GraphicsLayer id="myGraphicLayer" symbolFunction="{symbolFunctionHandler}"/>  
 </esri:Map>
 <mx:ComboBox id="layerList" x="500" y="10"/>
 <esri:SimpleLineSymbol id="sls" style="solid" color="#000000" width="2" alpha="1"/>
 <esri:SimpleMarkerSymbol id="sms" style="diamond" color="#000000" size="15"/>
 <esri:SimpleFillSymbol id="sfs" /> 
 <esri:IdentifyTask id="myIdentifyTask" url="http://localhost/ArcGIS/rest/services/ggg/MapServer" identifyComplete="identifyCompleteHandler(event)">
 </esri:IdentifyTask> 
 <mx:DataGrid id="datalist"  borderStyle="solid" borderThickness="3"  borderColor="#1B67D9" y="40" left="1035"/>

 <mx:Script>
  <![CDATA[
   import mx.messaging.management.Attribute;
   import com.esri.ags.tasks.IdentifyResult;
   import com.esri.ags.events.IdentifyEvent;
   import com.esri.ags.tasks.IdentifyParameters;
   import com.esri.ags.events.DrawEvent;      
   import mx.events.ItemClickEvent; 
   import com.esri.ags.geometry.Geometry;
   import com.esri.ags.symbol.Symbol;
   import com.esri.ags.Graphic;
   import com.esri.ags.layers.LayerInfo;
   import mx.controls.Alert;
     
       [Bindable]
    [Embed(source="assets/measure-point.png")]
     public var point:Class;
   
    [Bindable]
    [Embed(source="assets/measure-line.png")]
    public var polyline:Class;
   
    [Bindable]
    [Embed(source="assets/measure-poly.png")]
    public var polygon:Class;   
   
  //获取图层的名字加到combox上,在图层加载完成后执行
  private function mapHandler(event:Event):void
  {
    var layersinfo:Array;
    layersinfo=myDynamicLayer.layerInfos;
    var myLayers:Array=new Array();
    //遍历图层数组,将图层的名字和index加载
    var i:int;
    for( i=0;i<layersinfo.length;i++)
    {
        myLayers.push({label:layersinfo[i].name,data:i});//??????      
    }
    //给combox绑定数据源
    layerList.dataProvider=myLayers;   
  }
  //这个功能是当有元素添加到GraphicsLayer时进行元素显示样式的设置,
  private function symbolFunctionHandler(myGraphic:Graphic):Symbol
  {
    var result:Symbol;  
    //根据元素的类型进行显示图像的设置   
    switch(myGraphic.geometry.type)
    {
      case Geometry.MAPPOINT:
      {
        result=sms;
        break;
      }
      case  Geometry.POLYLINE:
      {
        result=sls;
        break;
      }
         case  Geometry.POLYGON:
      {
        result=sfs;
        break;
      }
    }
    return result;
  }
  //toolBar
  private function itemClickHandler(event:ItemClickEvent):void
  {
    switch(event.index)
    {
      case 0:
      {
       drawTool.activate(Draw.MAPPOINT);
       break;
      }
      case 1:
      {
       drawTool.activate(Draw.POLYLINE);
       break;
      }
      case 2:
      {
       drawTool.activate(Draw.POLYGON);
       break;
      }
    }
  } 
  //drawEnd事件
  private function  drawEndHandler(event:DrawEvent):void
  {
     //获取查询结果geometry
    var myGraphic:Graphic=event.graphic;
    var myGeometry:Geometry=event.graphic.geometry;
    var identifyPara:IdentifyParameters=new IdentifyParameters();
    //查询需要返回的Geometry
    identifyPara.returnGeometry=true;
    identifyPara.tolerance=1;
    identifyPara.width=myMap.width;
    identifyPara.height=myMap.height;
    //设置查询的geometry
    identifyPara.geometry=myGeometry;

//一定要设置的spatialReference
    identifyPara.spatialReference=myMap.spatialReference;
   
    var myLayer:Array=new Array();
  
    myLayer.push(layerList.value);
    identifyPara.layerIds=myLayer;  
  
  //  Alert.show(identifyPara.layerIds.toString());
    //查询可见图层
    identifyPara.layerOption=IdentifyParameters.LAYER_OPTION_VISIBLE;
    identifyPara.mapExtent=myMap.extent;
    //进行查询
    myIdentifyTask.execute(identifyPara);
  //  Alert.show("123");
  }
  //查询完成后执行的事件
  private function identifyCompleteHandler(event:IdentifyEvent):void
  {
  // Alert.show("456");
    var datas:Array=new Array();
    //遍历查询结果把查询到的feature添加到GraphicsLayer进行高亮显示
           //同时把查询到的元素的名称添加到datas对象数组用来DataGrid显示用
         var result:IdentifyResult;
         for each(result in event.identifyResults)
         {
            myGraphicLayer.add(result.feature);
           // datas.push({"value":result.value});
            //实现多个字段的添加
            var resultGraphic:Graphic=result.feature;    
            datas.push({"objectID":resultGraphic.attributes.OBJECTID,"BM":resultGraphic.attributes.BM});
         
         }
         //设置datalist的数据源
         datalist.dataProvider=datas;
  }
  
  ]]>
 </mx:Script>
</mx:Application>

原创粉丝点击