/// <summary>
/// 根据DataTable创建矢量点文件
/// </summary>
/// <param name="pFeatureWorkspace"></param>
/// <param name="pInputDataTable"></param>
/// <param name="strFileName"></param>
/// <param name="strXFieldName"></param>
/// <param name="strYFieldName"></param>
/// <param name="pSpatialReference"></param>
/// <returns></returns>
public static IFeatureClass CreatePointFeatureClassFromDataTable(IFeatureWorkspace pFeatureWorkspace, DataTable pInputDataTable, string strFileName, string strXFieldName, string strYFieldName, ISpatialReference pSpatialReference)
{
IFields pFileds = new FieldsClass();
IFieldsEdit pFieldsEdit = (IFieldsEdit)pFileds;
IField pField;
IFieldEdit pFieldEdit;
DataColumnCollection pColumns = pInputDataTable.Columns;
for (int i = 0; i < pColumns.Count; i++)
{
pField = new FieldClass();
pFieldEdit = (IFieldEdit)pField;
pFieldEdit.Name_2 = pColumns[i].ColumnName;
//判断字段类型
if (pColumns[i].DataType.ToString().Trim() == "System.String")
pFieldEdit.Type_2 = ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeString;
else
if (pColumns[i].DataType.ToString().Trim() == "System.Single")
pFieldEdit.Type_2 = ESRI.ArcGIS.Geodatabase.esriFieldType.esriFieldTypeSingle;
else
if (pColumns[i].DataType.ToString().Trim() == "System.DateTime")
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDate;
else
if (pColumns[i].DataType.ToString().Trim() == "System.Decimal")
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
else
if (pColumns[i].DataType.ToString().Trim() == "System.Byte" ||
pColumns[i].DataType.ToString().Trim() == "System.Int16" ||
pColumns[i].DataType.ToString().Trim() == "System.Int32" ||
pColumns[i].DataType.ToString().Trim() == "System.Int64")
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger;
pFieldsEdit.AddField(pField);
}
IGeometryDef pGeometryDef = new GeometryDefClass();
IGeometryDefEdit pGeometryDefEdit = pGeometryDef as IGeometryDefEdit;
pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;
pGeometryDefEdit.SpatialReference_2 = pSpatialReference;
pField = new FieldClass();
pFieldEdit = (IFieldEdit)pField;
pFieldEdit.Name_2 = "shape";
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
pFieldEdit.GeometryDef_2 = pGeometryDefEdit;
pFieldsEdit.AddField(pFieldEdit);
IFeatureClass pOutFeatureClass = pFeatureWorkspace.CreateFeatureClass(strFileName, pFieldsEdit, null, null, esriFeatureType.esriFTSimple, "shape", "");
//添加内容
IFeatureCursor pFeatureCursor = pOutFeatureClass.Insert(true);
DataRowCollection pRows = pInputDataTable.Rows;
int iXFieldIndex = pOutFeatureClass.Fields.FindField(strXFieldName);
int iYFieldIndex = pOutFeatureClass.Fields.FindField(strYFieldName);
for (int i = 0; i < pRows.Count; i++)
{
string strXValue = pRows[i][strXFieldName].ToString();
string strYValue = pRows[i][strYFieldName].ToString();
if (!string.IsNullOrEmpty(strXFieldName) && !string.IsNullOrEmpty(strYFieldName))
{
double dXValue = Convert.ToDouble(strXValue);
double dYValue = Convert.ToDouble(strYValue);
IPoint pPoint = new PointClass();
pPoint.X = dXValue;
pPoint.Y = dYValue;
IFeatureBuffer pFeatureBuffer = pOutFeatureClass.CreateFeatureBuffer();
pFeatureBuffer.Shape = pPoint;
for (int j = 0; j < pColumns.Count; j++)
{
string strFiledName = pColumns[j].ColumnName;
if (pRows[i][j]==System.DBNull.Value) continue;
pFeatureBuffer.set_Value(pOutFeatureClass.Fields.FindField(strFiledName), pRows[i][j]);
}
pFeatureCursor.InsertFeature(pFeatureBuffer);
}
pFeatureCursor.Flush();
}
System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor);
return pOutFeatureClass;
}