根据txt坐标点,自动生成点位shp文件。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using ESRI.ArcGIS.Geodatabase;using ESRI.ArcGIS.DataSourcesFile;using ESRI.ArcGIS.Geometry;using System.IO;namespace GeneratePointUI{ public class GeneratePointDAL { public static void GeneratePoint(string fileName,string outPutPath,string prjFileName, List<PointInfoModel> allData) { string shapName = System.IO.Path.GetFileNameWithoutExtension(fileName) ".shp"; string prjName = System.IO.Path.GetFileNameWithoutExtension(fileName) ".prj"; string dbfName = System.IO.Path.GetFileNameWithoutExtension(fileName) ".dbf"; string shxName = System.IO.Path.GetFileNameWithoutExtension(fileName) ".shx"; string sbnName = System.IO.Path.GetFileNameWithoutExtension(fileName) ".sbn"; string sbxName = System.IO.Path.GetFileNameWithoutExtension(fileName) ".sbx"; //开始生成shp; string shpName = System.IO.Path.GetFileNameWithoutExtension(fileName); //获取生成的矢量 //打开shpfile的工作空间 IWorkspaceFactory pWorkSpaceFac = new ShapefileWorkspaceFactoryClass(); IFeatureWorkspace pFeatureWorkSpace = pWorkSpaceFac.OpenFromFile(outPutPath, 0) as IFeatureWorkspace; //开始添加属性字段 IFields pFields = new FieldsClass(); IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields; //添加字段"OID" IField oidField = new FieldClass(); IFieldEdit oidFieldEdit = (IFieldEdit)oidField; oidFieldEdit.Name_2 = "OID"; oidFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID; pFieldsEdit.AddField(oidField); //设置空间参考 IGeometryDef geometryDef = SetSpatialReference(prjFileName); //添加字段“Shape”; IField geometryField = new FieldClass(); IFieldEdit geometryFieldEdit = (IFieldEdit)geometryField; geometryFieldEdit.Name_2 = "Shape"; geometryFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; geometryFieldEdit.GeometryDef_2 = geometryDef; pFieldsEdit.AddField(geometryField); IField nameField = new FieldClass(); IFieldEdit nameFieldEdit = (IFieldEdit)nameField; //添加字段“点号” nameField = new FieldClass(); nameFieldEdit = (IFieldEdit)nameField; nameFieldEdit.Name_2 = "点号"; nameFieldEdit.Type_2 = esriFieldType.esriFieldTypeString; pFieldsEdit.AddField(nameField); //添加字段“Xvalue” nameField = new FieldClass(); nameFieldEdit = (IFieldEdit)nameField; nameFieldEdit.Name_2 = "Xvalue"; nameFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; pFieldsEdit.AddField(nameField); //添加字段“Yvalue” nameField = new FieldClass(); nameFieldEdit = (IFieldEdit)nameField; nameFieldEdit.Name_2 = "Yvalue"; nameFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; pFieldsEdit.AddField(nameField); //添加字段“Hvalue” nameField = new FieldClass(); nameFieldEdit = (IFieldEdit)nameField; nameFieldEdit.Name_2 = "Hvalue"; nameFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble; pFieldsEdit.AddField(nameField); IFieldChecker fieldChecker = new FieldCheckerClass(); IEnumFieldError enumFieldError = null; IFields validatedFields = null; fieldChecker.ValidateWorkspace = (IWorkspace)pFeatureWorkSpace; fieldChecker.Validate(pFields, out enumFieldError, out validatedFields); //在工作空间中生成FeatureClass; IFeatureClass pNewFeaCls = pFeatureWorkSpace.CreateFeatureClass(shpName, validatedFields, null, null, esriFeatureType.esriFTSimple, "Shape", ""); SetValueTOFeature(pNewFeaCls, allData); } private static object pMissing = Type.Missing; private static void SetValueTOFeature(IFeatureClass pNewFeaCls, List<PointInfoModel> allData) { IGeometryCollection pGeometryCollection = new MultipointClass(); foreach (PointInfoModel pim in allData) { IFeature feature = null; IPoint pt = new PointClass(); pt.PutCoords(pim.yValue, pim.xValue); //GetGeo(pt); pGeometryCollection.AddGeometry(pt as IGeometry, ref pMissing, ref pMissing); feature = pNewFeaCls.CreateFeature(); feature.Shape = pt as IGeometry; feature.set_Value(2, pim.pointName); feature.set_Value(3,pim.xValue); feature.set_Value(4, pim.yValue); feature.set_Value(5, pim.hValue); feature.Store(); } } private static IGeometryDef SetSpatialReference(string prjFileName) { //设置生成图的空间坐标参考系统; IGeometryDef geometryDef = new GeometryDefClass(); IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef; geometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint; ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironmentClass(); ISpatialReference spatialReference1 = new UnknownCoordinateSystemClass(); ISpatialReference spatialReference = spatialReferenceFactory.CreateESRISpatialReferenceFromPRJFile(prjFileName); ISpatialReferenceResolution spatialReferenceResolution = (ISpatialReferenceResolution)spatialReference; spatialReferenceResolution.ConstructFromHorizon(); ISpatialReferenceTolerance spatialReferenceTolerance = (ISpatialReferenceTolerance)spatialReference; spatialReferenceTolerance.SetDefaultXYTolerance(); geometryDefEdit.SpatialReference_2 = spatialReference; return geometryDef; } //设置点的空间参考系统 private IPoint GetGeo(IPoint pt) { ISpatialReferenceFactory pFactory = new SpatialReferenceEnvironmentClass(); IGeometry geo = (IGeometry)pt; geo.Project(pFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCS3Type.esriSRGeoCS_Xian1980)); return pt; } }}
评论