分享給有需要的人,代碼質量勿噴。
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", "");
}