Select to view content in your preferred language

Identify multiple service using infoSymbol

516
0
07-29-2012 06:58 PM
MayJeff
Deactivated User
I try to identify all layers on 2 different dynamic service to show on Infosymbol but only able to see the empty infosymbol without any attributes and infosymbol shows different time (on top of each other).  Thank you.
Here is my codes:
<?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.layers.ArcGISDynamicMapServiceLayer;
   import com.esri.ags.layers.GraphicsLayer;
   import mx.managers.CursorManager;
   import com.esri.ags.Graphic;
   import com.esri.ags.events.MapMouseEvent;
   import com.esri.ags.geometry.Geometry;
   import com.esri.ags.symbols.InfoSymbol;
   import com.esri.ags.tasks.supportClasses.IdentifyParameters;
   import com.esri.ags.tasks.supportClasses.IdentifyResult;
   import com.esri.ags.tasks.IdentifyTask;
      import com.esri.ags.events.IdentifyEvent;
   import com.esri.ags.layers.Layer;
   import mx.rpc.events.FaultEvent;
   import com.esri.ags.events.IdentifyEvent;
   [Bindable]
   private var msgVisible:Boolean = false;
  
   import mx.controls.Alert;
   import mx.rpc.AsyncResponder;
   import mx.utils.ObjectUtil;
  
   [Bindable]
   private var lastIdentifyResultGraphic:Graphic;
  
  
  
   private function ClearAll():void
   {
   myMap.infoWindow.removeEventListener("closeMe", closeMeHandler); 
   lastIdentifyResultGraphic = null;    
   clickGraphicsLayer.clear();
   }
  
   private function closeMeHandler(event:Event):void
   {
   var graphic:Graphic = event.currentTarget as Graphic;
   graphic.visible = false;
   lastIdentifyResultGraphic = null;
   }
  
   private function mapClickHandler(event:MapMouseEvent):void
   {
  
   clickGraphicsLayer.clear();
  
   var clickGraphic:Graphic = new Graphic(event.mapPoint, clickPtSym);
   clickGraphicsLayer.add(clickGraphic);
  
   var identifyParams:IdentifyParameters = new IdentifyParameters();
   identifyParams.returnGeometry = true;
   identifyParams.tolerance = 3;
   identifyParams.width = myMap.width;
   identifyParams.height = myMap.height;
   identifyParams.geometry = event.mapPoint;
   identifyParams.mapExtent = myMap.extent;
   identifyParams.spatialReference = myMap.spatialReference;
  
   identifyParams.layerOption = IdentifyParameters.LAYER_OPTION_ALL;
  
   for (var i:Number = myMap.layerIds.length -1; i >= 0; i--)
   {
   var layer:Layer = myMap.getLayer(myMap.layerIds);
   var url:String;
   if (layer)
   {
   if (layer is ArcGISDynamicMapServiceLayer)
   {
   var dynamicLayer:ArcGISDynamicMapServiceLayer = layer as ArcGISDynamicMapServiceLayer;
   identifyParams.layerOption = IdentifyParameters.LAYER_OPTION_ALL;
   url = dynamicLayer.url ;
   }
  
   if(url)
   {
   var identifyTask:IdentifyTask = new IdentifyTask(url);
   identifyTask.addEventListener(IdentifyEvent.EXECUTE_COMPLETE, myResultFunction);
   identifyTask.addEventListener(FaultEvent.FAULT, myFaultFunction);
   identifyTask.execute(identifyParams, new AsyncResponder(myResultFunction, myFaultFunction, clickGraphic));
   }
   }
   }
   }
  
   private function myResultFunction(results:Array, clickGraphic:Graphic = null):void
   {
   if (results && results.length > 0)
   {
   var myRes: String;
   var myObj: Object;
  
   for (myRes in results)
   {
   var resultGraphic:Graphic = results[myRes].feature;
   switch (resultGraphic.geometry.type)
   {
   case Geometry.MAPPOINT:
   {
   resultGraphic.symbol = smsIdentify;  // change this if need to identify points later
   break;
   }
   case Geometry.POLYLINE:
   {
   resultGraphic.symbol = smsIdentify;
   break;
   }
   case Geometry.POLYGON:
   {
   resultGraphic.symbol =  sfsIdentify;
   break;
   }
   }  // end switch statement
  
   clickGraphic.symbol = infoSymbol;
  
  
   var key:String;
   for (key in resultGraphic.attributes)
   {
   switch (key)
   {                       
   case "PARCELID":
   {
   var myPIN:String=resultGraphic.attributes[key];
   break;
   }
   case "LANDUSE_NAME":
   {
   var myLAND:String=resultGraphic.attributes[key];
   break;
   }  
   case "SILOCAL":
   {
   var mySILOCAL:String=resultGraphic.attributes[key];
   break;
   }
   case "DESCRIPTION":
   {
   var camera:String=resultGraphic.attributes[key];
   break;
   }
  
   default:
   {
   break;         
   }
  
   } 
   } 
  
   } 
  
   var parcelinfoData:Object=
   {                  
   PARCELID:myPIN,
   LANDUSE_NAME:myLAND,
   SILOCAL:mySILOCAL,
   DESCRIPTION:camera
   }
  
   clickGraphic.attributes = parcelinfoData;
   // the above is only getting the last identified feature.
   clickGraphic.addEventListener("closeMe",closeMeHandler);
  
   } 
   } 
  
  
   private function myFaultFunction(error:Object, clickGraphic:Graphic = null):void
   {
   Alert.show(String(error), "Identify Error");
   }
  
   ]]>
  </fx:Script>
  <fx:Declarations>
   <!-- start declarations for Identify-->
 
   <esri:SimpleMarkerSymbol id="clickPtSym"
          color="0xFF0000"
          size="12"
          style="x"/>
  
   <!-- Symbol for Identify Result as Polyline -->
   <esri:SimpleLineSymbol id="slsIdentify"
           width="2"
           alpha="1"
           color="0x00FF00"
           style="solid"/>
  
   <!-- Symbol for Identify Result as Point -->
   <esri:SimpleMarkerSymbol id="smsIdentify"
          color="0x00FF00"
          size="15"
          style="diamond"/>
  
   <!-- Symbol for Identify Result as Polygon -->
   <esri:SimpleFillSymbol id="sfsIdentify"/>
  
 
 
 
  <esri:InfoSymbol id="infoSymbol">
   <esri:infoRenderer>
    <fx:Component>
     <mx:VBox styleName="HBox" color="white">
      <mx:Canvas height="100%" width="100%">
       <s:Label text="Information" fontWeight="bold" fontSize="8" color="#FFFFCC" left="0" top="0"/>
       <s:Button label="X" right="0" top="0" fontSize="5" useHandCursor="true">
        <s:click>
         <![CDATA[
         dispatchEvent(new Event("closeMe",true));
         ]]>
        </s:click>
       </s:Button>
      </mx:Canvas>
      <mx:Grid id="parcelOutputGrid" width="25%">
       <mx:GridRow id="row1">
        <mx:GridItem>
         <s:Label text="Parcel ID:{data.PARCELID}"  fontSize="9"/>
        </mx:GridItem>
       </mx:GridRow>
       <mx:GridRow id="row2">
        <mx:GridItem>
         <s:Label text="Land Use:{data.LANDUSE_NAME}" fontSize="9" height="15"/>
        </mx:GridItem>
       </mx:GridRow>
       <mx:GridRow id="row3">
        <mx:GridItem>
         <s:Label text="Siren:{data.SILOCAL}" fontSize="9"/>
        </mx:GridItem>
       </mx:GridRow>
       <mx:GridRow id="row4" backgroundAlpha="0.3">
        <mx:GridItem>
         <s:Label text="Camera:{data.DESCRIPTION}" fontSize="9"/>
        </mx:GridItem>
       </mx:GridRow>
      </mx:Grid>
     </mx:VBox>
    </fx:Component>
   </esri:infoRenderer>
  </esri:InfoSymbol>
</fx:Declarations>
  <mx:Panel width="1152" height="100%">
   <mx:Button label="Clear Button" click="ClearAll()"/>
   <esri:Map id="myMap" width="1132" height="100%" mapClick="mapClickHandler(event)">
    <esri:ArcGISDynamicMapServiceLayer url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Louisville/LOJIC_LandRecords_Louisville/M..." />
    <esri:ArcGISDynamicMapServiceLayer url="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Louisville/LOJIC_PublicSafety_Louisville/..."/>
    <esri:GraphicsLayer graphicProvider="{lastIdentifyResultGraphic}"/>
    <esri:GraphicsLayer id="clickGraphicsLayer"/>       
   </esri:Map>
  </mx:Panel>

</s:Application>
Tags (2)
0 Kudos
0 Replies