/// <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