Hi guys,I am working on an application that the user enters an address and then the location is displayed, then he uses a polygon draw tool to draw a polygon that display the area of the measurement. Then if he wants he can edit the graphic that was created for the polygon. However I am not sure how to recalculate the area on the graphic after he edits it. I am using a geometry service to return the measured area.Any ideas or example that could help? Thank you for any help!This is the code for the drawing : protected function drawTool_drawEndHandler(event:DrawEvent):void { // reset after finished drawing a feature myDrawTool.deactivate(); drawbutton.selected= false; var polygon:Polygon = event.graphic.geometry as Polygon; if (GeometryUtil.polygonSelfIntersecting(polygon)) { // simplify the drawn polygon // Note: As of version 2.0, GeometryService input is geometries (instead of graphics). geometryService.simplify([ polygon ]); } else { //addPolygonToMap(polygon); projectPolygon(polygon); myDrawTool.deactivate(); } } private function geometryService_simplifyCompleteHandler(event:GeometryServiceEvent):void { // Note: GeometryService returns geometries instead of graphics as of Flex API 2.0 if (event.result) { var polygon:Polygon = (event.result as Array)[0]; // we only draw one area at a time projectPolygon(polygon); } } private function projectPolygon(polygon:Polygon):void { // project to 54034 (World_Cylindrical_Equal_Area) const projectParameters:ProjectParameters = new ProjectParameters; projectParameters.geometries = [ polygon ]; projectParameters.outSpatialReference = new SpatialReference(54034); geometryService.project(projectParameters, new AsyncResponder(project_resultHandler, project_faultHandler, polygon)); } private function project_resultHandler(result:Object, token:Object = null):void { if (result) { var polygon:Geometry = (result as Array)[0]; var areasAndLengthsParameters:AreasAndLengthsParameters = new AreasAndLengthsParameters(); areasAndLengthsParameters.areaUnit = GeometryService.UNIT_ACRES; areasAndLengthsParameters.polygons = [ polygon ]; geometryService.areasAndLengths(areasAndLengthsParameters, new AsyncResponder(areasAndLengths_resultHandler, areasAndLengths_faultHandler, token)); // project to 54034 (World_Cylindrical_Equal_Area) } } private function project_faultHandler(fault:Fault, token:Object = null):void { Alert.show(fault.faultString + "\n\n" + fault.faultDetail, "project Fault " + fault.faultCode); } private function areasAndLengths_resultHandler(result:AreasAndLengthsResult, token:Object = null):void { const area:String = myNumberFormatter.format(result.areas[0]); geometryService.labelPoints([ token ], new AsyncResponder(labelPoints_resultHandler, labelPoints_faultHandler, area + " acres")); } private function areasAndLengths_faultHandler(fault:Fault, token:Object = null):void { Alert.show(fault.faultString + "\n\n" + fault.faultDetail, "areasAndLengths Fault " + fault.faultCode); } private function labelPoints_resultHandler(result:Object, token:Object = null):void { for each (var geom:Geometry in result) { var g:Graphic = new Graphic(); g.geometry = geom; var tf:TextFormat = new TextFormat(null, 16, 0x41423A); g.symbol = new TextSymbol(String(token), null, 0xFFFFFF, 1, true, 0x41423A, true, 0xD8DACC, "middle", 0, 0, 0, tf); myGraphicsLayer.add(g); } } private function labelPoints_faultHandler(fault:Fault, token:Object = null):void { Alert.show(fault.faultString + "\n\n" + fault.faultDetail, "labelPoints Fault " + fault.faultCode); } and this is for the editing: private function myMap_mapMouseDownHandler(event:MapMouseEvent):void { event.currentTarget.addEventListener(MouseEvent.MOUSE_MOVE, map_mouseMoveHandler); event.currentTarget.addEventListener(MouseEvent.MOUSE_UP, map_mouseUpHandler); } private function map_mouseMoveHandler(event:MouseEvent):void { event.currentTarget.removeEventListener(MouseEvent.MOUSE_MOVE, map_mouseMoveHandler); event.currentTarget.removeEventListener(MouseEvent.MOUSE_UP, map_mouseUpHandler); } private var graphic:Graphic; private var lastEditGraphic:Graphic; private var lastActiveEditTypes:String; private function map_mouseUpHandler(event:MouseEvent):void { event.currentTarget.removeEventListener(MouseEvent.MOUSE_MOVE, map_mouseMoveHandler); event.currentTarget.removeEventListener(MouseEvent.MOUSE_UP, map_mouseUpHandler); if (event.target is Graphic) { graphic = Graphic(event.target); if (lastEditGraphic !== graphic) { lastEditGraphic = graphic; lastActiveEditTypes = "moveRotateScale"; // make sure move and edit vertices is the 1st mode } if (graphic.geometry is Polyline || graphic.geometry is Polygon) { if (lastActiveEditTypes == "moveEditVertices") { lastActiveEditTypes = "moveRotateScale"; myEditTool.activate(EditTool.MOVE | EditTool.SCALE | EditTool.ROTATE, [ graphic ]); } else { lastActiveEditTypes = "moveEditVertices"; myEditTool.activate(EditTool.MOVE | EditTool.EDIT_VERTICES, [ graphic ]); } } else if (graphic.geometry is Extent) { myEditTool.activate(EditTool.MOVE | EditTool.SCALE, [ graphic ]); } else if (graphic.graphicsLayer == myGraphicsLayer) { myEditTool.activate(EditTool.MOVE | EditTool.EDIT_VERTICES, [ graphic ]); } } else { myEditTool.deactivate(); lastActiveEditTypes = "moveRotateScale"; // make sure move and edit vertices is the 1st mode } }