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);
                }
相關文章
相關標籤/搜索