示例#1
0
        public static void CopyTable(ITable pSrcTable, ITable pDestTable)
        {
            Exception exception;

            try
            {
                if ((pSrcTable != null) && (pDestTable != null))
                {
                    List <int> pSrcField  = null;
                    List <int> pDestField = null;
                    CreateFieldMap(pSrcTable, pDestTable, out pSrcField, out pDestField);
                    ICursor o   = pSrcTable.Search(null, true);
                    int     num = pSrcTable.RowCount(null);
                    if (num > 0)
                    {
                        int            num2 = (num / 10) + 1;
                        IWorkspaceEdit edit = (pDestTable as IDataset).Workspace as IWorkspaceEdit;
                        edit.StartEditing(false);
                        edit.StartEditOperation();
                        IRow pSrcFea = o.NextRow();
                        int  num3    = 1;
                        while (pSrcFea != null)
                        {
                            try
                            {
                                if ((num2 >= 1000) && ((num3++ % num2) == 0))
                                {
                                    edit.StopEditOperation();
                                    edit.StopEditing(true);
                                    edit.StartEditing(false);
                                    edit.StartEditOperation();
                                }
                                IRow pDestFea = pDestTable.CreateRow();
                                CopyRow(pSrcFea, pDestFea, pSrcField, pDestField);
                                if ((pSrcFea is IFeature) && (pDestFea is IFeature))
                                {
                                    (pDestFea as IFeature).Shape = (pSrcFea as IFeature).ShapeCopy;
                                }
                                pDestFea.Store();
                            }
                            catch (Exception exception1)
                            {
                                exception = exception1;
                            }
                            pSrcFea = o.NextRow();
                            edit.StopEditOperation();
                            edit.StopEditing(true);
                        }
                        Marshal.ReleaseComObject(o);
                    }
                }
            }
            catch (Exception exception2)
            {
                exception = exception2;
            }
        }
示例#2
0
        //写历史
        private void WriteHisOfFeatureClass(IFeatureClass pCurFeatureClass, IFeatureClass pHisFeatureClass, IGeometry pGeometry)
        {
            if (pCurFeatureClass == null)
            {
                return;
            }
            if (pHisFeatureClass == null)
            {
                return;
            }
            IWorkspace pTagetWorkspace = null;

            try
            {
                pTagetWorkspace = (pHisFeatureClass as IDataset).Workspace;
            }
            catch
            { }
            IWorkspaceEdit wsEdit = pTagetWorkspace as IWorkspaceEdit;

            if (wsEdit.IsBeingEdited() == true)
            {
                wsEdit.StopEditing(true);
            }
            wsEdit.StartEditing(false);
            wsEdit.StartEditOperation();
            ISpatialFilter pFilter = new SpatialFilterClass();

            pFilter.Geometry   = pGeometry;
            pFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
            IFeatureCursor pFeaCursor = pCurFeatureClass.Search(pFilter, false);

            if (pFeaCursor != null)
            {
                Exception       err0  = null;
                System.DateTime pDate = DateTime.Today;
                NewFeatures(pHisFeatureClass, pFeaCursor, "ZZRQ", DateTime.Today.ToShortDateString() as object, true, null, out err0);

                System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeaCursor);
                pFeaCursor = null;
                if (err0 == null)
                {
                    wsEdit.StopEditOperation();
                    wsEdit.StopEditing(true);
                }
                else
                {
                    wsEdit.StopEditOperation();
                    wsEdit.StopEditing(false);
                }
            }
            else
            {
                wsEdit.StopEditOperation();
                wsEdit.StopEditing(false);
            }
        }
示例#3
0
        /// <summary>
        /// 插入新要素
        /// </summary>
        /// <param name="featureLayer">图层</param>
        /// <param name="geom">插入要素几何图形</param>
        /// <param name="ID">要素ID(绑定ID)</param>
        /// <returns></returns>
        public static bool InsertNewFeature(IFeatureLayer featureLayer, IGeometry geom, string ID)
        {
            IWorkspaceEdit workspaceEdit = null;
            IFeatureCursor featureCursor = null;

            try
            {
                IFeatureClass featureClass = featureLayer.FeatureClass;

                IDataset   dataset   = (IDataset)featureClass;
                IWorkspace workspace = dataset.Workspace;
                workspaceEdit = workspace as IWorkspaceEdit;

                workspaceEdit.StartEditing(true);
                workspaceEdit.StartEditOperation();

                IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();
                DataEditCommon.ZMValue(featureBuffer, geom);    //几何图形Z值处理
                featureBuffer.Shape = geom;

                int iFieldID = featureBuffer.Fields.FindField("ID");
                featureBuffer.Value[iFieldID] = ID.ToString();

                //开始插入要素
                featureCursor = featureClass.Insert(true);
                object featureOID = featureCursor.InsertFeature(featureBuffer);

                //保存要素
                featureCursor.Flush();

                IFeature feature = featureCursor.NextFeature();

                workspaceEdit.StopEditOperation();
                workspaceEdit.StopEditing(true);

                return(true);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

                workspaceEdit.AbortEditOperation();
                workspaceEdit.StopEditing(false);

                return(false);
            }
            finally
            {
                if (featureCursor != null)
                {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor);  //释放指针
                }
            }
        }
示例#4
0
        /// <summary>
        /// 提交当前版本(经过仲裁)
        /// </summary>
        /// <param name="pWorkspace">工作区</param>
        /// <param name="sVersion">父版本名称</param>
        public static void PostVerison(IWorkspace pWorkspace, string sVersion)
        {
            IVersion pVersion = (IVersion)pWorkspace;

            if (!IsLocked(pVersion))
            {
                throw new Exception("不能提交数据到父版本,其它用户正在编辑");
            }

            IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pVersion;

            if (!pWorkspaceEdit.IsBeingEdited())
            {
                throw new Exception("请开始编辑会话");
            }

            IVersionEdit pVersionEdit = (IVersionEdit)pVersion;
            IVersionInfo pVersionInfo = pVersion.VersionInfo;

            try
            {
                string sParentName = pVersionInfo.VersionName;
                bool   bConflicts  = pVersionEdit.Reconcile(sParentName);
                if (bConflicts)
                {
                    pWorkspaceEdit.StopEditing(true);
                }
                else
                {
                    if (pVersionEdit.CanPost())
                    {
                        pVersionEdit.Post(sParentName);
                        pWorkspaceEdit.StopEditing(true);
                    }
                    else
                    {
                        pWorkspaceEdit.StopEditing(true); // false
                        //MessageBox.Show("不能提交数据到父版本[" + sParentName + "]");
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (pWorkspaceEdit.IsBeingEdited())
                {
                    pWorkspaceEdit.StopEditing(true); // false
                }
                pWorkspaceEdit.StartEditing(true);
            }
        }
示例#5
0
 private void method_10(IWorkspaceEdit iworkspaceEdit_0, bool bool_2)
 {
     if (bool_2)
     {
         iworkspaceEdit_0.StopEditOperation();
         iworkspaceEdit_0.StopEditing(true);
     }
     else
     {
         iworkspaceEdit_0.AbortEditOperation();
         iworkspaceEdit_0.StopEditing(false);
     }
 }
示例#6
0
 /// <summary>
 /// 保存编辑
 /// </summary>
 /// <param name="save">true时保存,false时不保存</param>
 public void SaveEditing(bool save)
 {
     if (!save)
     {
         mWorkspaceEdit.StopEditing(false);
     }
     else if (save && mHasEditing && mIsEditing)
     {
         mWorkspaceEdit.StopEditing(true);
     }
     mHasEditing = false;
     mIsEditing  = false;
 }
示例#7
0
        public void DeleteTask(string taskName)
        {
            IFeatureWorkspace ws       = Util.ServerWorkspace as IFeatureWorkspace;
            ITable            task_tbl = ws.OpenTable("TaskLog");
            IQueryFilter      filter   = new QueryFilterClass();

            filter.WhereClause = "TaskName = '" + taskName + "'";
            ICursor        cur = task_tbl.Search(filter, false);
            IRow           rw  = cur.NextRow();
            IWorkspaceEdit wse = ws as IWorkspaceEdit;

            if (rw != null)
            {
                string status = rw.get_Value(task_tbl.FindField("Status")) as string;
                if (status == TaskManager.CHECKOUT_STATUS)
                {
                    wse.StartEditing(true);
                    rw.Delete();
                    wse.StopEditing(true);
                }
                else if (status == TaskManager.CHECKIN_STATUS)
                {
                    IVersionedWorkspace vw  = ws as IVersionedWorkspace;
                    IVersion            ver = vw.FindVersion(taskName);
                    ver.Delete();

                    wse.StartEditing(true);
                    rw.Delete();
                    wse.StopEditing(true);
                }
                wse.StartEditing(false);
                ITable       tgl_tbl    = ws.OpenTable("TaskGridLog");
                IQueryFilter tgl_filter = new QueryFilterClass();
                tgl_filter.WhereClause = "TaskName = '" + taskName + "'";
                tgl_tbl.DeleteSearchedRows(tgl_filter);
                wse.StopEditing(true);

                IQueryFilter checkItem_filter = new QueryFilterClass();
                checkItem_filter.WhereClause = "VersionName = '" + taskName + "'";
                wse.StartEditing(false);
                ITable checkItemPtn_fc = ws.OpenTable("CheckItemPtn");
                checkItemPtn_fc.DeleteSearchedRows(checkItem_filter);

                ITable checkItemLn_fc = ws.OpenTable("CheckItemLn");
                checkItemLn_fc.DeleteSearchedRows(checkItem_filter);

                ITable checkItemPoly_fc = ws.OpenTable("CheckItemPoly");
                checkItemPoly_fc.DeleteSearchedRows(checkItem_filter);
                wse.StopEditing(true);
            }
        }
示例#8
0
        //停止编辑
        public static void StopEditing(AxMapControl axmap, ILayer player)
        {
            m_strOperator = "";
            if (pWorkspaceEdit == null)
            {
                return;
            }
            // Check edit conditions before allowing edit to stop
            m_CurrentLayer = player;
            m_MapControl   = axmap;
            if (m_CurrentLayer == null)
            {
                return;
            }
            IFeatureLayer pFeatureLayer = (IFeatureLayer)m_CurrentLayer;

            if (pFeatureLayer.FeatureClass == null)
            {
                return;
            }
            IDataset pDataset = (IDataset)pFeatureLayer.FeatureClass;

            if (pDataset == null)
            {
                return;
            }

            // If the current document has been edited then prompt the user to save changes
            //IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;

            if (pWorkspaceEdit.IsBeingEdited())
            {
                bool bHasEdits = false;
                pWorkspaceEdit.HasEdits(ref bHasEdits);
                bool bSave = false;
                if (bHasEdits)
                {
                    DialogResult result;
                    result = MessageBoxEx.Show("你想保存你的编辑吗?", "提示!", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
                    if (DialogResult.Yes == result)
                    {
                        bSave = true;
                    }
                }
                pWorkspaceEdit.StopEditing(bSave);
            }

            m_MapControl.Map.ClearSelection();
            m_MapControl.ActiveView.Refresh();
        }
示例#9
0
        /// <summary>
        /// 根据查询语句从ITable中删除对应的记录信息
        /// </summary>
        /// <param name="lyr">图层</param>
        /// <param name="sql">查询语句</param>
        public void DelFeaturesByQueryFilter(IFeatureLayer lyr, string sql)
        {
            IFeatureClass  Featureclass = lyr.FeatureClass;
            IWorkspaceEdit workspace    = (IWorkspaceEdit)(Featureclass as IDataset).Workspace;

            workspace.StartEditing(false);
            workspace.StartEditOperation();

            //删除要素
            IQueryFilter qfilter = new QueryFilterClass();

            qfilter.WhereClause = sql;
            ITable table = Featureclass as ITable;

            table.DeleteSearchedRows(qfilter);

            //停止编辑

            try
            {
                workspace.StopEditOperation();
                workspace.StopEditing(true);
            }
            catch (Exception ei)
            {
                throw;
            }

            System.Runtime.InteropServices.Marshal.ReleaseComObject(qfilter);
            Global.pActiveView.Refresh();
        }
示例#10
0
        /// <summary>
        /// 将拓扑错误要素存入要素类中
        /// </summary>
        /// <param name="topoErrorFeatures">拓扑错误要素</param>
        /// <param name="resultFeatureClass">保存拓扑错误要素的要素类,注意其坐标系和类型(点/线/面)必须与拓扑错误要素相同</param>
        public static void TopoErrorInsertToFeatureClass(this IEnumerable <ITopologyErrorFeature> topoErrorFeatures, IFeatureClass resultFeatureClass)
        {
            int typeIndex      = resultFeatureClass.AddField("TRuleType", "拓扑规则", esriFieldType.esriFieldTypeInteger);
            int orClassIdIndex = resultFeatureClass.AddField("OriClsID", "源要素类ID", esriFieldType.esriFieldTypeInteger);
            int deClassIdIndex = resultFeatureClass.AddField("DesClsID", "目标要素类ID", esriFieldType.esriFieldTypeInteger);
            int orOidIndex     = resultFeatureClass.AddField("OriOID", "源要素OID", esriFieldType.esriFieldTypeInteger);
            int deOidIndex     = resultFeatureClass.AddField("DesOID", "目标要素OID", esriFieldType.esriFieldTypeInteger);

            IWorkspaceEdit tmpWorkspaceEdit = (IWorkspaceEdit)(resultFeatureClass as IDataset).Workspace;

            tmpWorkspaceEdit.StartEditing(true);
            tmpWorkspaceEdit.StartEditOperation();
            IFeatureBuffer featureBuffer = resultFeatureClass.CreateFeatureBuffer();

            //在目标要素类中插入所有错误要素
            IFeatureCursor featureCursor = resultFeatureClass.Insert(true);

            foreach (var errorFeature in topoErrorFeatures)
            {
                IFeature tmpFeature = errorFeature as IFeature;
                featureBuffer.set_Value(typeIndex, errorFeature.TopologyRuleType);
                featureBuffer.set_Value(orClassIdIndex, errorFeature.OriginClassID);
                featureBuffer.set_Value(deClassIdIndex, errorFeature.DestinationClassID);
                featureBuffer.set_Value(orOidIndex, errorFeature.OriginOID);
                featureBuffer.set_Value(deOidIndex, errorFeature.DestinationOID);

                featureBuffer.Shape = tmpFeature.Shape;
                object featureOID = featureCursor.InsertFeature(featureBuffer);
            }
            featureCursor.Flush();//保存要素
            tmpWorkspaceEdit.StopEditOperation();
            tmpWorkspaceEdit.StopEditing(true);
            Marshal.ReleaseComObject(featureCursor);
        }
示例#11
0
        // 关闭feature的工作空间编辑状态
        public void StopEditing(IFeature pFeature)
        {
            try
            {
                IFeatureClass pFC      = pFeature.Table as IFeatureClass;
                IDataset      pDataset = pFC as IDataset;
                if (pDataset == null)
                {
                    return;
                }

                //如果数据已被修改,则提示用户是否保存
                IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;
                if (pWorkspaceEdit.IsBeingEdited())
                {
                    pWorkspaceEdit.StopEditing(true);
                }
                IActiveView pActiveView = m_SceneCtrl.Scene  as IActiveView;
                pActiveView.Refresh();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message.ToString());
            }
        }
示例#12
0
        public string AddProfileLinesToCalculation(IEnumerable <IPolyline> profileLines)
        {
            string featureClassName = GenerateTempProfileLinesStorage();

            IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)calcWorkspace;

            workspaceEdit.StartEditing(true);
            workspaceEdit.StartEditOperation();


            IFeatureClass calc    = GetCalcProfileFeatureClass(featureClassName);
            var           GCS_WGS = Helper.GetBasePointSpatialReference();


            profileLines.ToList().ForEach(
                l =>
            {
                var newLine   = calc.CreateFeature();
                newLine.Shape = l;
                newLine.Store();
            }
                );


            workspaceEdit.StopEditOperation();
            workspaceEdit.StopEditing(true);

            return(featureClassName);
        }
示例#13
0
        public string AddPolygonTo3D(Dictionary <IPolygon, bool> polygons)
        {
            string featureClassName = GenerateTemp3DPolygonStorage();

            IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)calcWorkspace;

            workspaceEdit.StartEditing(true);
            workspaceEdit.StartEditOperation();

            IFeatureClass calc    = GetCalcProfileFeatureClass(featureClassName);
            var           GCS_WGS = Helper.GetBasePointSpatialReference();

            polygons.ToList().ForEach(polygon =>
            {
                var pointFeature   = calc.CreateFeature();
                pointFeature.Shape = polygon.Key;

                int isVisibleFieldIndex = calc.FindField("IS_VISIBLE");
                pointFeature.set_Value(isVisibleFieldIndex, polygon.Value ? 1 : 0);

                pointFeature.Store();
            });

            workspaceEdit.StopEditOperation();
            workspaceEdit.StopEditing(true);

            return(featureClassName);
        }
示例#14
0
        public string AddProfilePointsTo3D(IEnumerable <IPoint> points)
        {
            string featureClassName = GenerateTemp3DPointStorage();

            IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)calcWorkspace;

            workspaceEdit.StartEditing(true);
            workspaceEdit.StartEditOperation();

            IFeatureClass calc    = GetCalcProfileFeatureClass(featureClassName);
            var           GCS_WGS = Helper.GetBasePointSpatialReference();

            int i = 0;

            points.ToList().ForEach(point =>
            {
                var pointFeature = calc.CreateFeature();

                int idFieldIndex = calc.FindField("ID");
                pointFeature.set_Value(idFieldIndex, i);

                pointFeature.Shape = point;
                pointFeature.Store();
            });

            workspaceEdit.StopEditOperation();
            workspaceEdit.StopEditing(true);

            return(featureClassName);
        }
示例#15
0
        //IFeatureClass CreateFeature Example
        private IFeature IFeatureClass_Create(IFeatureClass featureClass, IGeometry pGeometry)
        {
            if (featureClass.ShapeType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon)
            {
                return(null);
            }
            IWorkspaceEdit iWE = (featureClass as IDataset).Workspace as IWorkspaceEdit;

            if (!iWE.IsBeingEdited())
            {
                iWE.StartEditing(false);
            }

            IFeature feature = featureClass.CreateFeature();

            //Apply the constructed shape to the new features shape
            feature.Shape = pGeometry;
            ISubtypes    subtypes    = (ISubtypes)featureClass;
            IRowSubtypes rowSubtypes = (IRowSubtypes)feature;

            if (subtypes.HasSubtype)         // does the feature class have subtypes?
            {
                rowSubtypes.SubtypeCode = 1; //in this example 1 represents the Primary Pipeline subtype
            }
            // initalize any default values that the feature has
            rowSubtypes.InitDefaultValues();
            //Commit the default values in the feature to the database
            feature.Store();
            iWE.StopEditing(true);
            iWE = null;
            return(feature);
        }
示例#16
0
        protected override void OnMouseDown(ESRI.ArcGIS.Desktop.AddIns.Tool.MouseEventArgs arg)
        {
            IMxDocument pMxDoc = ArcMap.Application.Document as IMxDocument;

            IRubberBand pRabber = new RubberPolygon();

            //get polygon from screen
            IPolygon pPolygon = pRabber.TrackNew(pMxDoc.ActiveView.ScreenDisplay, null) as IPolygon;

            //get cordinate from hard coded
            //IPolygon pPolygon ;

            //IPoint pPoint1 = new Point();
            //pPoint1.X = -120.730273;
            //pPoint1.Y = 224.928212;

            //IPoint pPoint2 = new Point();
            //pPoint2.X = -25.280158;
            //pPoint2.Y = 27942068.023;

            //IPoint pPoint3 = new Point();
            //pPoint3.X = -117.895121;
            //pPoint3.Y = 150.269211;



            //IPointCollection pPointCollection = new Polygon();
            //pPointCollection.AddPoint(pPoint1);
            //pPointCollection.AddPoint(pPoint2);
            //pPointCollection.AddPoint(pPoint3);
            //pPointCollection.AddPoint(pPoint1);

            //pPolygon = pPointCollection as IPolygon;


            ////fix when draw wrong draw
            //IArea pArea = pPolygon as IArea;
            //if (pArea.Area < 0)
            //{
            //    pPolygon.ReverseOrientation();
            //}


            IFeatureLayer  pFlayer = pMxDoc.FocusMap.Layer[0] as IFeatureLayer;
            IDataset       pDS     = pFlayer.FeatureClass as IDataset;
            IWorkspaceEdit pWSE    = pDS.Workspace as IWorkspaceEdit;

            pWSE.StartEditing(false);
            pWSE.StartEditOperation();

            IFeature pFeature = pFlayer.FeatureClass.CreateFeature();

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

            pWSE.StopEditOperation();
            pWSE.StopEditing(true);

            pMxDoc.ActiveView.Refresh();
        }
示例#17
0
 /// <summary>
 /// 删除多个几何对象
 /// </summary>
 /// <param name="lyr">图层</param>
 /// <param name="fea">要素对象</param>
 /// <param name="attributes">属性集合</param>
 /// <param name="pGeo">空间对象</param>
 /// <returns>成功失败标志</returns>
 public void DelFeatures(IFeatureLayer lyr, string sql)
 {
     try
     {
         IFeatureClass Featureclass = lyr.FeatureClass;
         if (Featureclass != null)
         {
             IFeatureCursor featurecursor = PropertySearch(sql, lyr);
             IWorkspaceEdit workspace     = (IWorkspaceEdit)(Featureclass as IDataset).Workspace;
             workspace.StartEditing(false);
             workspace.StartEditOperation();
             IFeature fea = featurecursor.NextFeature();
             while (fea != null)
             {
                 fea.Delete();
                 fea = featurecursor.NextFeature();
             }
             workspace.StopEditOperation();
             workspace.StopEditing(true);
         }
     }
     catch (Exception ei)
     {
         Log.Debug("[GIS] Del Feature: " + ei.ToString());
     }
 }
示例#18
0
        /// <summary>
        /// 删除指定图层的指定图形
        /// </summary>
        /// <param name="id">图形的id</param>
        /// <param name="layerName">图层名</param>
        public void DeleteFeature(int id, string layerName)
        {
            InitLicense();
            try
            {
                List <FieldInfo> list = GetAllFields(layerName);

                var node = configXml.SelectSingleNode("/Layers/Layer[@Title='" + layerName + "']");

                var            ws   = CreateWorkspace();
                IWorkspaceEdit edit = (IWorkspaceEdit)ws;
                edit.StartEditing(false);
                edit.StartEditOperation();
                var fc                 = ws.OpenFeatureClass(node.Attributes["Name"].Value);
                var feature            = fc.GetFeature(id);
                IFeatureClassWrite fcw = fc as IFeatureClassWrite;
                if (feature != null)
                {
                    fcw.RemoveFeature(feature);
                }
                edit.StopEditOperation();
                edit.StopEditing(true);
            }
            catch (Exception ex)
            {
                ShutdownLicense();
                throw ex;
            }
        }
示例#19
0
        public void AddFeature(IFeatureLayer fealyr, IGeometry geometry)
        {
            IFeatureClass featurecls = fealyr.FeatureClass;

            if (featurecls.ShapeType != geometry.GeometryType)
            {
                return;                                           //这个if语句也是迷
            }
            IDataset       dataset       = featurecls as IDataset;
            IWorkspace     workspace     = dataset.Workspace;
            IWorkspaceEdit workspaceEdit = workspace as IWorkspaceEdit;

            workspaceEdit.StartEditing(true);
            workspaceEdit.StartEditOperation();

            IFeatureBuffer featurebuffer = featurecls.CreateFeatureBuffer();

            featurebuffer.Shape = geometry;                ///实锤

            ////以下代码为测试设置其他字段值
            //int index = featureBuffer.Fields.FindField("Name");
            //featureBuffer.set_Value(index, "测试点");
            IFeatureCursor featurecusor = featurecls.Insert(true);

            featurecusor.InsertFeature(featurebuffer);
            featurecusor.Flush();

            workspaceEdit.StopEditOperation();
            workspaceEdit.StopEditing(true);            //C#庐山真面目,让你感觉到可以这样写
        }
示例#20
0
        private void testToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //打开目标数据库
            IWorkspaceFactory pAccessWorkspaceFactory;

            pAccessWorkspaceFactory = new AccessWorkspaceFactoryClass();
            IWorkspace        fWorkspace    = pAccessWorkspaceFactory.OpenFromFile("E://2018年工作//数据验收平台测试//test.gdb", 0);
            IFeatureWorkspace fW            = fWorkspace as IFeatureWorkspace;
            IEnumDataset      penumDatasets = fWorkspace.get_Datasets(esriDatasetType.esriDTFeatureDataset);

            penumDatasets.Reset();
            IDataset pesriDataset = penumDatasets.Next();

            while (pesriDataset == null)
            {
                IFeatureClass pFeatureClass = fW.OpenFeatureClass("Ⅰ级保护林地范围");
            }
            //启动编辑
            IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)fWorkspace;

            workspaceEdit.StartEditing(true);
            workspaceEdit.StartEditOperation();
            //调用创建拓朴的方法
            ITopology topology = Create_Topology(fW, "datset", "Ⅰ级保护林地范围", "Polygon_Topo");

            //停止编辑
            workspaceEdit.StopEditOperation();
            workspaceEdit.StopEditing(true);
            if (topology != null)
            {
                MessageBox.Show("创建拓朴成功!");
            }
        }
示例#21
0
        /// <summary>
        ///  删除满足条件的停采线要素
        /// </summary>
        /// <param name="featureLayer">停采线图层</param>
        /// <param name="stopLineID">停采线ID</param>
        /// <returns>成功删除返回true</returns>
        public static bool DeleteLineFeature(IFeatureLayer featureLayer, string stopLineID)
        {
            try
            {
                IFeatureClass featureClass = featureLayer.FeatureClass;

                IDataset       dataset       = (IDataset)featureClass;
                IWorkspace     workspace     = dataset.Workspace;
                IWorkspaceEdit workspaceEdit = workspace as IWorkspaceEdit;
                workspaceEdit.StartEditing(false);
                workspaceEdit.StartEditOperation();
                IQueryFilter queryFilter = new QueryFilterClass();
                queryFilter.WhereClause = string.Format("BID='{0}'", stopLineID);
                //Get table and row
                ITable esriTable = (ITable)featureLayer.FeatureClass;
                esriTable.DeleteSearchedRows(queryFilter);
                workspaceEdit.StopEditOperation();
                workspaceEdit.StopEditing(true);
                GIS.Common.DataEditCommon.g_pMyMapCtrl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewAll | esriViewDrawPhase.esriViewGeoSelection, null, null);
                return(true);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.WriteLine("删除停采线要素出错:" + ex.Message);
                return(false);
            }
        }
示例#22
0
        /// 合并列表中所有多边形
        /// </summary>
        /// <param name="orifeature">保留源对象</param>
        /// <param name="geolist">图形列表</param>
        /// <returns></returns>
        public void CreatePolygonFromExistingGeometries(IFeatureLayer lyr, IFeature orifeature, List <IGeometry> geolist)
        {
            int            i            = 0;
            IGeometry      geometry     = null;
            IFeatureClass  Featureclass = lyr.FeatureClass;
            IWorkspaceEdit workspace    = (IWorkspaceEdit)(Featureclass as IDataset).Workspace;

            workspace.StartEditing(false);
            workspace.StartEditOperation();
            //合并图形
            ITopologicalOperator2 topologicalOperator2 = orifeature.ShapeCopy as ITopologicalOperator2;

            for (i = 0; i < geolist.Count; i++)
            {
                IGeometry geo = geolist[i];
                if (geometry != null)
                {
                    topologicalOperator2 = geometry as ITopologicalOperator2;
                }
                ITopologicalOperator opertor = geo as ITopologicalOperator;
                opertor.Simplify();
                topologicalOperator2.IsKnownSimple_2 = false;
                topologicalOperator2.Simplify();
                geometry = topologicalOperator2.Union(geo);
            }
            //更新图形对象
            IGeometry geoCombined = (IGeometry)geometry;

            orifeature.Shape = geoCombined as IGeometry;
            orifeature.Store();

            workspace.StopEditOperation();
            workspace.StopEditing(true);
        }
示例#23
0
        /// <summary>
        /// 获取绘制点的图层——Cities, 保存点绘制的函数
        /// </summary>
        /// <param name="pointLayerName"></param>
        /// <param name="point"></param>
        private void AddPointByStore(string pointLayerName, IPoint pt)
        {
            //得到要添加地物的图层
            IFeatureLayer pFeatureLayer = GetLayerByName(pointLayerName) as IFeatureLayer;

            if (pFeatureLayer != null)
            {
                //定义一个地物类, 把要编辑的图层转化为定义的地物类
                IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
                //先定义一个编辑的工作空间, 然后将其转化为数据集, 最后转化为编辑工作空间
                IWorkspaceEdit w = (pFeatureClass as IDataset).Workspace as IWorkspaceEdit;
                IFeature       pFeature;
                //开始事务操作
                w.StartEditing(false);
                //开始编辑
                w.StartEditOperation();
                //创建一个(点)要素
                pFeature = pFeatureClass.CreateFeature();
                //赋值该要素的Shape属性
                pFeature.Shape = pt;

                //保存要素, 完成点要素生成
                //此时生成的点要素只要集合特征(shape/Geometry), 无普通属性
                pFeature.Store();

                //结束编辑
                w.StopEditOperation();
                //结束事务操作
                w.StopEditing(true);
            }
            //屏幕刷新
            this.axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, pFeatureLayer, null);
        }
示例#24
0
        protected override void OnClick()
        {
            IActiveView activeView = ArcMap.Document.ActiveView;

            IMap          map          = activeView as IMap;
            ILayer        layer        = map.get_Layer(0);
            IFeatureLayer featureLayer = layer as IFeatureLayer;
            IFeatureClass featureClass = featureLayer.FeatureClass;

            IPoint point = new PointClass();

            point.PutCoords(-117.1, 34.075); //(LONG, LAT)

            IWorkspace     workspace     = GetWorkspace();
            IWorkspaceEdit workspaceEdit = workspace as IWorkspaceEdit;

            workspaceEdit.StartEditing(true);
            workspaceEdit.StartEditOperation();

            // -------------- Perform your editing tests here ------------------
            CreateFeature(featureClass, point);
            //UpdateFeature(featureClass);
            //DeleteFeature(featureClass);

            // -----------------------------------------------------------------

            workspaceEdit.StopEditOperation();
            workspaceEdit.StopEditing(true);

            ArcMap.Application.CurrentTool = null;
        }
示例#25
0
        /// <summary>
        /// Deletes the anno features in feature layer.
        /// </summary>
        /// <param name="featureLayer">The feature layer.</param>
        public static void DeleteAnnoFeaturesInFeatureLayer(IFeatureLayer featureLayer)
        {
            if (featureLayer == null)
            {
                return;
            }
            IFeatureClass  featureClass   = featureLayer.FeatureClass;
            IDataset       dataset        = featureClass as IDataset;
            IWorkspace     pWorkspace     = dataset.Workspace;
            IWorkspaceEdit pWorkspaceEdit = pWorkspace as IWorkspaceEdit;

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

            IWorkspaceProperties2 workspaceProperties2 = (IWorkspaceProperties2)pWorkspace;
            //判断workspace是否可以执行SQL语句
            IWorkspaceProperty canExecuteSqlProperty =
                workspaceProperties2.get_Property(esriWorkspacePropertyGroupType.esriWorkspacePropertyGroup,
                                                  (int)esriWorkspacePropertyType.esriWorkspacePropCanExecuteSQL);

            if (canExecuteSqlProperty.IsSupported)
            {
                //ExecuteSQL删除feature
                pWorkspace.ExecuteSQL("delete  from " + featureClass.AliasName + " where objectid >=0");
            }
            pWorkspaceEdit.StopEditOperation();
            pWorkspaceEdit.StopEditing(true);
        }
示例#26
0
        /// <summary>
        /// 结束任务流程
        /// </summary>
        /// <param name="taskName"></param>
        public void FinishTask(string taskName)
        {
            IFeatureWorkspace   ws = Util.ServerWorkspace as IFeatureWorkspace;
            IVersionedWorkspace vw = ws as IVersionedWorkspace;

            if (taskName.ToLower() == vw.DefaultVersion.VersionName.ToLower())
            {
                return;
            }
            IVersion       ver = vw.FindVersion(taskName);
            IVersionEdit4  ve  = ver as IVersionEdit4;
            IWorkspaceEdit wse = ver as IWorkspaceEdit;

            wse.StartEditing(true);
            ve.Reconcile4(vw.DefaultVersion.VersionName, true, true, true, true);
            if (ve.CanPost())
            {
                ve.Post(vw.DefaultVersion.VersionName);
            }
            ITable       task_tbl = ws.OpenTable("TaskLog");
            IQueryFilter filter   = new QueryFilterClass();

            filter.WhereClause = "TaskName = '" + taskName + "'";
            ICursor cur = task_tbl.Search(filter, false);
            IRow    rw  = cur.NextRow();

            if (rw != null)
            {
                rw.set_Value(task_tbl.FindField("Status"), TaskManager.FINISH_STATUS);
                rw.set_Value(task_tbl.FindField("FinishDate"), DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
                rw.Store();
            }
            wse.StopEditing(true);
            ver.Delete();
        }
示例#27
0
 private void CreateFeature(IGeometry geo, IMap pMap, IFeatureClass fc)
 {
     try
     {
         if (geo == null || fc == null || pMap == null)
         {
             return;
         }
         IDataset       pDataset       = fc as IDataset;
         IWorkspaceEdit pWorkspaceEdit = pDataset.Workspace as IWorkspaceEdit;
         int            index          = fc.FindField(fc.ShapeFieldName);
         IGeometryDef   pGD            = fc.Fields.get_Field(index).GeometryDef;
         if (pGD.HasZ)
         {
             IZAware pZA = geo as IZAware;
             pZA.ZAware = true;
             IZ     pZ = geo as IZ;
             double zmin = -1000, zmax = 1000;
             if (pGD.SpatialReference.HasZPrecision())
             {
                 pGD.SpatialReference.GetZDomain(out zmin, out zmax);
             }
             if (pZ != null)
             {
                 pZ.SetConstantZ(0);
             }
             else
             {
                 IPoint p = geo as IPoint;
                 if (p.Z.ToString() == "非数字")
                 {
                     p.Z = 0;
                 }
             }
         }
         if (pGD.HasM)
         {
             IMAware pMA = geo as IMAware;
             pMA.MAware = true;
         }
         if (!pWorkspaceEdit.IsBeingEdited())
         {
             pWorkspaceEdit.StartEditing(true);
             pWorkspaceEdit.StartEditOperation();
         }
         IFeature pFeature = fc.CreateFeature();
         pFeature.Shape = geo;
         pFeature.Store();
         if (pWorkspaceEdit.IsBeingEdited())
         {
             pWorkspaceEdit.StartEditOperation();
             pWorkspaceEdit.StopEditing(true);
         }
         pMap.ClearSelection();
     }
     catch (System.Exception ex)
     {
         return;
     }
 }
示例#28
0
        public void ChangeTasksStatus(string taskName, string status)
        {
            IFeatureWorkspace ws       = Util.ServerWorkspace as IFeatureWorkspace;
            ITable            task_tbl = ws.OpenTable("TaskLog");
            IQueryFilter      filter   = new QueryFilterClass();

            filter.WhereClause = "TaskName = '" + taskName + "'";
            ICursor        cur = task_tbl.Search(filter, false);
            IRow           rw  = cur.NextRow();
            IWorkspaceEdit wse = ws as IWorkspaceEdit;

            wse.StartEditing(false);
            if (rw != null)
            {
                wse.StartEditOperation();
                rw.set_Value(task_tbl.FindField("Status"), status);
                if (status == TaskManager.CHECKIN_STATUS)
                {
                    rw.set_Value(task_tbl.FindField("CheckInDate"), DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
                }
                else if (status == TaskManager.AUTOCHECK_STATUS)
                {
                    rw.set_Value(task_tbl.FindField("AutoDataCheckDate"), DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
                }
                else if (status == TaskManager.MANUALCHECK_STATUS)
                {
                    rw.set_Value(task_tbl.FindField("ManualDataCheckDate"), DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
                }
                rw.Store();
                wse.StopEditOperation();
            }
            wse.StopEditing(true);
        }
示例#29
0
        public void AddPolygonByWrite(AxMapControl axMapControl1, IFeatureLayer l, double x, double y)
        {
            ESRI.ArcGIS.Geometry.esriGeometryType featype = l.FeatureClass.ShapeType;
            if (featype == esriGeometryType.esriGeometryPolygon)//判断层是否为线层
            {
                //IFeatureLayer l = MapCtr.Map.get_Layer(0) as IFeatureLayer;
                IFeatureClass      fc = l.FeatureClass;
                IFeatureClassWrite fr = fc as IFeatureClassWrite;
                IWorkspaceEdit     w  = (fc as IDataset).Workspace as IWorkspaceEdit;
                IFeature           f;
                //可选参数的设置
                object Missing = Type.Missing;
                IPoint p       = new PointClass();
                w.StartEditing(true);
                w.StartEditOperation();

                f = fc.CreateFeature();
                //定义一个多义线对象
                IRgbColor color = new RgbColor();
                // 设置颜色属性
                color.Red          = 255;
                color.Transparency = 255;
                IGeometry iGeom = axMapControl1.TrackPolygon();
                AddRegion(axMapControl1, iGeom);
                f.Shape = iGeom;
                fr.WriteFeature(f);
                w.StopEditOperation();
                w.StopEditing(true);
            }
        }
示例#30
0
        public void AddPointByWrite(IFeatureLayer l, double x, double y)
        {
            ESRI.ArcGIS.Geometry.esriGeometryType featype = l.FeatureClass.ShapeType;
            if (featype == esriGeometryType.esriGeometryPoint)//判断层是否为点层
            {
                // IFeatureLayer l = MapCtr.Map.get_Layer(0) as IFeatureLayer;
                IFeatureClass      fc = l.FeatureClass;
                IFeatureClassWrite fr = fc as IFeatureClassWrite;
                IWorkspaceEdit     w  = (fc as IDataset).Workspace as IWorkspaceEdit;
                IFeature           f;
                IPoint             p;

                w.StartEditing(true);
                w.StartEditOperation();

                f = fc.CreateFeature();
                p = new PointClass();
                p.PutCoords(x, y);
                f.Shape = p;
                fr.WriteFeature(f);

                w.StopEditOperation();
                w.StopEditing(true);
            }
        }
示例#31
0
        public bool InsertNewRow(ITable table,IWorkspaceEdit workspace)
        {
            using (ComReleaser comReleaser = new ComReleaser())
            {
                try
                {
                    multiWspEdit.StartMultiuserEditing(esriMultiuserEditSessionMode.esriMESMVersioned);
                    workspace.StartEditOperation();
                    _currentRow = table.CreateRow();
                    _currentRow.Store();
                    workspace.StopEditOperation();
                    workspace.StopEditing(true);
                    return true;
                }
                catch {
                    workspace.StopEditOperation();
                    workspace.StopEditing(false);
                    return false; }

            }
        }
        public void ProcessFeature(IWorkspaceEdit iwe, IFeatureLayer ifl_active, IRow rw)
        {
            double value = double.NaN;

            if (CoordinateSystem == "")
            {
                CoordinateSystem = ((IFeature)rw).Shape.SpatialReference.Name;
            }

            if (this.LinearUnit == null || this.LinearUnit == "")
            {
                if (fieldTier == 2)
                {
                    LinearUnit = rw.get_Value(GetFieldUnitIndex()).ToString();
                }

                if (this.LinearUnit == null || this.LinearUnit.Trim() == "")
                {
                    LinearUnit = GetSpatialReferenceLinearUnit(((IFeature)rw).Shape.SpatialReference);
                }
            }

            if (LinearUnit.IndexOf("meter", 0, StringComparison.CurrentCultureIgnoreCase) > -1)
            {
                if (useArealUnit)
                {
                    currentAreaUnit = esriAreaUnits.esriSquareMeters;
                    LinearUnit = "Square Meters";
                }
                else
                {
                    currentLinearUnit = esriUnits.esriMeters;
                }
            }
            else if (LinearUnit.IndexOf("foot", 0, StringComparison.CurrentCultureIgnoreCase) > -1)
            {
                if (useArealUnit)
                {
                    currentAreaUnit = esriAreaUnits.esriSquareFeet;
                    LinearUnit = "Square Feet";
                }
                else
                {
                    currentLinearUnit = esriUnits.esriFeet;
                }
            }
            else if (LinearUnit.IndexOf("acre", 0, StringComparison.CurrentCultureIgnoreCase) > -1)
            {
                currentAreaUnit = esriAreaUnits.esriAcres;
                currentLinearUnit = esriUnits.esriUnknownUnits;
                LinearUnit = "Acres";
            }

            if (doReCalcValues || !double.TryParse(rw.get_Value(GetFieldIndex()).ToString(), out value) || value == double.NaN || value == 0.0)
            {
                value = DoMeasure(rw);

                //try writing the (single) measured value to the table
                try
                {
                    IFeature feat = (IFeature)rw;

                    //if we are re-calculating all values, there is no need to start editing on each row
                    if (!doReCalcValues)
                    {
                        if (!iwe.IsBeingEdited())
                            iwe.StartEditing(true);

                        iwe.StartEditOperation();
                    }

                    feat.set_Value(GetFieldIndex(), value);
                    feat.set_Value(GetFieldUnitIndex(), LinearUnit);
                    feat.Store();
                }
                catch (Exception err)
                {
                }
                finally
                {
                    if (!doReCalcValues)
                    {
                        iwe.StopEditOperation();

                        if (iwe.IsBeingEdited())
                            iwe.StopEditing(true);

                        //there may be more than one row that requires editing
                        doReCalcValues = true;
                    }
                }
            }

            values.Add(value);
        }