1、创建Shp文件
IFeatureWorkspace接口的CreateFeatureClass()方法可以产生一个要素类,该要素类被直接放置在工作空间中。
private void CreateShp()
{
//打开shp工作空间
string fileName = "Some";//shp文件名
string filePath = @"E:\HiOS\TestShp";//shp文件位置
IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();//文件夹
//IWorkspaceFactory pWorkspaceFactory = new AccessWorkspaceFactoryClass();//Access格式的个人地理数据库
IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(filePath, 0);
IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;
//设置geometry definition
IGeometryDef pGeometryDef = new GeometryDefClass();
IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit;
pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;//点、线、面
pGeometryDefEdit.SpatialReference_2 = axMapControl1.SpatialReference;
//建立Shp文件的字段集
IFields pFields = new FieldsClass();
IFieldsEdit pFieldsEdit = pFields as IFieldsEdit;
IField pField = new FieldClass();
IFieldEdit pFieldEdit = pField as IFieldEdit;
//建立shape(几何)字段
pFieldEdit.Name_2 = "Shape";
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
pFieldEdit.GeometryDef_2 = pGeometryDef;
pFieldsEdit.AddField(pField);
//新建ObjectID字段
pField = new FieldClass();
pFieldEdit = pField as IFieldEdit;
pFieldEdit.Name_2 = "ObjectID";
pFieldEdit.AliasName_2 = "id";
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeSmallInteger;
pFieldsEdit.AddField(pField);
//新建Name字段
pField = new FieldClass();
pFieldEdit = pField as IFieldEdit;
pFieldEdit.Length_2 = 32;
pFieldEdit.Name_2 = "Name";
pFieldEdit.AliasName_2 = "Name";
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
pFieldsEdit.AddField(pField);
//最后创建Shp文件
IFeatureClass pFeatureClass = pFeatureWorkspace.CreateFeatureClass(fileName + ".shp", pFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
}
在创建字段的时候,会默认创建FID字段。显示声明字段类型为esriFieldType.esriFieldTypeOID,该字段不会被创建。
2、删除shp文件
private void DeleteShp()
{
//打开shp工作空间
string fileName = "Some";//shp文件名
string filePath = @"E:\HiOS\TestShp";//shp文件位置
IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactory();//文件夹
//IWorkspaceFactory pWorkspaceFactory = new AccessWorkspaceFactoryClass();//Access格式的个人地理数据库
IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(filePath, 0);
IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;
IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(fileName);//fileName为文件名(不包含路径)
IDataset pFeaDataset = pFeatureClass as IDataset;
pFeaDataset.Delete();
}
OpenFeatureClass()方法可用于打开一个已经存在的要素类。