将图层导入SDE

81 篇文章 0 订阅

将图层导入SDE有两种情况,一种是直接导入到SDE的根目录下,一种是SDE中用户建立了要素集(Dataset),然后往某个要素集中导入数据

第一种情况:直接往SDE根目录下导入图层:

view plaincopy to clipboardprint?
bool impLayerByName(IName lName,IWorkspace inWorkspace,IWorkspace outWorkspace)  
      {  
          try 
          {  
              //Open input Featureclass to get field definitions.              
              IFeatureClass inFeatureClass = (IFeatureClass)lName.Open();  
              IFeatureClassName inFeatureClassName = (IFeatureClassName)lName;  
              // Set out dataset and feature class names.  
              IFeatureClassName outFeatureClassName = new FeatureClassNameClass();  
              IDatasetName outDatasetName = (IDatasetName)outFeatureClassName;  
              IDataset outWorkspaceDataset = (IDataset)outWorkspace;  
              IWorkspaceName outWorkspaceName = (IWorkspaceName)outWorkspaceDataset.FullName;  
              outDatasetName.WorkspaceName = outWorkspaceName;  
              //string outFullName = ((IDatasetName)lName).Name;  
              //string outFileName = outFullName.Substring(outFullName.LastIndexOf(".") + 1);  
              outDatasetName.Name = "SDE."+((IDatasetName)lName).Name;  
              //Validate the field names.  
              IFieldChecker fieldChecker = new FieldCheckerClass();  
              IFields outFeatureClassFields;  
              IFields inFeatureClassFields = inFeatureClass.Fields;  
              IEnumFieldError enumFieldError;  
              fieldChecker.InputWorkspace = inWorkspace;  
              fieldChecker.ValidateWorkspace = outWorkspace;  
              // Validate the fields.  
              fieldChecker.Validate(inFeatureClassFields,out enumFieldError,out outFeatureClassFields);  
              // Set up the geometry definition.  
              IField geometryField;  
              geometryField = outFeatureClassFields.get_Field(outFeatureClassFields.FindField(inFeatureClass.ShapeFieldName));  
              // Get the geometry field's geometry definition.  
              IGeometryDef geometryDef = geometryField.GeometryDef;  
              //Set up the IQueryFilter to convert all the features by leaving a blank WhereClause  
              QueryFilter qf = new QueryFilterClass();  
              qf.WhereClause = "";  
              //Load the feature class  
              IFeatureDataConverter fctofc = new FeatureDataConverterClass();  
              IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(inFeatureClassName,qf,null,outFeatureClassName,geometryDef,outFeatureClassFields,"",1000,0);  
              return true;  
          }  
          catch (Exception ex)  
          {  
              MessageBox.Show(ex.Message);  
              return false;  
          }  
      } 
  bool impLayerByName(IName lName,IWorkspace inWorkspace,IWorkspace outWorkspace)
        {
            try
            {
                //Open input Featureclass to get field definitions.           
                IFeatureClass inFeatureClass = (IFeatureClass)lName.Open();
                IFeatureClassName inFeatureClassName = (IFeatureClassName)lName;
                // Set out dataset and feature class names.
                IFeatureClassName outFeatureClassName = new FeatureClassNameClass();
                IDatasetName outDatasetName = (IDatasetName)outFeatureClassName;
                IDataset outWorkspaceDataset = (IDataset)outWorkspace;
                IWorkspaceName outWorkspaceName = (IWorkspaceName)outWorkspaceDataset.FullName;
                outDatasetName.WorkspaceName = outWorkspaceName;
                //string outFullName = ((IDatasetName)lName).Name;
                //string outFileName = outFullName.Substring(outFullName.LastIndexOf(".") + 1);
                outDatasetName.Name = "SDE."+((IDatasetName)lName).Name;
                //Validate the field names.
                IFieldChecker fieldChecker = new FieldCheckerClass();
                IFields outFeatureClassFields;
                IFields inFeatureClassFields = inFeatureClass.Fields;
                IEnumFieldError enumFieldError;
                fieldChecker.InputWorkspace = inWorkspace;
                fieldChecker.ValidateWorkspace = outWorkspace;
                // Validate the fields.
                fieldChecker.Validate(inFeatureClassFields,out enumFieldError,out outFeatureClassFields);
                // Set up the geometry definition.
                IField geometryField;
                geometryField = outFeatureClassFields.get_Field(outFeatureClassFields.FindField(inFeatureClass.ShapeFieldName));
                // Get the geometry field's geometry definition.
                IGeometryDef geometryDef = geometryField.GeometryDef;
                //Set up the IQueryFilter to convert all the features by leaving a blank WhereClause
                QueryFilter qf = new QueryFilterClass();
                qf.WhereClause = "";
                //Load the feature class
                IFeatureDataConverter fctofc = new FeatureDataConverterClass();
                IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(inFeatureClassName,qf,null,outFeatureClassName,geometryDef,outFeatureClassFields,"",1000,0);
                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }
        }
 

其中,lName是源图层的IName,inWorkspace是源图层所在的工作空间,outWorkspace是要导出到的工作空间,这段代码默认将导出后的图层命名为与源图层一样

第二种情况:往SDE中某个要素集导入图层

view plaincopy to clipboardprint?
bool impLayerByNameIntoDataset(IName lName,IWorkspace inWorkspace,IFeatureDataset featureDataset)  
       {  
           try   
        {  
               //IFeatureClassDescription fcDesc = new FeatureClassDescriptionClass();  
               //IObjectClassDescription ocDesc = (IObjectClassDescription)fcDesc;  
            //Open input Featureclass to get field definitions.              
               IFeatureClass inFeatureClass = (IFeatureClass)lName.Open();  
               IFeatureClassName inFeatureClassName = (IFeatureClassName)lName;  
               // Set out dataset and feature class names.  
               IFeatureClassName outFeatureClassName = new FeatureClassNameClass();  
               IDatasetName outDatasetName = (IDatasetName)outFeatureClassName;  
               IDataset outWorkspaceDataset = (IDataset)featureDataset.Workspace;  
               IWorkspaceName outWorkspaceName = (IWorkspaceName)outWorkspaceDataset.FullName;  
               outDatasetName.WorkspaceName = outWorkspaceName;  
               outDatasetName.Name = "SDE." + ((IDatasetName)lName).Name;  
               //Validate the field names.  
               IFieldChecker fieldChecker = new FieldCheckerClass();  
               IFields outFeatureClassFields;  
               IFields inFeatureClassFields = inFeatureClass.Fields;  
               IEnumFieldError enumFieldError;  
               fieldChecker.InputWorkspace = inWorkspace;  
               fieldChecker.ValidateWorkspace = featureDataset.Workspace;  
                                 
               // Validate the fields.  
               fieldChecker.Validate(inFeatureClassFields,out enumFieldError,out outFeatureClassFields);  
               //featureDataset.CreateFeatureClass("SDE." + ((IDatasetName)lName).Name,outFeatureClassFields,ocDesc.InstanceCLSID,ocDesc.ClassExtensionCLSID,esriFeatureType.esriFTSimple,fcDesc.ShapeFieldName,"");  
               // Set up the geometry definition.  
               IField geometryField;  
               geometryField = outFeatureClassFields.get_Field(outFeatureClassFields.FindField(inFeatureClass.ShapeFieldName));  
               // Get the geometry field's geometry definition.  
               IGeometryDef geometryDef = geometryField.GeometryDef;  
               //Set up the IQueryFilter to convert all the features by leaving a blank WhereClause  
               IQueryFilter qf = new QueryFilterClass();  
               qf.WhereClause = "";  
               //Load the feature class  
               IFeatureDataConverter fctofc = new FeatureDataConverterClass();  
               IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(inFeatureClassName,qf,(IFeatureDatasetName)featureDataset.FullName,outFeatureClassName,geometryDef,outFeatureClassFields,"",1000,0);  
                                 
               return true;  
        }  
        catch (Exception ex)  
        {  
            MessageBox.Show(ex.Message);  
            return false;  
        }  
             
       } 
 bool impLayerByNameIntoDataset(IName lName,IWorkspace inWorkspace,IFeatureDataset featureDataset)
        {
            try
         {
                //IFeatureClassDescription fcDesc = new FeatureClassDescriptionClass();
                //IObjectClassDescription ocDesc = (IObjectClassDescription)fcDesc;
          //Open input Featureclass to get field definitions.           
                IFeatureClass inFeatureClass = (IFeatureClass)lName.Open();
                IFeatureClassName inFeatureClassName = (IFeatureClassName)lName;
                // Set out dataset and feature class names.
                IFeatureClassName outFeatureClassName = new FeatureClassNameClass();
                IDatasetName outDatasetName = (IDatasetName)outFeatureClassName;
                IDataset outWorkspaceDataset = (IDataset)featureDataset.Workspace;
                IWorkspaceName outWorkspaceName = (IWorkspaceName)outWorkspaceDataset.FullName;
                outDatasetName.WorkspaceName = outWorkspaceName;
                outDatasetName.Name = "SDE." + ((IDatasetName)lName).Name;
                //Validate the field names.
                IFieldChecker fieldChecker = new FieldCheckerClass();
                IFields outFeatureClassFields;
                IFields inFeatureClassFields = inFeatureClass.Fields;
                IEnumFieldError enumFieldError;
                fieldChecker.InputWorkspace = inWorkspace;
                fieldChecker.ValidateWorkspace = featureDataset.Workspace;
                               
                // Validate the fields.
                fieldChecker.Validate(inFeatureClassFields,out enumFieldError,out outFeatureClassFields);
                //featureDataset.CreateFeatureClass("SDE." + ((IDatasetName)lName).Name,outFeatureClassFields,ocDesc.InstanceCLSID,ocDesc.ClassExtensionCLSID,esriFeatureType.esriFTSimple,fcDesc.ShapeFieldName,"");
                // Set up the geometry definition.
                IField geometryField;
                geometryField = outFeatureClassFields.get_Field(outFeatureClassFields.FindField(inFeatureClass.ShapeFieldName));
                // Get the geometry field's geometry definition.
                IGeometryDef geometryDef = geometryField.GeometryDef;
                //Set up the IQueryFilter to convert all the features by leaving a blank WhereClause
                IQueryFilter qf = new QueryFilterClass();
                qf.WhereClause = "";
                //Load the feature class
                IFeatureDataConverter fctofc = new FeatureDataConverterClass();
                IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(inFeatureClassName,qf,(IFeatureDatasetName)featureDataset.FullName,outFeatureClassName,geometryDef,outFeatureClassFields,"",1000,0);
                               
                return true;
         }
         catch (Exception ex)
         {
          MessageBox.Show(ex.Message);
          return false;
         }
           
        }
 

其中,lName是源图层的IName,inWorkspace是源图层所在的工作空间,featureDataset是目标数据集,这段代码默认将导出后的图层命名为与源图层一样

附:获取SDE中数据集(Dataset)的方法:

view plaincopy to clipboardprint?
 //在SDE里查找名称为datasetName的Dataset  
IFeatureDataset outSet = null;  
IEnumDatasetName idNames = outSpace.get_DatasetNames(esriDatasetType.esriDTFeatureDataset);  
IDatasetName idNames.Reset();  
fNameBase = idNames.Next();  
while (fNameBase != null)  
{  
     if(fNameBase.Name == datasetName)    outSet = (IFeatureDataset)((IName)fNameBase).Open();                     
     fNameBase = idNames.Next();  

 //在SDE里查找名称为datasetName的Dataset
IFeatureDataset outSet = null;
IEnumDatasetName idNames = outSpace.get_DatasetNames(esriDatasetType.esriDTFeatureDataset);
IDatasetName idNames.Reset();
fNameBase = idNames.Next();
while (fNameBase != null)
{
     if(fNameBase.Name == datasetName)    outSet = (IFeatureDataset)((IName)fNameBase).Open();                  
     fNameBase = idNames.Next();
}

其中outSpace为已经打开的SDE工作空间

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/rrrrssss00/archive/2009/04/14/4071573.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值