コード例 #1
0
ファイル: TowerManager.cs プロジェクト: bplindgren/IGeometry
        /// <summary>
        /// return all towers
        /// </summary>
        /// <returns></returns>
        public Towers GetTowers()
        {
            Towers            towers      = new Towers();
            IFeatureWorkspace pFWorkspace = (IFeatureWorkspace)_workspace;
            IFeatureClass     pTowerFC    = pFWorkspace.OpenFeatureClass("Towers");

            IFeatureCursor pFcursor = pTowerFC.Search(null, false);
            IFeature       pFeature = pFcursor.NextFeature();

            while (pFeature != null)
            {
                Tower tower = this.GetTower(pFeature);
                towers.Items.Add(tower);
                pFeature = pFcursor.NextFeature();
            }
            return(towers);
        }
コード例 #2
0
ファイル: TowerManager.cs プロジェクト: bplindgren/IGeometry
        /// <summary>
        /// Generate the tower coverage
        /// </summary>
        public void GenerateTowerCoverage(Towers pTowers)
        {
            IWorkspaceEdit pWorkspaceEdit;

            pWorkspaceEdit = (IWorkspaceEdit)this._workspace;
            try
            {
                IFeatureWorkspace pFWorkspace = (IFeatureWorkspace)pWorkspaceEdit;

                IFeatureClass pTowerRangeFC = pFWorkspace.OpenFeatureClass("TowerRange");

                pWorkspaceEdit.StartEditing(true);
                pWorkspaceEdit.StartEditOperation();

                //delete all ranges , we should later change that to delete only dirty towers
                IFeatureCursor pcursor       = pTowerRangeFC.Update(null, false);
                IFeature       pfeaturerange = pcursor.NextFeature();
                while (pfeaturerange != null)
                {
                    //we need to change that later
                    pfeaturerange.Delete();

                    pfeaturerange = pcursor.NextFeature();
                }

                foreach (Tower pTower in pTowers.Items)
                {
                    ITopologicalOperator pTopo = (ITopologicalOperator)pTower.TowerLocation;

                    IPolygon range3Bars      = (IPolygon)pTopo.Buffer(pTower.TowerCoverage / 3);
                    IPolygon range2BarsWhole = (IPolygon)pTopo.Buffer((pTower.TowerCoverage * 2) / 3);
                    IPolygon range1BarsWhole = (IPolygon)pTopo.Buffer(pTower.TowerCoverage);

                    ITopologicalOperator pIntTopo = (ITopologicalOperator)range2BarsWhole;

                    ITopologicalOperator pIntTopo1 = (ITopologicalOperator)range1BarsWhole;


                    IPolygon range2BarsDonut = (IPolygon)pIntTopo.SymmetricDifference(range3Bars);       //,esriGeometryDimension.esriGeometry2Dimension);
                    IPolygon range1BarsDonut = (IPolygon)pIntTopo1.SymmetricDifference(range2BarsWhole); //,esriGeometryDimension.esriGeometry2Dimension);


                    IFeature pFeature = pTowerRangeFC.CreateFeature();

                    pFeature.set_Value(pFeature.Fields.FindField("TOWERID"), "T04");
                    pFeature.set_Value(pFeature.Fields.FindField("RANGE"), 3);

                    pFeature.Shape = range3Bars;
                    pFeature.Store();


                    IFeature pFeature2Bar = pTowerRangeFC.CreateFeature();

                    pFeature2Bar.set_Value(pFeature.Fields.FindField("TOWERID"), "T04");
                    pFeature2Bar.set_Value(pFeature.Fields.FindField("RANGE"), 2);

                    pFeature2Bar.Shape = range2BarsDonut;
                    pFeature2Bar.Store();


                    IFeature pFeature1Bar = pTowerRangeFC.CreateFeature();

                    pFeature1Bar.set_Value(pFeature1Bar.Fields.FindField("TOWERID"), "T04");
                    pFeature1Bar.set_Value(pFeature1Bar.Fields.FindField("RANGE"), 1);

                    pFeature1Bar.Shape = range1BarsDonut;
                    pFeature1Bar.Store();
                }
                pWorkspaceEdit.StopEditOperation();
                pWorkspaceEdit.StopEditing(true);
            }
            catch (Exception ex)
            {
                //if anything went wrong, just roll back
                pWorkspaceEdit.AbortEditOperation();
                System.Windows.Forms.MessageBox.Show(ex.ToString());
            }
        }
コード例 #3
0
        protected override void OnClick()
        {
            try
            {
                IMxDocument pMxdoc = (IMxDocument)ArcMap.Application.Document;

                IFeatureLayer pfeaturelayer = (IFeatureLayer)pMxdoc.ActiveView.FocusMap.Layer[0];
                IDataset      pDS           = (IDataset)pfeaturelayer.FeatureClass;
                TowerManager  tm            = new TowerManager(pDS.Workspace);

                Towers towers = tm.GetTowers();
                tm.GenerateTowerCoverage(towers);
                pMxdoc.ActiveView.Refresh();
            }

            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.ToString());
            }
            //IMxDocument pMxdoc = (IMxDocument)ArcMap.Application.Document;

            //IFeatureLayer pfeaturelayer = (IFeatureLayer)pMxdoc.ActiveView.FocusMap.Layer[0];
            //IDataset pDS = (IDataset)pfeaturelayer.FeatureClass;
            //TowerManager tm = new TowerManager(pDS.Workspace);


            //Tower pTower = tm.GetTowerByID("T04");

            //// range of 100 meters
            //int towerRange = 100;
            //ITopologicalOperator pTopo = (ITopologicalOperator)pTower.TowerLocation;
            //IPolygon range3Bars = (IPolygon)pTopo.Buffer(towerRange / 3);

            //IPolygon range2BarsWhole = (IPolygon)pTopo.Buffer(towerRange * 2 / 3);
            //ITopologicalOperator pIntTopo = (ITopologicalOperator)range2BarsWhole;
            //IPolygon range2BarsDonut = (IPolygon)pIntTopo.SymmetricDifference(range3Bars);

            //IPolygon range1BarWhole = (IPolygon)pTopo.Buffer(towerRange);
            //ITopologicalOperator pIntTopo2 = (ITopologicalOperator)range1BarWhole;
            //IPolygon range1BarDonut = (IPolygon)pIntTopo2.SymmetricDifference(range2BarsWhole);

            //// Start editing session to create features
            //IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pDS.Workspace;
            //pWorkspaceEdit.StartEditing(true);
            //pWorkspaceEdit.StartEditOperation();

            //// Get feature class to edit
            //IFeatureWorkspace pFWorkspace = (IFeatureWorkspace)pWorkspaceEdit;
            //IFeatureClass pTowerRangeFC = pFWorkspace.OpenFeatureClass("TowerRange");

            //// Create range 3 bars
            //IFeature pFeature3Bar = pTowerRangeFC.CreateFeature();
            //pFeature3Bar.set_Value(pFeature3Bar.Fields.FindField("TOWERID"), "T04");
            //pFeature3Bar.set_Value(pFeature3Bar.Fields.FindField("RANGE"), 3);
            //pFeature3Bar.Shape = range3Bars;
            //pFeature3Bar.Store();

            //// Create range 2 bars
            //IFeature pFeature2Bar = pTowerRangeFC.CreateFeature();
            //pFeature2Bar.set_Value(pFeature2Bar.Fields.FindField("TOWERID"), "T04");
            //pFeature2Bar.set_Value(pFeature2Bar.Fields.FindField("RANGE"), 2);
            //pFeature2Bar.Shape = range2BarsDonut;
            //pFeature2Bar.Store();

            //// Create range 1 bar
            //IFeature pFeature1Bar = pTowerRangeFC.CreateFeature();
            //pFeature1Bar.set_Value(pFeature1Bar.Fields.FindField("TOWERID"), "T04");
            //pFeature1Bar.set_Value(pFeature1Bar.Fields.FindField("RANGE"), 1);
            //pFeature1Bar.Shape = range1BarDonut;
            //pFeature1Bar.Store();

            //// End editing session
            //pWorkspaceEdit.StopEditOperation();
            //pWorkspaceEdit.StopEditing(true);
        }