Arcgis Engine(ae)接口详解(4):featureClass的feature插入

//因为测试数据不完善,featureClass在此要只设null值,真实功能要设实际的值
                IFeatureClass featureClass = null;

                //获取某个字段的索引,后面取字段值用到
                int xxxFieldIdx = featureClass.FindField("xxx");

                //获取到IWorkspaceEdit接口,IWorkspaceEdit是编辑必须的接口
                IWorkspaceEdit workspaceEdit = (featureClass as IDataset).Workspace as IWorkspaceEdit;

                //开始编辑的两个重要方法,StartEditing第一个参数是是否容许Undo,Redo(重作,撤销),若是是后台数据处理功能通常关系不大
                workspaceEdit.StartEditing(true);
                //构成一个EditOperation有StartEditOperation和StopEditOperation方法,Undo,Redo是针对一个EditOperation的
                workspaceEdit.StartEditOperation();

                //插入要素不止一种方法,此例介绍的是游标插入法,优势是插入速度比较快
                //注意此处的游标是插入游标,而不是以前查询功能的查询结果游标,他们接口是同样的,可是获取方式不一样
                IFeatureCursor featureCursorInsert = null;
                //IFeatureBuffer跟IFeature用法差很少,可理解为专用于插入的feature
                IFeatureBuffer featureBuffer = null;

                //这里加try的缘由是,若是编辑时出错,须要调用IWorkspaceEdit的一些方法来回滚修改内容
                //并且编辑出错概率比通常功能大
                try
                {
                    //获取插入游标
                    featureCursorInsert = featureClass.Insert(true);

                    //模拟插入10条要素,当前实际功能不会这样写
                    for (int i = 0; i < 10; i++)
                    {
                        //建立featureBuffer
                        featureBuffer = featureClass.CreateFeatureBuffer();

                        //赋值的方式跟编辑同样

                        //修改属性字段的字段值
                        featureBuffer.Value[xxxFieldIdx] = "eee";

                        IPoint point = new PointClass();
                        point.PutCoords(111, 222);
                        //修改几何字段的字段值
                        //由于几何字段只有一个,因此不须要字段索引
                        featureBuffer.Shape = point;

                        //赋值后调用插入游标的InsertFeature方法完成插入一条记录
                        featureCursorInsert.InsertFeature(featureBuffer);
                    }

                    //保存编辑
                    //以前的feature.Store()和featureDelete.Delete()都是临时保存,下面两句才是真实的保存
                    workspaceEdit.StopEditOperation();
                    //参数1是是否保存,false就是不保存,也就是恢复到修改前的状态
                    workspaceEdit.StopEditing(true);
                }
                catch (Exception ex)
                {
                    //编辑出错须要如下两句,大意是数据回滚
                    workspaceEdit.StopEditOperation();
                    workspaceEdit.StopEditing(false);

                    //此处不记录异常,把异常抛出让系通通一处理
                    throw new Exception("", ex);
                }
相关文章
相关标签/搜索