模型中对于gdb的IO
(1)Input
/// <summary>
/// 源要素类
/// </summary>
private FeatureClassDTO SourceFeatureClassDTO;
base.InputParametersMeta.Add(nameof(this.SourceFeatureClassDTO),
new Property()
.SetName(nameof(this.SourceFeatureClassDTO))
.SetAlias("输入图层")
.SetDataType(EnumValueMetaType.TYPE_FEATURECLASS)
.SetRemark("输入图层"));
this.SourceFeatureClassDTO = (FeatureClassDTO)parameters[nameof(this.SourceFeatureClassDTO)].Value;
(2)Output
//首先拷贝一个GDB
protected void CopyGdb(IFeatureClass featureClass, IWorkspace sourceWorkspace, out string fileName, out string baseDir)
{
string message = string.Empty;
fileName = string.IsNullOrEmpty(this.inputFeatureClass.Name) ? $"T{GuidUtil.NewGuid()}" : this.inputFeatureClass.Name;
baseDir = System.IO.Path.Combine(GlobalSystemConfig.CurrentBaseWorkingDirectory, GlobalSystemConfig.DIR_TEMP, $"{ GuidUtil.NewGuid()}.gdb");
WorkspaceUtil.CreateFileGDB(baseDir);
IQueryFilter filter = new QueryFilterClass();
filter = null;
bool runResult = ExportToGDB(featureClass, baseDir, fileName, filter, out message);
WorkspaceUtil.ReleaseComObject(new object[] {
featureClass,
sourceWorkspace
});
}
//其中ExportToGDB方法:
public static bool ExportToGDB(IFeatureClass pSourceFeatureClass, string gdbPath, string shpName, IQueryFilter pFilter, out string message)
{
message = "";
IDataset inDataSet = null;
IFeatureClassName inFCName = null;
IWorkspace inWorkspace = null;
IWorkspace outWorkspace = null;
IWorkspaceFactory pFact = null;
IDataset outDataSet = null;
IWorkspaceName outWorkspaceName = null;
IFeatureClassName outFCName = null;
IDatasetName dataSetName = null;
IFieldChecker fieldChecker = null;
IFeatureDataConverter featureDataConverter = null;
try
{
inDataSet = pSourceFeatureClass as IDataset;
inFCName = inDataSet.FullName as IFeatureClassName;
inWorkspace = inDataSet.Workspace;
pFact = new FileGDBWorkspaceFactoryClass();
outWorkspace = pFact.OpenFromFile(gdbPath, 0);
outDataSet = outWorkspace as IDataset;
outWorkspaceName = outDataSet.FullName as IWorkspaceName;
outFCName = new FeatureClassNameClass();
dataSetName = outFCName as IDatasetName;
dataSetName.WorkspaceName = outWorkspaceName;
dataSetName.Name = shpName;
fieldChecker = new FieldCheckerClass();
fieldChecker.InputWorkspace = inWorkspace;
fieldChecker.ValidateWorkspace = outWorkspace;
IFields fields = pSourceFeatureClass.Fields;
IFields outFields = null;
IEnumFieldError enumFieldError = null;
fieldChecker.Validate(fields, out enumFieldError, out outFields);
featureDataConverter = new FeatureDataConverterClass();
featureDataConverter.ConvertFeatureClass(inFCName, pFilter, null, outFCName, null, outFields, "", 1000, 0);
}
catch (System.Exception ex)
{
throw new BusinessException((int)EnumSystemStatusCode.DME_ERROR, ex.ToString());
}
finally
{
WorkspaceUtil.ReleaseComObject(new object[] {
inDataSet,
inFCName,
inWorkspace,
outWorkspace,
pFact,
outDataSet,
outWorkspaceName,
outFCName,
dataSetName,
fieldChecker,
featureDataConverter
});
}
return true;
}
//随后进行操作
/*************************业务逻辑********************************/
//导出GDB
this.featureResult = new FeatureClassDTO
{
Name = $"{fileName}",
Source = new DataSourceDTO()
{
Type = nameof(EnumDataSourceType.GDB),
Connection = JsonConvert.SerializeObject(new LocalConn()
{
Path = baseDir,
Type = EnumDataSourceType.GDB
})
}
};
NPOI
NPOI,顾名思义,就是POI的.NET版本。POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件。
(1)创建Workbook和Sheet
IWorkbook workbook = new XSSFWorkbook();
ISheet sheet = workbook.CreateSheet("Sheet1");
//这里进行操作,随后保存到文件
FileStreamfile =new FileStream(@"test.xls", FileMode.Create);
workbook.Write(file);
file.Close();
(2)单元格操作
HSSFRow row1=sheet1.CreateRow(0);
HSSFCell cel1 = row1.CreateCell(0);
HSSFCell cel2 = row1.CreateCell(1);
HSSFCell cel3 = row1.CreateCell(2);
HSSFCell celSum = row1.CreateCell(4);
cel1.SetCellFormula("1+2*3");//计算1+2*3后赋值
cel2.SetCellValue(5);//直接赋值
cel3.SetCellFormula("A1*B1");//计算A1*B1后赋值
celSum.SetCellFormula("sum(A1,C1)");//使用sum函数计算后赋值
DATATABLE
(1)创建表结构并插入数据
//创建一个空表
DataTable dt = new DataTable();
DataColumn column;
DataRow row;
//创建第一列
column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.ColumnName = "ID";
column.ReadOnly = true;
column.Unique = true;
dt.Columns.Add(column);
//创建第二列
column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = "NAME";
dt.Columns.Add(column);
//创建行
row = dt.NewRow();
row["ID"] = 1;
row["NAME"] = "小明";
row["AGE"] = "18";
dt.Rows.Add(row);
(2)复制表结构
DataTable dt2 = dt.Clone();//这里的dt是上面已经建好的
DataRow row = dt2.NewRow();
row["ID"] = 2;
row["NAME"] = "小山";
row["AGE"] = "15";
dt2.Rows.Add(row);
(3)复制表
DataTable dt3 = dt.Copy();//这里的dt是上面已经建好的