对于大神来说,,太简单了,希望大神能多多指导
name是生成的文件路径加文件名,DataSet是点坐标的集合
public static void AddToShp(AxMapControl mapControl, string name, DataSet ds)
{string inSHPpath = name;
string shpDirName = System.IO.Path.GetDirectoryName(inSHPpath);
string shpName1 = System.IO.Path.GetFileNameWithoutExtension(inSHPpath);
string shpFullName = shpName1 + ".shp";
string prjName = shpName1 + ".prj";
string dbfName = shpName1 + ".dbf";
string shxName = shpName1 + ".shx";
string sbnName = shpName1 + ".sbn";
string xmlName = shpName1 + ".shp.xml";
string sbxName = shpName1 + ".sbx";
if (System.IO.File.Exists(shpDirName + "\\" + shpFullName))
{
System.IO.File.Delete(shpDirName + "\\" + shpFullName);
}
if (System.IO.File.Exists(shpDirName + "\\" + prjName))
{ System.IO.File.Delete(shpDirName + "\\" + prjName); }
if (System.IO.File.Exists(shpDirName + "\\" + dbfName))
{ System.IO.File.Delete(shpDirName + "\\" + dbfName); }
if (System.IO.File.Exists(shpDirName + "\\" + shxName))
{System.IO.File.Delete(shpDirName + shxName);}
if (System.IO.File.Exists(shpDirName + "\\" + sbnName))
{ System.IO.File.Delete(shpDirName + "\\" + sbnName); }
if (System.IO.File.Exists(shpDirName + "\\" + xmlName))
{System.IO.File.Delete(shpDirName + "\\" + xmlName);}
if (System.IO.File.Exists(shpDirName + "\\" + sbxName))
{ System.IO.File.Delete(shpDirName + "\\" + sbxName); }
//开始生成shp;
string shpName = System.IO.Path.GetFileNameWithoutExtension(inSHPpath); //获取生成的矢量
//打开生成shapefile的工作空间;
IFeatureWorkspace pFWS = null;
IWorkspaceFactory pWSF = new ShapefileWorkspaceFactory();
pFWS = pWSF.OpenFromFile(shpDirName, 0) as IFeatureWorkspace;
//开始添加属性字段;
IFields fields = new FieldsClass();
IFieldsEdit fieldsEdit = (IFieldsEdit)fields;
//添加字段“OID”;
IField oidField = new FieldClass();
IFieldEdit oidFieldEdit = (IFieldEdit)oidField;
oidFieldEdit.Name_2 = "OID";
oidFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID;
fieldsEdit.AddField(oidField);
//设置生成图的空间坐标参考系统;
IGeometryDef geometryDef = new GeometryDefClass();
IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;
geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;
ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironmentClass();
ISpatialReference spatialReference = new UnknownCoordinateSystemClass();
ISpatialReferenceResolution spatialReferenceResolution = (ISpatialReferenceResolution)spatialReference;
spatialReferenceResolution.ConstructFromHorizon();
ISpatialReferenceTolerance spatialReferenceTolerance = (ISpatialReferenceTolerance)spatialReference;
spatialReferenceTolerance.SetDefaultXYTolerance();
geometryDefEdit.SpatialReference_2 = spatialReference;
//添加字段“Shape”;
IField geometryField = new FieldClass();
IFieldEdit geometryFieldEdit = (IFieldEdit)geometryField;
geometryFieldEdit.Name_2 = "Shape";
geometryFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
geometryFieldEdit.GeometryDef_2 = geometryDef;
fieldsEdit.AddField(geometryField);
IField nameField = new FieldClass();
IFieldEdit nameFieldEdit = (IFieldEdit)nameField;
//添加字段“X”;
nameField = new FieldClass();
nameFieldEdit = (IFieldEdit)nameField;
nameFieldEdit.Name_2 = "location_X";
nameFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
nameFieldEdit.Length_2 = 20;
fieldsEdit.AddField(nameField);
//添加字段“Y”;
nameField = new FieldClass();
nameFieldEdit = (IFieldEdit)nameField;
nameFieldEdit.Name_2 = "location_Y";
nameFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
nameFieldEdit.Length_2 = 20;
fieldsEdit.AddField(nameField);
IFieldChecker fieldChecker = new FieldCheckerClass();
IEnumFieldError enumFieldError = null;
IFields validatedFields = null;
fieldChecker.ValidateWorkspace = (IWorkspace)pFWS;
fieldChecker.Validate(fields, out enumFieldError, out validatedFields);
//在工作空间中生成FeatureClass;
IFeatureClass pNewFeaCls = pFWS.CreateFeatureClass(shpName, validatedFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
IFeature feature = null;
DataTable dt = ds.Tables[0];
IPointArray pts = new PointArrayClass();
IPoint pt = new PointClass();
IPointCollection polygon = new PolygonClass();
object missing = Type.Missing;
//esriSRGeoCS3Type.esriSRGeoCS_Xian1980
for (int i = 0; i < dt.Rows.Count; i++)
{
feature = pNewFeaCls.CreateFeature();
//根据自己的需要改动
string a = dt.Rows[i].ItemArray[2].ToString();string b = dt.Rows[i].ItemArray[3].ToString();
pt.PutCoords(double.Parse(a), double.Parse(b));
// GetGeo(pt.X, pt.Y);
pts.Add(pt);
polygon.AddPoint(pt, ref missing, ref missing);
feature.Shape = pt;
feature.Store();
feature.set_Value(2, pt.X.ToString());
feature.set_Value(3, pt.Y.ToString());
feature.Store();
}
}
从这个里面改出来的