コード例 #1
0
ファイル: AutoComplete.cs プロジェクト: 605258778/GISData
        private void CreatePolygonsFromFeatures(IFeatureClass getpolygon_fc)
        {
            IDataset       dataset   = getpolygon_fc as IDataset;
            IWorkspaceEdit workspace = dataset.Workspace as IWorkspaceEdit;

            if (!workspace.IsBeingEdited())
            {
                workspace.StartEditing(true);
                if (!workspace.IsBeingEdited())
                {
                    return;
                }
                workspace.StartEditOperation();
            }
            IFeatureConstruction construction     = new FeatureConstructionClass();
            IEnumFeature         featureSelection = this.m_hookHelper.FocusMap.FeatureSelection as IEnumFeature;

            if (featureSelection.Next() != null)
            {
                construction.ConstructPolygonsFromFeatures(null, getpolygon_fc, null, false, false, featureSelection, null, 0.01, null);
            }
        }
コード例 #2
0
        /// <summary>
        /// 由小区道路生成内部地块
        /// </summary>
        /// <param name="getpolygon_fc"></param>
        /// <param name="fromline_fl"></param>
        private void createpolygonfromline(IFeatureClass getpolygon_fc, IFeatureLayer fromline_fl)
        {
            //判断getpolygon_fc是否为面
            if (getpolygon_fc.ShapeType != esriGeometryType.esriGeometryPolygon)
            {
                MessageBox.Show("目标图层不是多边形图层!");
                System.Console.WriteLine("目标图层不是多边形图层!");
                return;
            }

            //得到选择的Feature的指针
            IFeatureSelection pFeatureSelection = fromline_fl as IFeatureSelection;
            ISelectionSet     pSelectionSet     = pFeatureSelection.SelectionSet;
            ICursor           pCursor;

            pSelectionSet.Search(null, false, out pCursor);
            IFeatureCursor       pFeatureCursor       = pCursor as IFeatureCursor;
            IGeoDataset          pGeoDataset          = getpolygon_fc as IGeoDataset;
            IEnvelope            pEnvelope            = pGeoDataset.Extent;
            IInvalidArea         pInvalidArea         = new InvalidAreaClass();
            IFeatureConstruction pFeatureConstruction = new FeatureConstructionClass();
            IDataset             pDataset             = getpolygon_fc as IDataset;
            IWorkspace           pWorkspace           = pDataset.Workspace;
            IWorkspaceEdit       pWorkspaceEdit       = pWorkspace as IWorkspaceEdit;

            if (pWorkspaceEdit.IsBeingEdited() != true)
            {
                pWorkspaceEdit.StartEditing(true);
                pWorkspaceEdit.StartEditOperation();
            }
            //开始
            try
            {
                pFeatureConstruction.ConstructPolygonsFromFeaturesFromCursor(null, getpolygon_fc, pEnvelope, true, false, pFeatureCursor, pInvalidArea, -1, null);
                pWorkspaceEdit.StopEditOperation();
                pWorkspaceEdit.StopEditing(true);
            }
            catch
            {
                MessageBox.Show("构造多边形失败!");
                System.Console.WriteLine("构造多边形失败!");
                pWorkspaceEdit.AbortEditOperation();
            }

            //获取FeatureClass
            IWorkspace   editedWorkspace    = pWorkspaceEdit as IWorkspace;
            IEnumDataset FeatureEnumDataset = editedWorkspace.get_Datasets(esriDatasetType.esriDTFeatureClass);

            if (FeatureEnumDataset == null)
            {
                return;
            }
            FeatureEnumDataset.Reset();
            IDataset      editedDataset = FeatureEnumDataset.Next();
            IFeatureClass pFC           = editedDataset as IFeatureClass;

            //错误写法
            //IFeatureWorkspace pFeatureWorkspace = pWorkspaceEdit as IFeatureWorkspace;
            //IFeatureDataset pFeatureDataset = pFeatureWorkspace as IFeatureDataset;
            //IFeatureClass pFC = pFeatureDataset as IFeatureClass;

            //将生成面元素显示在图层中
            IFeatureLayer pFLayer = new FeatureLayerClass();

            pFLayer.FeatureClass = pFC;
            pFLayer.Name         = pFC.AliasName;//保存为“生成地块.shp”
            ILayer pLayer = pFLayer as ILayer;

            Form1.mainForm.axMapControl1.Map.AddLayer(pLayer);
            Form1.mainForm.axMapControl1.ActiveView.Refresh();
        }
コード例 #3
0
ファイル: AutoComplete.cs プロジェクト: 605258778/GISData
 public void OnDblClick()
 {
     Editor.UniqueInstance.CheckOverlap = false;
     try
     {
         IFeatureLayer targetLayer = Editor.UniqueInstance.TargetLayer;
         object        missing     = Type.Missing;
         if (!this.m_IsUsed || (this.m_LineFeedback == null))
         {
             return;
         }
         if (this.m_Step > 1)
         {
             IPolyline polyline = this.m_LineFeedback.Stop();
             if (polyline == null)
             {
                 this.Init();
                 return;
             }
             IFeatureClass featureClass = targetLayer.FeatureClass;
             if (featureClass == null)
             {
                 this.Init();
                 return;
             }
             IGeoDataset dataset = featureClass as IGeoDataset;
             if (polyline.SpatialReference != dataset.SpatialReference)
             {
                 polyline.Project(dataset.SpatialReference);
                 polyline.SpatialReference = dataset.SpatialReference;
             }
             IGeometry        inGeometry = polyline;
             GeometryBagClass lineSrc    = new GeometryBagClass();
             lineSrc.AddGeometry(inGeometry, ref missing, ref missing);
             targetLayer.Selectable = true;
             IDataset             dataset2           = featureClass as IDataset;
             IWorkspace           selectionWorkspace = dataset2.Workspace;
             IEnvelope            extent             = dataset.Extent;
             IInvalidArea         invalidArea        = new InvalidAreaClass();
             IFeatureConstruction construction       = new FeatureConstructionClass();
             IFeatureSelection    selection          = targetLayer as IFeatureSelection;
             ISelectionSet        selectionSet       = selection.SelectionSet;
             Editor.UniqueInstance.SetArea = false;
             Editor.UniqueInstance.StartEditOperation();
             ISpatialReferenceTolerance spatialReference = (ISpatialReferenceTolerance)dataset.SpatialReference;
             construction.AutoCompleteFromGeometries(featureClass, extent, lineSrc, invalidArea, spatialReference.XYTolerance, selectionWorkspace, out selectionSet);
             if ((selectionSet == null) || (selectionSet.Count < 1))
             {
                 Editor.UniqueInstance.AbortEditOperation();
             }
             else
             {
                 List <IFeature> pFeatureList = new List <IFeature>();
                 IEnumIDs        iDs          = selectionSet.IDs;
                 iDs.Reset();
                 for (int i = iDs.Next(); i >= 0; i = iDs.Next())
                 {
                     IFeature pFeature = featureClass.GetFeature(i);
                     FeatureFuncs.SetFeatureArea(pFeature);
                     pFeatureList.Add(pFeature);
                 }
                 if (selectionSet.Count == 1)
                 {
                     IFeature feature = pFeatureList[0];
                     selection.Clear();
                     selection.Add(feature);
                     AttributeManager.AttributeAddHandleClass.AttributeAdd(ref feature);
                 }
                 else
                 {
                     AttributeManager.AttributeSplitHandleClass.AttributeSplit(null, ref pFeatureList);
                 }
                 Editor.UniqueInstance.StopEditOperation("AutoComplete");
             }
             Editor.UniqueInstance.SetArea = true;
             this.m_hookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection | esriViewDrawPhase.esriViewGeography, null, this.m_hookHelper.ActiveView.Extent);
         }
     }
     catch (Exception exception)
     {
         this.mErrOpt.ErrorOperate(this.mSubSysName, "ShapeEdit.AutoComplete", "OnDblClick", exception.GetHashCode().ToString(), exception.Source, exception.Message, "", "", "");
     }
     this.Init();
     Editor.UniqueInstance.CheckOverlap = true;
 }