public static ITable OpenTable(string pathName, string tableName)
{
IWorkspaceName workspaceName = new WorkspaceNameClass();
workspaceName.PathName = pathName;
workspaceName.WorkspaceFactoryProgID = "esriDataSourcesFile.shapefileworkspacefactory";
IDatasetName dataSetName = new TableNameClass();
dataSetName.Name = tableName;
dataSetName.WorkspaceName = workspaceName;
IName name = (IName)dataSetName;
ITable table = (ITable)name.Open();
return table;
}
public static DataTable ToDataTable(ITable mTable)
{
try
{
DataTable pTable = new DataTable();
for (int i = 0; i < mTable.Fields.FieldCount; i++)
pTable.Columns.Add(mTable.Fields.get_Field(i).Name);
ICursor pCursor = mTable.Search(null, false);
IRow pRrow = pCursor.NextRow();
while (pRrow != null)
{
DataRow pRow = pTable.NewRow();
string[] StrRow = new string[pRrow.Fields.FieldCount];
for (int i = 0; i < pRrow.Fields.FieldCount; i++)
StrRow[i] = pRrow.get_Value(i).ToString();
pRow.ItemArray = StrRow;
pTable.Rows.Add(pRow);
pRrow = pCursor.NextRow();
}
return pTable;
}
catch (Exception ex)
{
return null;
}
}
public static ITable ToITable(DataTable mTable,string tempPath)
{
try
{
#region 新建表字段
IField pField = null;
IFields fields = new FieldsClass();
IFieldsEdit fieldsEdit = (IFieldsEdit)fields;
fieldsEdit.FieldCount_2 = 3;
pField = new FieldClass();
IFieldEdit fieldEdit = (IFieldEdit)pField;
fieldEdit.Name_2 = "FromField";
fieldEdit.AliasName_2 = "开始字段值";
fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
fieldEdit.Editable_2 = true;
fieldsEdit.set_Field(0, pField);
IField pField1 = new FieldClass();
IFieldEdit fieldEdit1 = (IFieldEdit)pField1;
fieldEdit1.Name_2 = "ToField";
fieldEdit1.AliasName_2 = "结束字段值";
fieldEdit1.Type_2 = esriFieldType.esriFieldTypeDouble;
fieldEdit1.Editable_2 = true;
fieldsEdit.set_Field(1, pField1);
IField pField2 = new FieldClass();
IFieldEdit fieldEdit2 = (IFieldEdit)pField2;
fieldEdit2.Name_2 = "outField";
fieldEdit2.AliasName_2 = "分类字段值";
fieldEdit2.Type_2 = esriFieldType.esriFieldTypeDouble;
fieldEdit2.Editable_2 = true;
fieldsEdit.set_Field(2, pField2);
#endregion
ShapefileWorkspaceFactoryClass class2 = new ShapefileWorkspaceFactoryClass();
ESRI.ArcGIS.Geodatabase.IWorkspace pWorkspace = class2.OpenFromFile(tempPath, 0);
IFeatureWorkspace pFWS = pWorkspace as IFeatureWorkspace;
if (System.IO.File.Exists(tempPath + "重分类.dbf"))
System.IO.File.Delete(tempPath + "重分类.dbf");
ESRI.ArcGIS.Geodatabase.ITable pTable;
pTable = pFWS.CreateTable("重分类", fieldsEdit, null, null, "");
int count=mTable .Rows .Count ;
for(int k=0;k<count ;k++)
{
IRow row = pTable.CreateRow();
DataRow pRrow=mTable .Rows[k];
int rowNum= pRrow .ItemArray.Length;
for (int n=1;n<rowNum+1 ;n++)
{
row.set_Value(n,pRrow.ItemArray.GetValue(n-1));
row.Store ();
}
}
return pTable ;
}
catch (Exception ex)
{
return null;
}
}
public static bool SaveTable(DataTable mTable, string tempPath)
{
try
{
#region 新建表字段
IField pField = null;
IFields fields = new FieldsClass();
IFieldsEdit fieldsEdit = (IFieldsEdit)fields;
fieldsEdit.FieldCount_2 = 3;
pField = new FieldClass();
IFieldEdit fieldEdit = (IFieldEdit)pField;
fieldEdit.Name_2 = "FromField";
fieldEdit.AliasName_2 = "开始字段值";
fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
fieldEdit.Editable_2 = true;
fieldsEdit.set_Field(0, pField);
IField pField1 = new FieldClass();
IFieldEdit fieldEdit1 = (IFieldEdit)pField1;
fieldEdit1.Name_2 = "ToField";
fieldEdit1.AliasName_2 = "结束字段值";
fieldEdit1.Type_2 = esriFieldType.esriFieldTypeDouble;
fieldEdit1.Editable_2 = true;
fieldsEdit.set_Field(1, pField1);
IField pField2 = new FieldClass();
IFieldEdit fieldEdit2 = (IFieldEdit)pField2;
fieldEdit2.Name_2 = "outField";
fieldEdit2.AliasName_2 = "分类字段值";
fieldEdit2.Type_2 = esriFieldType.esriFieldTypeDouble;
fieldEdit2.Editable_2 = true;
fieldsEdit.set_Field(2, pField2);
#endregion
string path = System.IO.Path.GetDirectoryName(tempPath);
string fileName = System.IO.Path.GetFileName(tempPath);
ShapefileWorkspaceFactoryClass class2 = new ShapefileWorkspaceFactoryClass();
ESRI.ArcGIS.Geodatabase.IWorkspace pWorkspace = class2.OpenFromFile(path, 0);
IFeatureWorkspace pFWS = pWorkspace as IFeatureWorkspace;
if (System.IO.File.Exists(tempPath))
System.IO.File.Delete(tempPath);
fileName = fileName.Split('.')[0];
ESRI.ArcGIS.Geodatabase.ITable pTable;
pTable = pFWS.CreateTable(fileName, fieldsEdit, null, null, "");
int count = mTable.Rows.Count;
for (int k = 0; k < count; k++)
{
IRow row = pTable.CreateRow();
DataRow pRrow = mTable.Rows[k];
int rowNum = pRrow.ItemArray.Length;
for (int n = 1; n < rowNum + 1; n++)
{
row.set_Value(n, pRrow.ItemArray.GetValue(n - 1));
row.Store();
}
}
return true ;
}
catch (Exception ex)
{
return false ;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?