GIS开发进阶之路(九) 模型中对于gdb的IO、NPOI、DATATABLE

模型中对于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是上面已经建好的

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值