public static IFeature FindNextStartingFeature(IGeometry RegionGeometry) { List <DistanceFeatureClass> DistFeatureList = new List <DistanceFeatureClass>(); IEnumLayer pEnumLayer = Form1.pMap.Layers; ILayer pLayer; IFeatureSelection pFeatureSelection = null; IWorkspaceFactory workspaceFactory = new ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass(); IWorkspace workspace = workspaceFactory.OpenFromFile(System.IO.Path.GetTempPath(), 0); IFeatureWorkspace featureWorkspace = (ESRI.ArcGIS.Geodatabase.IFeatureWorkspace)workspace; // Explict Cast IFeatureClass featureClass = featureWorkspace.OpenFeatureClass("Temp_ConcaveHull"); IFeatureCursor AllRegionFeatureCursor = featureClass.Search(null, false); IFeature AllRegionFeature = AllRegionFeatureCursor.NextFeature(); IGeometry AllRegionGeometry = AllRegionFeature.Shape; IPolygon polygon = (IPolygon)AllRegionGeometry; IGeometryCollection pGeomColl = (IGeometryCollection)polygon; IGeometryCollection AllRegionPolyline = new PolylineClass(); ISegmentCollection PsegPath = null; object obj = Type.Missing; for (int k = 0; k < pGeomColl.GeometryCount; k++) { PsegPath = new ESRI.ArcGIS.Geometry.PathClass(); PsegPath.AddSegmentCollection((ISegmentCollection)pGeomColl.get_Geometry(k)); AllRegionPolyline.AddGeometry((IGeometry)PsegPath, ref obj, ref obj); } IPolyline pPolyline = (IPolyline)AllRegionPolyline; //MessageBox.Show("..." + pPolyline.Length, "hi"); //polygon. for (int i = 0; i < Form1.pMap.LayerCount; i++) { pLayer = pEnumLayer.Next(); if (pLayer.Name.Equals(Form1.OperationLayer)) { IFeatureLayer pFeatureLayer = (IFeatureLayer)pLayer; pFeatureSelection = (IFeatureSelection)pFeatureLayer; } } ISpatialFilter pSpatialFilter = new SpatialFilter(); pSpatialFilter.GeometryField = "SHAPE"; pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; pSpatialFilter.WhereClause = "SpltGropus = 0"; ITopologicalOperator pTopologicalOperator = (ITopologicalOperator)RegionGeometry; IPolygon pPolygon = (IPolygon)pTopologicalOperator.Buffer(5); pSpatialFilter.Geometry = pPolygon; pFeatureSelection.SelectFeatures(pSpatialFilter, esriSelectionResultEnum.esriSelectionResultAdd, false); ISelectionSet pSelectionSet = pFeatureSelection.SelectionSet; IQueryFilter pQueryFilter = new QueryFilter(); pQueryFilter.WhereClause = "SpltGropus = 0"; ICursor pCursor; pSelectionSet.Search(pQueryFilter, false, out pCursor); IFeatureCursor pFeatureCursor = (IFeatureCursor)pCursor; IFeature pFeature = pFeatureCursor.NextFeature(); //sorting the feature according to the distance of the RerionGeometry while (pFeature != null) { IProximityOperator pProxOper = (IProximityOperator)pFeature.Shape; double distance = pProxOper.ReturnDistance(RegionGeometry); DistanceFeatureClass DistFeature = new DistanceFeatureClass(distance, pFeature); DistFeatureList.Add(DistFeature); pFeature = pFeatureCursor.NextFeature(); } DistFeatureList = DistFeatureList.OrderBy(a => a.getDistance()).ToList(); IRelationalOperator AllRegionFeatureGeom = (IRelationalOperator)pPolyline; IFeature ReturnFeature = null; for (int j = 0; j < DistFeatureList.Count; j++) { //IRelationalOperator RegionFeatureGeom = (IRelationalOperator)DistFeatureList[j].getFeature().Shape; //MessageBox.Show("..." + AllRegionFeatureGeom.Touches(DistFeatureList[j].getFeature().Shape), "hi"); if (AllRegionFeatureGeom.Touches(DistFeatureList[j].getFeature().Shape) == true) { ReturnFeature = DistFeatureList[j].getFeature(); break; } } //MessageBox.Show("..." + ReturnFeature.OID, "hi"); return(ReturnFeature); }
public static void MakeDistanceArray(IFeature InputFeature, int GruopID) { List <DistanceFeatureClass> DistFeatureList = new List <DistanceFeatureClass>(); IEnumLayer pEnumLayer = Form1.pMap.Layers; ILayer pLayer; for (int i = 0; i < Form1.pMap.LayerCount; i++) { pLayer = pEnumLayer.Next(); if (pLayer.Name.Equals(Form1.OperationLayer)) { IFeatureLayer2 pFeatureLayer = (IFeatureLayer2)pLayer; IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass; IQueryFilter pQueryFilter = new QueryFilter(); pQueryFilter.WhereClause = "SpltGropus = 0"; IFeatureCursor pFeatureCursor = pFeatureClass.Search(pQueryFilter, false); IFeature CheckFeature = pFeatureCursor.NextFeature(); while (CheckFeature != null) { IProximityOperator pProxOper = (IProximityOperator)CheckFeature.Shape; double distance = pProxOper.ReturnDistance(InputFeature.Shape); CheckFeature.set_Value(CheckFeature.Fields.FindField("Distance"), distance); CheckFeature.Store(); DistanceFeatureClass DistFeature = new DistanceFeatureClass(distance, CheckFeature); DistFeatureList.Add(DistFeature); CheckFeature = pFeatureCursor.NextFeature(); } DistFeatureList = DistFeatureList.OrderBy(a => a.getDistance()).ToList(); double formarValue = 0; double addValue = 0; for (int j = 0; j < DistFeatureList.Count; j++) { //MessageBox.Show("..." + Form1.Group.getCalculatedSplitValue() + "..." + Form1.EqualPartValue, "hi"); if (Form1.GroupIDTotalList[GruopID - 1].getCalculatedSplitValue() < Form1.EqualPartValue) { formarValue = Form1.GroupIDTotalList[GruopID - 1].getCalculatedSplitValue(); addValue = Convert.ToDouble(DistFeatureList[j].getFeature().get_Value(DistFeatureList[j].getFeature().Fields.FindField(Form1.OperationAttribute))); DistFeatureList[j].getFeature().set_Value(DistFeatureList[j].getFeature().Fields.FindField("SpltGropus"), GruopID); DistFeatureList[j].getFeature().Store(); Form1.GroupIDTotalList[GruopID - 1].setCalculatedSplitValue(formarValue + addValue); } //Form1.Group.setCalculatedSplitValue(DistFeatureList[j].getFeature().get_Value(DistFeatureList[j].getFeature().Fields.FindField("SpltGropus"))); //DistFeatureList[j].set_Value(FeatureList[j].Fields.FindField("SpltGropus"), 10); //FeatureList[j].Store(); //MessageBox.Show("..." + DistFeatureList[j].getDistance(), "hi"); } Form1.RegionFormed = Form1.RegionFormed + 1; //MessageBox.Show("..." + ((Form1.NoOfSplit - 1) == Form1.RegionFormed), "hi"); if ((Form1.NoOfSplit - 1) == Form1.RegionFormed) { IGeoFeatureLayer pGeoFetLayer = (IGeoFeatureLayer)pLayer; Symbology.DefineUniqueValueRenderer(pGeoFetLayer, "SpltGropus"); } //Creating convexhull of the generated region ??? if does not work you have to make the concave hull?? IQueryFilter RegionQueryFilter = new QueryFilter(); RegionQueryFilter.WhereClause = "SpltGropus = " + GruopID; IFeatureCursor RegionFeatureCursor = pFeatureClass.Search(RegionQueryFilter, false); Form1.RegionGeomtry = StaticMethodsClass.CreateConvexHull(RegionFeatureCursor); //IFeature dd = pFeatureClass.CreateFeature(); //dd.Shape = pPol; //dd.set_Value(dd.Fields.FindField("SpltGropus"), GruopID); //dd.Store(); //IActiveView activeView = Form1.pMap as IActiveView; //activeView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); //MessageBox.Show("...", "hi"); // //MessageBox.Show("..." , "hi"); } } }