<?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>
<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: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>
Aangemelde leden kunnen berichten plaatsen, updates volgen en meer. Nieuw hier? Registreer een gratis account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.