ArcGIS的删除要素方法主要有以下几种:
1、转成ITable
删除大量数据时建议用此方式(推荐)
/// <summary>
/// 转为Table删除
/// </summary>
/// <param name="featureClass">源要素集</param>
/// <param name="spatialFilter">筛选条件</param>
public static void DeleFCByTable(IFeatureClass featureClass,ISpatialFilter spatialFilter)
{
(featureClass as ITable).DeleteSearchedRows(spatialFilter); //Time = 0.468s 20万数据
}
2、ExecuteSQL
大数据量时删除,但是无法使用空间筛选条件
/// <summary>
/// ExecuteSQL删除
/// </summary>
/// <param name="featureClass"></param>
/// <param name="str">条件</param>
public static void DelFCByWorkspace(IFeatureClass featureClass,string str)
{
IDataset pDataset = featureClass as IDataset;
if (string.IsNullOrEmpty(str))
pDataset.Workspace.ExecuteSQL("delete from " + pDataset.Name); //Time = 0.672s 20万数据
else
pDataset.Workspace.ExecuteSQL("delete from " + pDataset.Name+"where"+str);
}
3、更新游标删除方式
/// <summary>
/// 删除游标方式
/// </summary>
/// <param name="featureClass">源要素集</param>
/// <param name="spatialFilter">筛选条件</param>
public static void DelFCbyCursor(IFeatureClass featureClass, ISpatialFilter spatialFilter)
{
using(ComReleaser comReleaser=new ComReleaser())
{
IFeatureCursor cursor = featureClass.Update(spatialFilter, false);
comReleaser.ManageLifetime(cursor);
IFeature feature = null;
while ((feature = cursor.NextFeature()) != null)
{
cursor.DeleteFeature();
}
}
}
4、删除IFeature
/// <summary>
/// 删除要素
/// </summary>
/// <param name="featureClass">源要素集</param>
/// <param name="spatialFilter">筛选条件</param>
public static void DelFCbyFeature(IFeatureClass featureClass, ISpatialFilter spatialFilter)
{
using (ComReleaser comReleaser = new ComReleaser())
{
IFeatureCursor cursor = featureClass.Search(spatialFilter, false);
comReleaser.ManageLifetime(cursor);
IFeature feature = null;
while ((feature = cursor.NextFeature()) != null)
{
feature.Delete();
}
}
}