public static IFeatureLayer DatatableTolineMethod(DataTable dt, string tempPath)
{
//生成属性表的字段
IFields pFields = new FieldsClass();
IFieldsEdit pFieldsEdit;
pFieldsEdit = (IFieldsEdit)pFields;
for (int i = 0; i < dt.Columns.Count; i++)
{
IField pField = new FieldClass();
IFieldEdit pFieldEdit = (IFieldEdit)pField;
if (dt.Columns[i].ToString() == "shape")
{
pFieldEdit.Name_2 = "Shape";
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
IGeometryDef pGeometryDef = new GeometryDefClass();
IGeometryDefEdit pGDefEdit = (IGeometryDefEdit)pGeometryDef;
pGDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline; //线
pFieldEdit.GeometryDef_2 = pGeometryDef;
pFieldsEdit.AddField(pField);
continue;
}
if (dt.Columns[i].ToString().ToUpper() == "FID" || dt.Columns[i].ToString().ToUpper() == "XYZ")
{
continue;
}
pField = new FieldClass();
pFieldEdit = (IFieldEdit)pField;
pFieldEdit.Length_2 = 20;
pFieldEdit.Name_2 = dt.Columns[i].ToString();
pFieldEdit.Type_2 = ConvertStringToFiledType(dt.Columns[i].DataType);
pFieldsEdit.AddField(pField);
}
//创建一个工作空间
IWorkspaceFactory pWSF = new ShapefileWorkspaceFactoryClass();
IFeatureWorkspace pFWS = (IFeatureWorkspace)pWSF.OpenFromFile(tempPath, 0);
IFeatureClass pFeatureClass = pFWS.CreateFeatureClass("dd.shp", pFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
for (int i = 0; i < dt.Rows.Count; i++)
{
IPointCollection pPointColl = new PolylineClass();
object o = Type.Missing;
string[] strXYZ = dt.Rows[i]["XYZ"].ToString().Split(';');
for (int j = 0; j < strXYZ.Length - 1; j++)
{
IPoint pPoint = new PointClass();
pPoint.X = Convert.ToDouble(strXYZ[j].ToString().Split(',')[0]);
pPoint.Y = Convert.ToDouble(strXYZ[j].ToString().Split(',')[1]);
pPointColl.AddPoint(pPoint, ref o, ref o);
}
IFeature pFeature = pFeatureClass.CreateFeature();
pFeature.Shape = pPointColl as IPolyline;
//保存
pFeature.Store();
pFeature.set_Value(pFeature.Fields.FindField("note"), dt.Rows[i]["note"].ToString());
//pFeature.set_Value(pFeature.Fields.FindField("id"), dt.Rows[i]["id"].ToString());
//pFeature.set_Value(pFeature.Fields.FindField("grade"), dt.Rows[i]["grade"].ToString());
pFeature.Store();
}
IFeatureLayer pFeaturelayer = new FeatureLayerClass();
pFeaturelayer.FeatureClass = pFeatureClass;
pFeaturelayer.Name = "建筑物";
return pFeaturelayer;
}
/// <summary>
/// C#属性转换成为ARCGIS属性
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static esriFieldType ConvertStringToFiledType(Type t)
{
var code = Type.GetTypeCode(t);
switch (code)
{
case TypeCode.String:
return esriFieldType.esriFieldTypeString;
case TypeCode.Int16:
return esriFieldType.esriFieldTypeSmallInteger;
case TypeCode.Int32:
return esriFieldType.esriFieldTypeSingle;
default:
return esriFieldType.esriFieldTypeString;
}
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交