大赵传奇

援引事类,扬搉古今,举要删芜,言辩而理切--QQ276605216

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.开始编辑,save feature property,停止编辑

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

然后开启编辑状态:

bool startEdit = workspaceEdit.IsBeingEdited();
if (!startEdit)
{
    workspaceEdit.StartEditing(false);
}
workspaceEdit.StartEditOperation();

然后获取IFeatureCursor和IFeature:

pFeatureCursor = pFeatureClass.Search(pQueryFilter, false);

//注意这里一定要为false,因为http://forums.arcgis.com/threads/45879-Cannot-call-Store-on-a-recycled-row-while-editing

//如果为true可能会产生0x80040958的错误
pFeature = pFeatureCursor.NextFeature();

然后用IFeature.set_Value()方法对Feature进行属性表值的修改:

pFeature.set_Value(i, valueToSet);

修改完成,要用IFeature.store()方法保存:

pFeature.Store();

然后最好将Feature释放掉,再进行接下来的修改:

System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeature);
pFeature = null;
pFeature = pFeatureCursor.NextFeature();

接下来用IFeatureCursor.Flush():

pFeatureCursor.Flush();
System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor);

最后停止编辑状态:
workspaceEdit.StopEditOperation();
startEdit = workspaceEdit.IsBeingEdited();
if (!startEdit)
{
   workspaceEdit.StopEditing(true);
}

 2.获取图层

        public IFeatureLayer GetFeatureLayerFromMap(string LayerName, IMap pMap)
        {
            IFeatureLayer rLayer = null;
            for (int i = 0; i < pMap.LayerCount; i++)
            {
                ESRI.ArcGIS.Carto.ILayer lyr = pMap.get_Layer(i);
                if (lyr is FeatureLayer)
                {
                    if (lyr.Name.ToUpper() == LayerName.ToUpper())
                    {
                        rLayer = lyr as IFeatureLayer;
                        break;
                    }
                    else
                    {
                        IFeatureClass tFeaCls = (lyr as IFeatureLayer).FeatureClass;
                        if (tFeaCls != null && (tFeaCls as IDataset).Name.ToUpper() == LayerName.ToUpper())
                        {
                            rLayer = lyr as IFeatureLayer;
                            return rLayer;
                        }
                        else if (tFeaCls != null && (tFeaCls as IDataset).Name.Contains("."))
                        {
                            if ((tFeaCls as IDataset).Name.Substring((tFeaCls as IDataset).Name.IndexOf(".") + 1).ToUpper() == LayerName.ToUpper())
                            {
                                rLayer = lyr as IFeatureLayer;
                                return rLayer;
                            }
                        }
                    }
                }
                else if (lyr is IGroupLayer)
                {
                    rLayer = GetFeatureLayerFromGroupLayer(lyr, LayerName);
                    if (rLayer != null)
                        break;
                }
            }
            return rLayer;
        }


private static LayerHelper _mAppConst = null;
        private static readonly object _lockAssistant = new object();
        public static LayerHelper Instance
        {
            get
            {
                if (_mAppConst == null)
                {
                    lock (_lockAssistant)
                    {
                        if (_mAppConst == null)
                            _mAppConst = new LayerHelper();
                    }
                }
                return _mAppConst;
            }
        }
        private LayerHelper() { }




        ///
        /// 根据图层名(要素名)得到组合图层中的图层
        ///
        ///图层
        ///图层名(要素名)
        /// 图层
        public IFeatureLayer GetFeatureLayerFromGroupLayer(ESRI.ArcGIS.Carto.ILayer pLyr, string LyrName)
        {
            if (pLyr is ESRI.ArcGIS.Carto.IGroupLayer)
            {
                ICompositeLayer pCompLayer = pLyr as ICompositeLayer;

                for (int i = 0; i < pCompLayer.Count; i++)
                {
                    IFeatureLayer rLayer = GetFeatureLayerFromGroupLayer(pCompLayer.get_Layer(i), LyrName);
                    if (rLayer != null)
                    {
                        return rLayer;
                    }
                }
            }
            else if (pLyr is ESRI.ArcGIS.Carto.IFeatureLayer)
            {
                if (pLyr.Name.ToUpper() == LyrName.ToUpper())
                {
                    return pLyr as IFeatureLayer;
                }
                else
                {
                    IFeatureClass tFeaCls = (pLyr as IFeatureLayer).FeatureClass;
                    if (tFeaCls != null && (tFeaCls as IDataset).Name.ToUpper() == LyrName.ToUpper())
                        return pLyr as IFeatureLayer;
                    else if (tFeaCls != null && (tFeaCls as IDataset).Name.Contains("."))
                    {
                        if ((tFeaCls as IDataset).Name.Substring((tFeaCls as IDataset).Name.IndexOf(".") + 1).ToUpper() == LyrName.ToUpper())
                            return pLyr as IFeatureLayer;
                    }
                    return null;
                }
            }
            return null;
        }

  

posted on 2016-08-19 17:19  赵长青  阅读(1120)  评论(1编辑  收藏  举报