flex中的identify纠正

    技术2022-05-20  52

    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>


    最新回复(0)