Solved! Go to Solution.
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:esri="http://www.esri.com/2008/ags" xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" pageTitle="Example - Using Esri Business Analyst Server API for Flex to execute a Remove Overlap task." creationComplete="startSample()"> <!-- This sample takes user-drawn trade areas and executes the Remove Overlap task to remove the overlap (cannibalization) between trade areas. <fx:Script> <![CDATA[ //---------------------------------- // Initializing //---------------------------------- /** * Initialize the polygon draw at sample creating */ private function startSample():void { _initialExtent = map.extent; lblGuide.text = "This sample demonstrates setting up multiple trade or service areas " + "and removing any overlaps between them. To begin, draw a polygon area " + "to represent the first of two sample trade area polygons."; drawToolbar.activate(DrawTool.POLYGON); } //---------------------------------- // Drawing //---------------------------------- /** * Event handler for draw completing event; * capture the graphics from draw tollbar, * add the graphics to Map and create an object * based on graphic drawn. */ private function onDrawEnd(event:DrawEvent):void { var graphic:Graphic = event.graphic; graphic.autoMoveToTop = false; map.extent = _initialExtent; tradeAreasLayer.add(graphic); // Capture the polygon geometry from the draw toolbar. if (event.graphic.geometry is Polygon) { if (!_drawSecond) { _tradeArea1 = Polygon(event.graphic.geometry); _tradeArea1.spatialReference = map.extent.spatialReference; _drawSecond = true; drawToolbar.deactivate(); drawToolbar.fillSymbol = sfs2; drawToolbar.lineSymbol = sls2; drawToolbar.activate(DrawTool.POLYGON); lblGuide.text = "Now draw your second and last sample trade area polygon. " + "In order to best view the results, " + "be sure that your second area overlaps the first."; } else { _tradeArea2 = Polygon(event.graphic.geometry); _tradeArea2.spatialReference = map.extent.spatialReference; _drawSecond = true; drawToolbar.fillSymbol = sfs2; drawToolbar.lineSymbol = sls2; drawToolbar.deactivate(); executeTask(); lblGuide.text = "Task is executing. Please wait." } } } //---------------------------------- // Executing the task //---------------------------------- /** * Executes the task. */ private function executeTask():void { if(_tradeArea1 && _tradeArea2){ //create the parameters used by this task var params : RemoveOverlapParameters = createParameters(); cursorManager.setBusyCursor(); //Get a static reference to a singleton instance of the BAServerClient class. //Instructions for how to create the BAServerClient class is provided at the top of this file. var client : BAClient = new BAServerClient; client.url = "http://MYSERVERNAME/ArcGIS/baserver/REST/services/DefaultMap/BAServer"; var task :RemoveOverlapTask = new RemoveOverlapTask(client); task.execute(params, new mx.rpc.Responder(resultHandler, faultHandler)); } else{ Alert.show("The polygon is not set."); } } /** * Creates parameters of the task. */ private function createParameters() : RemoveOverlapParameters { var params : RemoveOverlapParameters = new RemoveOverlapParameters(); params.outputSpatialReference = map.extent.spatialReference; params.overlapMethod = OverlapRemoverOverlapMethod.GRID; params.weightMethod = OverlapRemoverWeightMethod.USE_AREA; params.areaLinkField = "AREA_ID"; // features - from drawn polygon var features:Array = new Array(); var attr1:Object = { OID:1, AREA_ID:"1_1", STORE_ID:"1", RING:1, RING_DEFN:"5", AREA_DESC:"Area 1", SALES : "100", COUNT : "3"}; var feature1:Graphic = new Graphic(_tradeArea1, null, attr1); features.push(feature1); var attr2:Object = { OID:2, AREA_ID:"2_1", STORE_ID:"2", RING:1, RING_DEFN:"5", AREA_DESC:"Area 2", SALES : "300", COUNT : "5"}; var feature2:Graphic = new Graphic(_tradeArea2, null, attr2); features.push(feature2); var fs:FeatureSet = new FeatureSet(features); fs.geometryType = Geometry.POLYGON; fs.spatialReference = _tradeArea1.spatialReference; params.boundaries = new Boundaries( fs ); return params; } /** * Result handler for the successful completion of the task execution. */ private function resultHandler(event:BATaskCompletedEvent, token:Object=null):void { var taskResultOutput : TaskResultOutput = event.result; //draw the features on the map var fs : FeatureSet = taskResultOutput.recordSet; var g : Graphic = fs.features[0]; tradeAreasLayer.add(g); //if(fs){ //tradeAreasLayer.clear(); //resultLayer.clear(); // add the resulting features to map //for (var i:Number = 0; i < fs.features.length; i++) { //var g : Graphic = fs.features; // set tooltip from attributes //g.toolTip = fs.features.attributes["AREA_DESC"]; //g.autoMoveToTop = false; //tradeAreasLayer.add(g); //} //zoom to the feature extent //map.extent = // GraphicUtil.getGraphicsExtent(resultLayer.graphicProvider.source as Array).expand(1.25); //} cursorManager.removeBusyCursor(); lblGuide.text = String(taskResultOutput);//"Task complete. The trade areas with the removed overlapping areas are displayed." } /** * Generalized fault handler for an asynchronous failed task execution. */ private function faultHandler(event:FaultEvent, token:Object=null):void { var message:String = "An error occurred while executing the underlying Web Service request."; message += " Please try again later."; Alert.show(message, "Error"); cursorManager.removeBusyCursor(); lblGuide.text = "Task failed."; resultLayer.clear(); tradeAreasLayer.clear(); map.extent = _initialExtent; } ]]> </fx:Script> <fx:Declarations> <!-- Set symbol for polygon draw 1 --> <esri:SimpleLineSymbol id="sls" style="solid" color="0xFF0000" width="1" alpha="1"/> <esri:SimpleFillSymbol id="sfs" alpha="0.6" color="0xFF0000"> <esri:SimpleLineSymbol color="#F00000" width="4" alpha="1" style="solid"/> </esri:SimpleFillSymbol> <!-- Set symbol for polygon draw 2 --> <esri:SimpleLineSymbol id="sls2" style="solid" color="0x00FF00" width="1" alpha="1"/> <esri:SimpleFillSymbol id="sfs2" alpha="0.6" color="0x00FF00"> <esri:SimpleLineSymbol color="#F00000" width="4" alpha="1" style="solid"/> </esri:SimpleFillSymbol> <!-- Control to user draw --> <esri:DrawTool id="drawToolbar" map="{map}" lineSymbol="{sls}" fillSymbol="{sfs}" drawEnd="onDrawEnd(event)" /> <!-- Set renderer for Spatial Overlay output feature class --> <esri:SimpleFillSymbol id="bFill" alpha="0.5" color="0x0000FF"/> <esri:SimpleFillSymbol id="gFill" alpha="0.5" color="0x00FF00"/> <esri:SimpleFillSymbol id="rFill" alpha="0.5" color="0xFF0000"/> <esri:UniqueValueRenderer id="uniqueValueRenderer" field="STORE_ID"> <esri:UniqueValueInfo value="1" symbol="{bFill}"/> <esri:UniqueValueInfo value="2" symbol="{gFill}"/> <esri:UniqueValueInfo value="3" symbol="{rFill}"/> </esri:UniqueValueRenderer> </fx:Declarations> <s:controlBarContent> <s:Label width="100%" id="lblGuide" color="#6E6F00" fontSize="12" /> </s:controlBarContent> <!-- Map control --> <esri:Map id="map"> <esri:extent> <esri:Extent xmin="-13051515.8843363" ymin="4020082.2778777" xmax="-13030416.9436797" ymax="4043380.91587083"> <esri:SpatialReference wkid="3857"/> </esri:Extent> </esri:extent> <esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"/> <!-- Graphics Layer to draw both user input and resulting features--> <esri:GraphicsLayer id="tradeAreasLayer" renderer="{uniqueValueRenderer}"/> <esri:GraphicsLayer id="resultLayer" renderer="{uniqueValueRenderer}"/> </esri:Map> </s:Application>
<fx:Script> <![CDATA[ import com.esri.ags.FeatureSet; import com.esri.ags.Graphic; import com.esri.ags.events.DrawEvent; import com.esri.ags.geometry.Geometry; import com.esri.ags.geometry.Polygon; import com.esri.ags.utils.GraphicUtil; import com.esri.bacore.BATaskCompletedEvent; import com.esri.bacore.TaskResultOutput; import com.esri.bacore.client.BAClient; import com.esri.baserver.Boundaries; import com.esri.baserver.OverlapRemoverOverlapMethod; import com.esri.baserver.OverlapRemoverWeightMethod; import com.esri.baserver.sampleviewer.BASExampleClient; import com.esri.baserver.sampleviewer.Geofence; import com.esri.baserver.tasks.tradeareas.RemoveOverlapParameters; import com.esri.baserver.tasks.tradeareas.RemoveOverlapTask; import mx.controls.Alert; import mx.rpc.Responder; import mx.rpc.events.FaultEvent; //---------------------------------- // Internal variables //---------------------------------- // Drawn trade area polygon 1 private var _tradeArea1 : Polygon; // Drawn trade area polygon 1 private var _tradeArea2 : Polygon; // Flag to distinct first and second trade area draw. private var _drawSecond : Boolean = false; // Initial map extent. private var _initialExtent : Extent; //---------------------------------- // Initializing //----------------------------------
<?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" pageTitle="Example - Using Esri Business Analyst Server API for Flex to execute a Remove Overlap task." creationComplete="startSample()" xmlns:esri="http://www.esri.com/2008/ags"> <fx:Script> <![CDATA[ import com.esri.ags.FeatureSet; import com.esri.ags.Graphic; import com.esri.ags.events.DrawEvent; import com.esri.ags.geometry.Extent; import com.esri.ags.geometry.Geometry; import com.esri.ags.geometry.Polygon; import com.esri.ags.utils.GraphicUtil; import com.esri.bacore.BATaskCompletedEvent; import com.esri.bacore.TaskResultOutput; import com.esri.bacore.client.BAClient; import com.esri.baserver.Boundaries; import com.esri.baserver.OverlapRemoverOverlapMethod; import com.esri.baserver.OverlapRemoverWeightMethod; //import com.esri.baserver.sampleviewer.BASExampleClient; //import com.esri.baserver.sampleviewer.Geofence; import com.esri.baserver.tasks.BAServerClient; // Added import com.esri.baserver.tasks.tradeareas.RemoveOverlapParameters; import com.esri.baserver.tasks.tradeareas.RemoveOverlapTask; import mx.controls.Alert; import mx.rpc.Responder; import mx.rpc.events.FaultEvent; private var _tradeArea1 : Polygon; private var _tradeArea2 : Polygon; private var _drawSecond : Boolean = false; // Initial map extent. private var _initialExtent :Extent; /** * Initialize the polygon draw at sample creating */ private function startSample():void { _initialExtent = map.extent; lblGuide.text = "This sample demonstrates setting up multiple trade or service areas " + "and removing any overlaps between them. To begin, draw a polygon area " + "to represent the first of two sample trade area polygons."; drawToolbar.activate(DrawTool.POLYGON); } /** * Event handler for draw completing event; * capture the graphics from draw tollbar, * add the graphics to Map and create an object * based on graphic drawn. */ private function onDrawEnd(event:DrawEvent):void { var graphic:Graphic = event.graphic; graphic.autoMoveToTop = false; /* if(!Geofence.checkGeometry(graphic.geometry)) { map.extent = _initialExtent; return; } */ tradeAreasLayer.add(graphic); // Capture the polygon geometry from the draw toolbar. if (event.graphic.geometry is Polygon) { if (!_drawSecond) { _tradeArea1 = Polygon(event.graphic.geometry); _tradeArea1.spatialReference = map.extent.spatialReference; _drawSecond = true; drawToolbar.deactivate(); drawToolbar.fillSymbol = sfs2; drawToolbar.lineSymbol = sls2; drawToolbar.activate(DrawTool.POLYGON); lblGuide.text = "Now draw your second and last sample trade area polygon. " + "In order to best view the results, " + "be sure that your second area overlaps the first."; } else { _tradeArea2 = Polygon(event.graphic.geometry); _tradeArea2.spatialReference = map.extent.spatialReference; _drawSecond = true; drawToolbar.fillSymbol = sfs2; drawToolbar.lineSymbol = sls2; drawToolbar.deactivate(); executeTask(); lblGuide.text = "Task is executing. Please wait." } } } /** * Executes the task. */ private function executeTask():void { if(_tradeArea1 && _tradeArea2){ //create the parameters used by this task var params : RemoveOverlapParameters = createParameters(); cursorManager.setBusyCursor(); //Get a static reference to a singleton instance of the BAServerClient class. //Instructions for how to create the BAServerClient class is provided at the top of this file. //var client : BAClient = BASExampleClient.instance; var client :BAServerClient = new BAServerClient(); // ADDED client.url = "http://baserver.esri.com/ArcGIS/baserver/REST/services/RedlandsDemoMap/BAServer"; // ADDED var task : RemoveOverlapTask = new RemoveOverlapTask(client); task.execute(params, new mx.rpc.Responder(resultHandler, faultHandler)); } else{ Alert.show("The polygon is not set."); } } /** * Creates parameters of the task. */ private function createParameters() : RemoveOverlapParameters { var params : RemoveOverlapParameters = new RemoveOverlapParameters(); params.outputSpatialReference = map.extent.spatialReference; params.overlapMethod = OverlapRemoverOverlapMethod.GRID; params.weightMethod = OverlapRemoverWeightMethod.USE_AREA; params.areaIDField = "AREA_ID"; // features - from drawn polygon var features:Array = new Array(); var attr1:Object = { OID:1, AREA_ID:"1_1", STORE_ID:"1", RING:1, RING_DEFN:"5", AREA_DESC:"Area 1", SALES : "100", COUNT : "3"}; var feature1:Graphic = new Graphic(_tradeArea1, null, attr1); features.push(feature1); var attr2:Object = { OID:2, AREA_ID:"2_1", STORE_ID:"2", RING:1, RING_DEFN:"5", AREA_DESC:"Area 2", SALES : "300", COUNT : "5"}; var feature2:Graphic = new Graphic(_tradeArea2, null, attr2); features.push(feature2); var fs:FeatureSet = new FeatureSet(features); fs.geometryType = Geometry.POLYGON; fs.spatialReference = _tradeArea1.spatialReference; params.boundaries = new Boundaries( fs ); return params; } /** * Result handler for the successful completion of the task execution. */ private function resultHandler(event:BATaskCompletedEvent, token:Object=null):void { var taskResultOutput : TaskResultOutput = event.result; //draw the features on the map var fs : FeatureSet = taskResultOutput.recordSet; if(fs){ tradeAreasLayer.clear(); resultLayer.clear(); // add the resulting features to map for (var i:Number = 0; i < fs.features.length; i++) { var g : Graphic = fs.features; // set tooltip from attributes g.toolTip = fs.features.attributes["AREA_DESC"]; g.autoMoveToTop = false; resultLayer.add(g); } //zoom to the feature extent map.extent = GraphicUtil.getGraphicsExtent(resultLayer.graphicProvider.source as Array).expand(1.25); } cursorManager.removeBusyCursor(); lblGuide.text = "Task complete. The trade areas with the removed overlapping areas are displayed." } /** * Generalized fault handler for an asynchronous failed task execution. */ private function faultHandler(event:FaultEvent, token:Object=null):void { var message:String = "An error occurred while executing the underlying Web Service request."; message += " Please try again later."; Alert.show(message, "Error"); cursorManager.removeBusyCursor(); lblGuide.text = "Task failed."; resultLayer.clear(); tradeAreasLayer.clear(); map.extent = _initialExtent; } ]]> </fx:Script> <fx:Declarations> <!-- Set symbol for polygon draw 1 --> <esri:SimpleLineSymbol id="sls" style="solid" color="0xFF0000" width="1" alpha="1"/> <esri:SimpleFillSymbol id="sfs" alpha="0.6" color="0xFF0000"> <esri:SimpleLineSymbol color="#F00000" width="4" alpha="1" style="solid"/> </esri:SimpleFillSymbol> <!-- Set symbol for polygon draw 2 --> <esri:SimpleLineSymbol id="sls2" style="solid" color="0x00FF00" width="1" alpha="1"/> <esri:SimpleFillSymbol id="sfs2" alpha="0.6" color="0x00FF00"> <esri:SimpleLineSymbol color="#F00000" width="4" alpha="1" style="solid"/> </esri:SimpleFillSymbol> <!-- Control to user draw --> <esri:DrawTool id="drawToolbar" map="{map}" lineSymbol="{sls}" fillSymbol="{sfs}" drawEnd="onDrawEnd(event)" /> <!-- Set renderer for Spatial Overlay output feature class --> <esri:SimpleFillSymbol id="bFill" alpha="0.5" color="0x0000FF"/> <esri:SimpleFillSymbol id="gFill" alpha="0.5" color="0x00FF00"/> <esri:SimpleFillSymbol id="rFill" alpha="0.5" color="0xFF0000"/> <esri:UniqueValueRenderer id="uniqueValueRenderer" attribute="STORE_ID"> <esri:UniqueValueInfo value="1" symbol="{bFill}"/> <esri:UniqueValueInfo value="2" symbol="{gFill}"/> <esri:UniqueValueInfo value="3" symbol="{rFill}"/> </esri:UniqueValueRenderer> </fx:Declarations> <s:controlBarContent> <s:Label width="100%" id="lblGuide" color="#6E6F00" fontSize="12" /> </s:controlBarContent> <!-- Map control --> <esri:Map id="map"> <esri:extent> <esri:Extent xmin="-13051515.8843363" ymin="4020082.2778777" xmax="-13030416.9436797" ymax="4043380.91587083"> <esri:SpatialReference wkid="3857"/> </esri:Extent> </esri:extent> <esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"/> <!-- Graphics Layer to draw both user input and resulting features--> <esri:GraphicsLayer id="tradeAreasLayer" renderer="{uniqueValueRenderer}"/> <esri:GraphicsLayer id="resultLayer" renderer="{uniqueValueRenderer}"/> </esri:Map> </s:Application>