分享给有需要的人,代码质量勿喷。
private void xjCreateFeatureLayer(string xjLayerFullPath, string xjLayerType, ISpatialReference xjSpatialReference,
string[] xjFieldsName, string[] xjFieldsAliasName, string[] xjFieldsType)
{
//目录
string xjFileFolder = System.IO.Path.GetDirectoryName(xjLayerFullPath);
//文件名
string xjFileName = System.IO.Path.GetFileName(xjLayerFullPath);
//工作空间
IWorkspaceFactory xjShpWorkspaceFactory = new ShapefileWorkspaceFactory();
IFeatureWorkspace xjFeatureWorkspace = xjShpWorkspaceFactory.OpenFromFile(xjFileFolder, 0) as IFeatureWorkspace;
//检查文件是否存在
if (System.IO.File.Exists(xjLayerFullPath))
{
if (XtraMessageBox.Show("该文件夹下已经有同名文件,替换原文件?", "询问", MessageBoxButtons.OKCancel,
MessageBoxIcon.Question) == DialogResult.OK)
{
IFeatureWorkspace FWS = xjShpWorkspaceFactory.OpenFromFile(xjFileFolder, 0) as IFeatureWorkspace;
IFeatureClass pFeatureClass = FWS.OpenFeatureClass(xjFileName);
IDataset pDataset = pFeatureClass as IDataset;
pDataset.Delete();
}
else
return;
}
//字段检查
if (((xjFieldsName.Length != xjFieldsAliasName.Length) || (xjFieldsName.Length != xjFieldsType.Length)
|| (xjFieldsAliasName.Length != xjFieldsType.Length)))
{
XtraMessageBox.Show("字段名称或别名或类型数量不符!!!", "警告",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
//添加字段
IFields xjNewFields = new FieldsClass();
IFieldsEdit xjFieldsEdit = xjNewFields as IFieldsEdit;
IField xjField = new FieldClass();
IFieldEdit xjFieldEdit = xjField as IFieldEdit;
#region 设置类型:点线面
if ((xjLayerType == "Point") || (xjLayerType == "点"))
{
//添加Shape字段
xjFieldEdit.Name_2 = "Shape";
xjFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
IGeometryDef xjGeomDef = new GeometryDefClass();
IGeometryDefEdit xjGeomDefEdit = xjGeomDef as IGeometryDefEdit;
xjGeomDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;//点类型
xjGeomDefEdit.HasZ_2 = true;//图层是有高程值的
xjGeomDefEdit.SpatialReference_2 = xjSpatialReference;//设置空间参考
xjFieldEdit.GeometryDef_2 = xjGeomDef;
xjFieldsEdit.AddField(xjField);
}
else if ((xjLayerType == "Polyline") || (xjLayerType == "线"))
{
//添加Shape字段
xjFieldEdit.Name_2 = "Shape";
xjFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
IGeometryDef xjGeomDef = new GeometryDefClass();
IGeometryDefEdit xjGeomDefEdit = xjGeomDef as IGeometryDefEdit;
xjGeomDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;//线类型
//图层是有高程值的
xjGeomDefEdit.HasZ_2 = true;
//图层是有里程值的
xjGeomDefEdit.HasM_2 = true;
//设置空间参考
xjGeomDefEdit.SpatialReference_2 = xjSpatialReference;
xjFieldEdit.GeometryDef_2 = xjGeomDef;
xjFieldsEdit.AddField(xjField);
}
else if ((xjLayerType == "Polygon") || (xjLayerType == "面"))
{
//添加Shape字段
xjFieldEdit.Name_2 = "Shape";
xjFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
IGeometryDef xjGeomDef = new GeometryDefClass();
IGeometryDefEdit xjGeomDefEdit = xjGeomDef as IGeometryDefEdit;
xjGeomDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;//面类型
//设置空间参考
xjGeomDefEdit.SpatialReference_2 = xjSpatialReference;
xjFieldEdit.GeometryDef_2 = xjGeomDef;
xjFieldsEdit.AddField(xjField);
}
#endregion
//添加其它字段
for (int i = 0; i < xjFieldsName.Length; i++)
{
xjField = new FieldClass();
xjFieldEdit = xjField as IFieldEdit;
//名称
xjFieldEdit.Name_2 = xjFieldsName[i];
//别名
xjFieldEdit.AliasName_2 = xjFieldsAliasName[i];
//类型
if (xjFieldsType[i] == "int")
{
xjFieldEdit.Type_2 = esriFieldType.esriFieldTypeSmallInteger;
}
else if (xjFieldsType[i] == "double")
{
xjFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
}
else if (xjFieldsType[i] == "LongInt")
{
xjFieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger;
}
else if (xjFieldsType[i] == "float")
{
xjFieldEdit.Type_2 = esriFieldType.esriFieldTypeSingle;
}
else
{
xjFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
}
xjFieldsEdit.AddField(xjField);
}
//创要素数据集
IFeatureClass xjFeatureClass = xjFeatureWorkspace.CreateFeatureClass(xjFileName, xjNewFields,
null, null, esriFeatureType.esriFTSimple, "Shape", "");
}