I have successfully cut polygons with a polyline using the geometry service cut. Now, I need to remove the cut geometries outside of the cutting polyline(was parcel boundary) - so, that I just end up with the cut pieces inside. Any ideas on how to do this? A graphical feature querytask would require a rest url. There are no unique attributes on the outside pieces. The spacial extent of the graphics would overlap. I guess I could use the center of each geometry, create a point and select using the original parcel boundary polygon/polyline. Any better ideas? thanks
private function showSoils(event:MouseEvent):void
{
event.stopImmediatePropagation();
msgVisible = true;
ViewerContainer.dispatchEvent(new AppEvent(AppEvent.PROGRAMATIC_LAYER_VISIBILITY_CHANGED, "Soils"));
var resultEvent:Polygon = new Polygon;
var cutPline:Polyline = new Polyline;
geomArr = [];
geomArr2 = [];
var graphic:Graphic = hostComponent.graphic;
geomArr.push(graphic.geometry);
var bufferParameters:BufferParameters = new BufferParameters();
bufferParameters.geometries = geomArr;
bufferParameters.unit = GeometryService.UNIT_FOOT;
bufferParameters.distances = [ .01 ];
beginBuffer();
function beginBuffer():void
{
myGeometryService.addEventListener(GeometryServiceEvent.BUFFER_COMPLETE, bufferCompleteHandler);
myGeometryService.buffer(bufferParameters);
}
function bufferCompleteHandler(event:GeometryServiceEvent):void
{
myGeometryService.removeEventListener(GeometryServiceEvent.BUFFER_COMPLETE, bufferCompleteHandler);
resultEvent = event.result[0];
// convert the polygon into polyline for cutting
cutPline = polygonToPolyline(resultEvent);
cutPline.spatialReference = new SpatialReference(102003);
try
{
var graphic:Graphic = new Graphic();
graphic.geometry = resultEvent;
queryFeaturesGraphical(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
{
msgVisible = false;
myGeometryService2.removeEventListener(GeometryServiceEvent.CUT_COMPLETE, cutCompleteHandler);
myGraphicsLayer = new GraphicsLayer();
myGraphicsLayer.symbol = graphicSymbol;
hostComponent.map.addLayer(myGraphicsLayer); // Here is where I need only the outer geometries from cutLastResult
for each (var geom:Geometry in myGeometryService2.cutLastResult.geometries)
{
var iGra:Graphic = new Graphic(geom);
iGra.symbol = graphicSymbol;
myGraphicsLayer.add(iGra);
}
}
}
function polygonToPolyline(polygon:Polygon):Polyline
{
const polyline:Polyline = new Polyline;
for each (var ring:Array in polygon.rings)
{
polyline.addPath(ring);
}
return polyline;
}
}