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);
}
}