private function showSoils(event:MouseEvent):void
{
var cutPolyInside:Polygon = new Polygon;
var cutPline:Polyline = new Polyline;
geomArr = [];
geomArr2 = [];
geomArr.push(hostComponent.graphic.geometry);
var iPoly:Polygon = hostComponent.graphic.geometry as Polygon;
// convert the polygon into polyline for cutting
cutPline = polygonToPolyline(iPoly);
cutPline.spatialReference = new SpatialReference(102003);
try
{
queryFeaturesGraphical(hostComponent.graphic.geometry);
}
catch (error:Error)
{
msgVisible = false;
Alert.show(error.message);
}
function queryFeaturesGraphical(geom:Geometry):void
{
var queryParams:Query = new Query();
queryParams.returnGeometry = true;
var queryFields:String = "*";
queryParams.outFields = queryFields.split(",");
queryParams.outSpatialReference = hostComponent.map.spatialReference;
queryParams.geometry = geom;
queryParams.spatialRelationship = "esriSpatialRelIntersects";
var url:String = "http://gis.macombgov.org/ArcGIS/rest/services/FLEX2/Feature_Natural/MapServer/9";
var queryTask:QueryTask = new QueryTask(url);
queryTask.execute(queryParams, new AsyncResponder(onResult, onFault));
}
function onResult(featureSet:FeatureSet, token:XMLList = null):void
{
try
{
for each (var graphic:Graphic in featureSet.features)
{
geomArr2.push(graphic.geometry);
}
beginCutting();
}
catch (error:Error)
{
msgVisible = false;
Alert.show(error.message);
}
}
function onFault(info:Object, token:Object = null):void
{
msgVisible = false;
Alert.show(info.toString());
}
function beginCutting():void
{
myGeometryService2.addEventListener(GeometryServiceEvent.CUT_COMPLETE, cutCompleteHandler);
myGeometryService2.cut(geomArr2,cutPline);
}
function cutCompleteHandler(event:GeometryServiceEvent):void
{
myGeometryService2.removeEventListener(GeometryServiceEvent.CUT_COMPLETE, cutCompleteHandler);
msgVisible = false;
var relationParameters:RelationParameters = new RelationParameters();
relationParameters.geometries1 = myGeometryService2.cutLastResult.geometries;
relationParameters.geometries2 = geomArr;
relationParameters.spatialRelationship = RelationParameters.SPATIAL_REL_WITHIN;
myGeometryService2.addEventListener(GeometryServiceEvent.RELATION_COMPLETE, relationCompleteHandler);
myGeometryService2.relation(relationParameters);
}
function relationCompleteHandler(event:GeometryServiceEvent):void
{
myGeometryService2.removeEventListener(GeometryServiceEvent.RELATION_COMPLETE, relationCompleteHandler);
var result:Array = event.result as Array;
// highlight the geometries within the polygon.
for each (var obj:Object in result)
{
var resultGraphic:Graphic = new Graphic(obj.geometry1);
resultGraphic.symbol = graphicSymbol2;
myGraphicsLayer.add(resultGraphic);
}
} I use a graphical query to select polygons, cut the polygons with a border polyline and then remove "cut" polgyons outside the border polyline. Now, I need the attributes on the final result. Any simple ways to do this? Or, do I need another relation?private function showSoils(event:MouseEvent):void { var cutPolyInside:Polygon = new Polygon; var cutPline:Polyline = new Polyline; geomArr = []; geomArr2 = []; geomArr.push(hostComponent.graphic.geometry); var iPoly:Polygon = hostComponent.graphic.geometry as Polygon; // convert the polygon into polyline for cutting cutPline = polygonToPolyline(iPoly); cutPline.spatialReference = new SpatialReference(102003); try { queryFeaturesGraphical(hostComponent.graphic.geometry); } catch (error:Error) { msgVisible = false; Alert.show(error.message); } function queryFeaturesGraphical(geom:Geometry):void { var queryParams:Query = new Query(); queryParams.returnGeometry = true; var queryFields:String = "*"; queryParams.outFields = queryFields.split(","); queryParams.outSpatialReference = hostComponent.map.spatialReference; queryParams.geometry = geom; queryParams.spatialRelationship = "esriSpatialRelIntersects"; var url:String = "http://gis.macombgov.org/ArcGIS/rest/services/FLEX2/Feature_Natural/MapServer/9"; var queryTask:QueryTask = new QueryTask(url); queryTask.execute(queryParams, new AsyncResponder(onResult, onFault)); } function onResult(featureSet:FeatureSet, token:XMLList = null):void { try { for each (var graphic:Graphic in featureSet.features) { geomArr2.push(graphic.geometry); } beginCutting(); } catch (error:Error) { msgVisible = false; Alert.show(error.message); } } function onFault(info:Object, token:Object = null):void { msgVisible = false; Alert.show(info.toString()); } function beginCutting():void { myGeometryService2.addEventListener(GeometryServiceEvent.CUT_COMPLETE, cutCompleteHandler); myGeometryService2.cut(geomArr2,cutPline); } function cutCompleteHandler(event:GeometryServiceEvent):void { myGeometryService2.removeEventListener(GeometryServiceEvent.CUT_COMPLETE, cutCompleteHandler); msgVisible = false; var relationParameters:RelationParameters = new RelationParameters(); relationParameters.geometries1 = myGeometryService2.cutLastResult.geometries; relationParameters.geometries2 = geomArr; relationParameters.spatialRelationship = RelationParameters.SPATIAL_REL_WITHIN; myGeometryService2.addEventListener(GeometryServiceEvent.RELATION_COMPLETE, relationCompleteHandler); myGeometryService2.relation(relationParameters); } function relationCompleteHandler(event:GeometryServiceEvent):void { myGeometryService2.removeEventListener(GeometryServiceEvent.RELATION_COMPLETE, relationCompleteHandler); var result:Array = event.result as Array; // highlight the geometries within the polygon. for each (var obj:Object in result) { var resultGraphic:Graphic = new Graphic(obj.geometry1); resultGraphic.symbol = graphicSymbol2; myGraphicsLayer.add(resultGraphic); } }