• Arcgis Engine(ae)接口详解(3):featureClass的feature编辑和删除


                    //由于测试数据不完善,featureClass在此要只设null值,真实功能要设实际的值
                    IFeatureClass featureClass = null;
    
                    //获取某个字段的索引,后面取字段值用到
                    int xxxFieldIdx = featureClass.FindField("xxx");
    
                    IFeatureCursor featureCursor = featureClass.Search(null, true);
                    IFeature feature = null;
    
                    //获取到IWorkspaceEdit接口,IWorkspaceEdit是编辑必须的接口
                    IWorkspaceEdit workspaceEdit = (featureClass as IDataset).Workspace as IWorkspaceEdit;
    
                    //开始编辑的两个重要方法,StartEditing第一个参数是是否允许Undo,Redo(重做,撤销),如果是后台数据处理功能一般关系不大
                    workspaceEdit.StartEditing(true);
                    //构成一个EditOperation有StartEditOperation和StopEditOperation方法,Undo,Redo是针对一个EditOperation的
                    workspaceEdit.StartEditOperation();
    
                    //这里加try的原因是,如果编辑时出错,需要调用IWorkspaceEdit的一些方法来回滚修改内容
                    //而且编辑出错几率比一般功能大
                    try
                    {
                        List<int> lstOid = new List<int>();
    
                        while ((feature = featureCursor.NextFeature()) != null)
                        {
                            //修改属性字段的字段值
                            feature.Value[xxxFieldIdx] = "sss";
    
                            IPoint point = new PointClass();
                            point.PutCoords(111, 222);
                            //修改几何字段的字段值
                            //因为几何字段只有一个,所以不需要字段索引
                            feature.Shape = point;
    
                            //保存要素的修改
                            feature.Store();
    
                            //保存oid是为了之后的删除要素功能
                            lstOid.Add(feature.OID);
                        }
    
                        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(featureCursor);
    
                        //删除
                        //由于不能在遍历要素时删除要素,因此其中一种删除要素的方法:是在遍历时收集要删除要素的oid,遍历完后再通过oid进行删除   
                        foreach (int oid in lstOid)
                        {
                            //先通过oid获取要素,然后调用要素的Delete方法删除
                            IFeature featureDelete = featureClass.GetFeature(oid);
                            featureDelete.Delete();
                        }
    
                        //保存编辑
                        //之前的feature.Store()和featureDelete.Delete()都是临时保存,下面两句才是真实的保存
                        workspaceEdit.StopEditOperation();
                        //参数1是是否保存,false就是不保存,也就是恢复到修改前的状态
                        workspaceEdit.StopEditing(true);
                    }
                    catch (Exception ex)
                    {
                        //编辑出错需要以下两句,大意是数据回滚
                        workspaceEdit.StopEditOperation();
                        workspaceEdit.StopEditing(false);
    
                        //此处不记录异常,把异常抛出让系统统一处理
                        throw new Exception("", ex);
                    }
  • 相关阅读:
    迅为-imx6ull开发板之C语言实现LED例程
    移植5.4内核到迅为I.MX6ULL开发板
    一文搞懂定制Ubuntu文件系统-基于迅为imx6开发板
    移植Linux-5.4+内核到4412开发板
    iTOP4412开发板Linux下多核处理器相关知识
    使用迅为IMX6ULL开发板第一个汇编实验(二)
    mplayer移植-迅为IMX6Q开发板
    使用迅为IMX6ULL开发板第一个汇编实验(一)
    网易2019秋招--翻转翻转
    百度2019秋招--混战世界
  • 原文地址:https://www.cnblogs.com/cannel/p/11074317.html
Copyright © 2020-2023  润新知