Select to view content in your preferred language

Discarding outer geometries after cut

557
1
04-09-2013 11:49 AM
by Anonymous User
Not applicable
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;
                }            
                
            }                
            
Tags (2)
0 Kudos
1 Reply
by Anonymous User
Not applicable
I used a geometry service event(relation) with a spatial relationship:

relationParameters.spatialRelationship = RelationParameters.SPATIAL_REL_WITHIN;
0 Kudos