• 对ArcGis Engine的增、删、改实现


     /// <summary>
            /// 在图层里面增加feature
            /// </summary>
            /// <param name="layer">添加到的图层的名称</param>
            /// <param name="pMap">当前axMapControl.Map</param>
            /// <param name="dt">要添加的数据 DataTable格式</param>
            public static void AddFeature(string layer,IMap pMap,DataTable dt)
            {
                IFeatureClass featureCls = OpenLayer(layer);//目标featureclass
                if (featureCls == null)
                {
                    throw new Exception(string.Format("加载{0}图层失败,请检查空间数据库是否有该图层", layer));
                }
                IDataset ds = featureCls as IDataset;
    
                IWorkspace workspace = ds.Workspace;
    
                IWorkspaceEdit edit = workspace as IWorkspaceEdit;
                edit.StartEditing(false);
                edit.DisableUndoRedo();
                            
                edit.StartEditOperation();
    
                int num = -1;
                for (int i = 0; i < pMap.LayerCount; i++)
                {
                    if (pMap.get_Layer(i).Name == layer)
                    {
                        num = i;
                        break;
                    }
                }
    
                IFeatureCursor inserCursor = featureCls.Insert(true);
                IFeatureBuffer buffer;
                
                IFeatureLayer pFeatureLayer=pMap.get_Layer(num) as IFeatureLayer;
                IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
                IFeatureCursor Cursor = pFeatureClass.Search(null, false);
    
                IFeature pFeature = Cursor.NextFeature();
    
                int count = 0;
                while (pFeature != null)
                {
                    int Findex = pFeature.Fields.FindField("FID");
                    string FID = pFeature.get_Value(Findex).ToString();
    
                    int m = 0;
                    int w=-1;
                    foreach (DataRow dr in dt.Rows)
                    {
                        if (dr["FID"].ToString() == FID)
                        {
                            w = m;
                        }
                        m++;
                    }
    
    
                    //IFeature newFeature = featureCls.CreateFeature();
                    buffer = featureCls.CreateFeatureBuffer();
                    
    
                    //newFeature.Shape = pFeature.Shape;
                    buffer.Shape = pFeature.Shape;
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        for (int n = 0; n < featureCls.Fields.FieldCount; n++)
                        {
                            if (featureCls.Fields.get_Field(n).Name == dt.Columns[i].ToString())
                            {
                                int index = featureCls.FindField(dt.Columns[i].ToString());
                                string mm = dt.Rows[w][i].ToString();
                                buffer.set_Value(index, dt.Rows[w][i]);
                            }
                        }
                    }
    
    
                    inserCursor.InsertFeature(buffer);
    
                    if (count >= 100)
                    {
                        inserCursor.Flush();
                        count = 0;
                    }
                    
                    
                    pFeature = Cursor.NextFeature();
                    
                }
                inserCursor.Flush();
    
                //inserCursor.Flush();
    
                edit.StopEditing(true);
                edit.StopEditOperation();
    
            }
    
    
            /// <summary>
            /// 删除图层指定feature
            /// </summary>
            /// <param name="layer">要删除的目标图层名</param>
            /// <param name="MapDocID">带有要删除feature的MAPDOCID值的list</param>
            public static void DeleteFeature(string layer,List<string> MapDocID)
            {
                IFeatureClass pFeatureClass = OpenLayer(layer);
                string whereClause="MAPDOCID='"+MapDocID[0]+"'";
                for (int i = 1; i < MapDocID.Count;i++ )
                {
                    string whereClause1 = " or MAPDOCID='" + MapDocID[i] + "'";
                    whereClause += whereClause1;
                }
                IQueryFilter pQueryFilter = new QueryFilterClass();
                pQueryFilter.WhereClause = whereClause;
                IFeatureCursor pFeatureCursor = pFeatureClass.Update(pQueryFilter,false);
                IFeature pFeature = pFeatureCursor.NextFeature();
                while (pFeature != null)
                {
                    pFeatureCursor.DeleteFeature();
                    pFeature = pFeatureCursor.NextFeature();
                }
                System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor);
            }
    
            /// <summary>
            /// 删除图层指定feature
            /// </summary>
            /// <param name="layer">要删除的目标图层名</param>
            /// <param name="MapDocID">带有要删除feature的MAPDOCID值的list</param>
            public static void DeleteFeature(string layer, string MapDocID)
            {
                IFeatureClass pFeatureClass = OpenLayer(layer);
                string whereClause = "MAPDOCID='" + MapDocID + "'";
                 
                IQueryFilter pQueryFilter = new QueryFilterClass();
                pQueryFilter.WhereClause = whereClause;
                IFeatureCursor pFeatureCursor = pFeatureClass.Update(pQueryFilter, false);
                IFeature pFeature = pFeatureCursor.NextFeature();
                while (pFeature != null)
                {
                    pFeatureCursor.DeleteFeature();
                    pFeature = pFeatureCursor.NextFeature();
                }
                System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor);
            }
    
    
            /// <summary>
            /// 修改指定图层的字段
            /// </summary>
            /// <param name="dicValue">要修改字段和值</param>
            /// <param name="dicCondition">要修改的条件</param>
            /// <param name="layer">图层名</param>
            /// <returns></returns>
            public static bool EditField(Dictionary<string, string> dicValue, Dictionary<string, string> dicCondition,string layer)
            {
                try
                {
                    //找到你的图层名
                    IFeatureClass featureCls = OpenLayer(layer);
                    if (featureCls == null)
                    {
                        throw new Exception(string.Format("加载{0}图层失败,请检查空间数据库是否有该图层",layer));
                    }
    
                    //得到该图层下有多少数据
                    int featureCount = featureCls.FeatureCount(null);
                    int fieldIndex = -1;
                     
                    IDataset ds = featureCls as IDataset;
    
                    IWorkspace workspace = ds.Workspace;
    
                    IWorkspaceEdit edit = workspace as IWorkspaceEdit;
                    edit.StartEditing(false);
                    edit.DisableUndoRedo();
    
                    IFeatureCursor updateCursor = featureCls.Update(null, false);
    
                    edit.StartEditOperation();
    
                    IFeature feature = updateCursor.NextFeature();
                    while (feature != null)
                    {
                        int fid = feature.OID-1;
                        string myMAPDOCID = fid.ToString();
                        foreach (KeyValuePair<string, string> MAPDOCID in dicCondition)
                        {
                            if (myMAPDOCID == MAPDOCID.Value)
                            {
                                foreach (KeyValuePair<string, string> myValue in dicValue)
                                {
                                    int myIndex = -1;
                                    if (myValue.Key.Length > 10)
                                    {
                                        myIndex = featureCls.FindField(myValue.Key.Substring(0, 10));
                                    }
                                    else
                                    {
                                        myIndex = featureCls.FindField(myValue.Key.ToString());
                                    }
                                    if (myIndex == -1)
                                    {
                                        MessageBox.Show("SDE中未检索到'"+myValue.Key+"'字段,请检查字段名是否有误");
                                        continue;
                                    }
    
                                    feature.set_Value(myIndex, myValue.Value);
    
                                    updateCursor.UpdateFeature(feature);
                                }
                            }
                        }
                        feature = updateCursor.NextFeature();
                    }
    
                    edit.StopEditOperation();
                    edit.StopEditing(true);
    
                    return true;
                }
                catch(Exception ex)
                {
                    throw;
                }
            }
    
            public static IFeatureClass OpenLayer(string layerName)
            {
                try
                {
                    IFeatureWorkspace pFeatureWorkspace =
                        DCIEngine.FrameWork.Global.OpenWorkspace() as IFeatureWorkspace;
    
                    IFeatureClass pFeatureClass =
                        pFeatureWorkspace.OpenFeatureClass(layerName);
    
                    return pFeatureClass;
                }
                catch (Exception)
                {
                    return null;
                }
            }

    http://74229.com

  • 相关阅读:
    资料
    CSS 折角效果
    CSS3 动画
    选择器--验证表单
    -moz 火狐 -msIE -webkit[chrome safari]
    css3 fileter始终效果 图片渲染
    jquery 库下载地址http://www.jq22.com/jquery-info122
    CSS 文字垂直居中
    图片预加载技术(存在问题,已修复)
    Round#628(div2)
  • 原文地址:https://www.cnblogs.com/jiguixin/p/2380649.html
Copyright © 2020-2023  润新知