ArcGIS Engine不同格式数据打开,对象创建,导入导出

打开类
public class clsOpenClass  
   {  
       public static void OpenFeatureClass(AxMapControl MapControl,  
           IFeatureClassName pFcName, ListView listview1)  
       {  
           try  
           {  
               MapControl.Map.ClearLayers();  
               MapControl.SpatialReference = null;  
               IName pName = pFcName as IName;  
               IFeatureClass pFc = pName.Open() as IFeatureClass;  
  
               listview1.Items.Clear();  
               listview1.Columns.Clear();  
               LoadListView(pFc, listview1);  
  
               IFeatureCursor pCursor = pFc.Search(null, false);  
               IFeature pfea = pCursor.NextFeature();  
               int j = 0;  
               while (pfea != null)  
               {  
                   ListViewItem lv = new ListViewItem();  
  
                   for (int i = 0; i < pfea.Fields.FieldCount; i++)  
                   {  
                       string sFieldName = pfea.Fields.get_Field(i).Name;  
                       lv.SubItems.Add(FeatureHelper.GetFeatureValue(pfea, sFieldName).ToString());  
                   }  
  
                   lv.Tag = pfea;  
                   if (j % 2 == 0)  
                   {  
                       lv.BackColor = System.Drawing.Color.GreenYellow;  
                   }  
                   listview1.Items.Add(lv);  
                   pfea = pCursor.NextFeature();  
                   j++;  
               }  
               LSGISHelper.OtherHelper.ReleaseObject(pCursor);  
               //最后加载图形数据  
                
                 
                   if (pFcName.FeatureType == esriFeatureType.esriFTRasterCatalogItem)  
                   {  
                       ESRI.ArcGIS.Carto.IGdbRasterCatalogLayer pGdbRCLayer = new ESRI.ArcGIS.Carto.GdbRasterCatalogLayerClass();  
                       pGdbRCLayer.Setup(pFc as ITable);  
                       MapControl.Map.AddLayer(pGdbRCLayer as ILayer);  
                   }  
                   else if( (pFcName.FeatureType == esriFeatureType.esriFTSimple)||  
                        (pFcName.FeatureType == esriFeatureType.esriFTComplexEdge)||  
                       (pFcName.FeatureType == esriFeatureType.esriFTComplexJunction)||  
                       (pFcName.FeatureType == esriFeatureType.esriFTSimpleEdge)||  
                        (pFcName.FeatureType == esriFeatureType.esriFTSimpleJunction))  
                   {  
                       
                       IFeatureLayer pLayer = new FeatureLayerClass();  
                       pLayer.FeatureClass = pFc;  
                       pLayer.Name = (pFc as IDataset).Name;  
                       MapControl.Map.AddLayer(pLayer as ILayer);  
                   }  
                   else if (pFcName.FeatureType == esriFeatureType.esriFTAnnotation)  
                   {  
                       ILayer pLayer = OpenAnnotationLayer(pFc);  
                       pLayer.Name = (pFc as IDataset).Name;  
                       MapControl.Map.AddLayer(pLayer as ILayer);  
                   }  
                    
               MapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);  
           }  
           catch (Exception ex)  
           { }  
       }  
       public static void OpenRasterDataset(AxMapControl MapControl,  
           IRasterDatasetName pRdName, ListView listview1)  
       {  
           MapControl.ClearLayers();  
           MapControl.SpatialReference = null;  
           listview1.Items.Clear();  
           listview1.Columns.Clear();  
           IDatasetName pDsName = pRdName as IDatasetName;  
           string sName = pDsName.Name;  
            
           IName pName = pRdName as IName;  
  
           IRasterDataset pRds = pName.Open() as IRasterDataset;  
           IRasterLayer pRL = new RasterLayerClass();  
           pRL.CreateFromDataset(pRds);  
           pRL.Name = sName;  
           MapControl.AddLayer(pRL as ILayer);  
           MapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);  
  
       }  
  
       public static void OpenMosaicDataset(AxMapControl MapControl,  
          IMosaicDatasetName pMdName, ListView listview1)  
       {  
           MapControl.ClearLayers();  
           MapControl.SpatialReference = null;  
           listview1.Items.Clear();  
           listview1.Columns.Clear();  
           IDatasetName pDsName = pMdName as IDatasetName;  
           string sName = pDsName.Name;  
  
           IName pName = pMdName as IName;  
  
           IMosaicDataset pMds = pName.Open() as IMosaicDataset;  
           IFeatureClass pFc = pMds.Catalog;  
           listview1.Items.Clear();  
           listview1.Columns.Clear();  
           LoadListView(pFc, listview1);  
  
           IFeatureCursor pCursor = pFc.Search(null, false);  
           IFeature pfea = pCursor.NextFeature();  
           int j = 0;  
           while (pfea != null)  
           {  
               ListViewItem lv = new ListViewItem();  
  
               for (int i = 0; i < pfea.Fields.FieldCount; i++)  
               {  
                   string sFieldName = pfea.Fields.get_Field(i).Name;  
                   lv.SubItems.Add(FeatureHelper.GetFeatureValue(pfea, sFieldName).ToString());  
               }  
  
               lv.Tag = pfea;  
               if (j % 2 == 0)  
               {  
                   lv.BackColor = System.Drawing.Color.GreenYellow;  
               }  
               listview1.Items.Add(lv);  
               pfea = pCursor.NextFeature();  
               j++;  
           }  
           LSGISHelper.OtherHelper.ReleaseObject(pCursor);  
           IMosaicLayer pML = new MosaicLayerClass();  
           pML.CreateFromMosaicDataset(pMds);  
            
           MapControl.AddLayer(pML as ILayer);  
           MapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);  
  
       }  
  
       public static void OpenTable(AxMapControl MapControl,   
           ITableName pTName, ListView listview1)  
       {  
           try  
           {  
               MapControl.Map.ClearLayers();  
               MapControl.SpatialReference = null;  
               MapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewAll, null, null);  
               IName pName = pTName as IName;  
               ITable pFc = pName.Open() as ITable;  
  
               listview1.Items.Clear();  
               listview1.Columns.Clear();  
               LoadListView(pFc, listview1);  
  
               ICursor pCursor = pFc.Search(null, false);  
               IRow pfea = pCursor.NextRow();  
               int j = 0;  
               while (pfea != null)  
               {  
                   ListViewItem lv = new ListViewItem();  
  
                   for (int i = 0; i < pfea.Fields.FieldCount; i++)  
                   {  
                       string sFieldName = pfea.Fields.get_Field(i).Name;  
                       lv.SubItems.Add(FeatureHelper.GetRowValue(pfea, sFieldName).ToString());  
                   }  
  
                   lv.Tag = pfea;  
                   if (j % 2 == 0)  
                   {  
                       lv.BackColor = System.Drawing.Color.GreenYellow;  
                   }  
                   listview1.Items.Add(lv);  
                   pfea = pCursor.NextRow();  
                   j++;  
               }  
               LSGISHelper.OtherHelper.ReleaseObject(pCursor);  
           }  
           catch { }  
       }  
       public static void LoadListView(IFeatureClass pFC, ListView listView1)  
       {  
           try  
           {  
                
               listView1.Columns.Clear();  
               //添加一个空  
               ColumnHeader columnHeader = new ColumnHeader();  
  
               listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {  
               columnHeader  
               });  
               columnHeader.Text = "";  
  
               for (int i = 0; i < pFC.Fields.FieldCount; i++)  
               {  
                   ColumnHeader columnHeader1 = new ColumnHeader();  
  
                   listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {  
               columnHeader1  
               });  
                   IFields pFields = pFC.Fields;  
  
                   IField pField = pFields.get_Field(i);  
  
  
                   columnHeader1.Text = pField.AliasName;  
  
  
               }  
  
           }  
           catch (Exception ex)  
           { }  
       }  
       public static void LoadListView(ITable pFC, ListView listView1)  
       {  
           try  
           {  
  
               listView1.Columns.Clear();  
               //添加一个空  
               ColumnHeader columnHeader = new ColumnHeader();  
  
               listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {  
               columnHeader  
               });  
               columnHeader.Text = "";  
  
               for (int i = 0; i < pFC.Fields.FieldCount; i++)  
               {  
                   ColumnHeader columnHeader1 = new ColumnHeader();  
  
                   listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {  
               columnHeader1  
               });  
                   IFields pFields = pFC.Fields;  
  
                   IField pField = pFields.get_Field(i);  
  
  
                   columnHeader1.Text = pField.AliasName;  
  
  
               }  
  
           }  
           catch (Exception ex)  
           { }  
       }  
  
       public static ILayer  OpenAnnotationLayer(IFeatureClass pfc)  
       {  
           IFDOGraphicsLayerFactory pfdof = new FDOGraphicsLayerFactoryClass();  
          IFeatureDataset pFDS=pfc.FeatureDataset;  
           IWorkspace pWS = pFDS.Workspace;  
           IFeatureWorkspace pFWS=pWS as IFeatureWorkspace;  
           ILayer pLayer = pfdof.OpenGraphicsLayer(pFWS, pFDS, (pfc as IDataset).Name );  
           return pLayer;  
       }  
          
   } 

创建类
public  class clsCreateClass  
    {  
        public IFeatureDataset CreateDataset(IWorkspace pWorkspace)  
        {  
            try  
            {  
                if (pWorkspace == null) return null;  
                IFeatureWorkspace aFeaWorkspace = pWorkspace as IFeatureWorkspace;  
                if (aFeaWorkspace == null) return null;  
                DatasetPropertiesForm aForm = new DatasetPropertiesForm();  
                aForm.HignPrecision = LSGISHelper.WorkspaceHelper.HighPrecision(pWorkspace);  
                if (aForm.ShowDialog() == DialogResult.OK)  
                {  
                    string dsName = aForm.FeatureDatasetName;  
                    ISpatialReference aSR = aForm.SpatialReference;  
                    IFeatureDataset aDS = aFeaWorkspace.CreateFeatureDataset(dsName, aSR);  
                    return aDS;  
                }  
            }  
            catch (Exception ex) { }  
            return null;  
        }  
        public IRasterDataset CreateRasterDataset(IWorkspace pWorkspace,string sName  
           )  
        {  
            try  
            {  
                IRasterWorkspaceEx pRWEx = pWorkspace as IRasterWorkspaceEx;  
                IGeometryDef pGDef=new GeometryDefClass ();  
                 
                IRasterDataset pRD = pRWEx.CreateRasterDataset(  
                    sName, 3, rstPixelType.PT_CHAR, null, null, null, null);  
            }  
            catch { }  
            return null;  
        }  
        public IFeatureClass CreateFeatureClass(IWorkspace pWorkspace)  
        {  
            if (pWorkspace == null) return null;  
            IFeatureWorkspace aFeaWorkspace = pWorkspace as IFeatureWorkspace;  
            if (aFeaWorkspace == null) return null;  
            IFeatureClass aClass = null;  
            FeatureClassWizard aForm = new FeatureClassWizard();  
            aForm.Workspace = pWorkspace;  
            if (aForm.ShowDialog() == DialogResult.OK)  
            {  
                while (true)  
                {  
                    string className = aForm.FeatureClassName;  
                    string aliasName = aForm.FeatureClassAliasName;  
                    IFields flds = aForm.Fields;  
                    try  
                    {  
                        aClass = aFeaWorkspace.CreateFeatureClass(className, flds  
                            , null, null, esriFeatureType.esriFTSimple, "SHAPE", null);  
                        if (!aliasName.Equals(""))  
                        {  
                            IClassSchemaEdit aClassEdit = aClass as IClassSchemaEdit;  
                            if (aClassEdit != null) aClassEdit.AlterAliasName(aliasName);  
                        }  
                        break;  
                    }  
                    catch (Exception ex)  
                    {  
                        //MessageBox.Show ("错误:\n"+ex.Message ,"新建特性类",  
                        //    MessageBoxButtons.OK ,MessageBoxIcon.Error );  
                        LSCommonHelper.MessageBoxHelper.ShowErrorMessageBox(ex, "");  
                    }  
                    aForm = new FeatureClassWizard();  
                    aForm.Workspace = pWorkspace;  
                    aForm.FeatureClassName = className;  
                    aForm.FeatureClassAliasName = aliasName;  
                    aForm.Fields = flds;  
                    if (aForm.ShowDialog() == DialogResult.Cancel) break;  
                }  
            }  
            return aClass;  
        }  
        public IFeatureClass CreateFeatureClass(IFeatureDataset pDS)  
        {  
            if (pDS == null) return null;  
            IFeatureClass aClass = null;  
  
            FeatureClassWizard aForm = new FeatureClassWizard();  
            aForm.Workspace = (pDS as IDataset).Workspace;  
            IGeoDataset pGDS = pDS as IGeoDataset;  
            if (pGDS != null)  
            {  
                aForm.SpatialReference = pGDS.SpatialReference;  
            }  
            if (aForm.ShowDialog() == DialogResult.OK)  
            {  
                while (true)  
                {  
                    string className = aForm.FeatureClassName;  
                    string aliasName = aForm.FeatureClassAliasName;  
                    IFields flds = aForm.Fields;  
  
                    try  
                    {  
                        aClass = pDS.CreateFeatureClass(className, flds  
                            , null, null, esriFeatureType.esriFTSimple, "SHAPE", null);  
                        if (!aliasName.Equals(""))  
                        {  
                            IClassSchemaEdit aClassEdit = aClass as IClassSchemaEdit;  
                            if (aClassEdit != null) aClassEdit.AlterAliasName(aliasName);  
                        }  
                        break;  
                    }  
                    catch (Exception ex)  
                    {  
                        LSCommonHelper.MessageBoxHelper.ShowErrorMessageBox(ex, "请选择高精度坐标系");  
                    }  
                    aForm = new FeatureClassWizard();  
                    aForm.Workspace = (pDS as IDataset).Workspace;  
                    aForm.FeatureClassName = className;  
                    aForm.FeatureClassAliasName = aliasName;  
                    
  
                    aForm.Fields = flds;  
                    if (aForm.ShowDialog() == DialogResult.Cancel) break;  
                }  
            }  
            return aClass;  
        }  
        public ITable CreateTable(IWorkspace pWorkspace)  
        {  
            if (pWorkspace == null) return null;  
            IFeatureWorkspace aFeaWorkspace = pWorkspace as IFeatureWorkspace;  
            if (aFeaWorkspace == null) return null;  
            ITable aTable = null;  
            DataTableWizard aWizard = new DataTableWizard();  
            aWizard.Workspace = pWorkspace;  
            if (aWizard.ShowDialog() == DialogResult.OK)  
            {  
                while (true)  
                {  
                    string tableName = aWizard.TableName;  
                    string aliasName = aWizard.TableAliasName;  
                    IFields flds = aWizard.Fields;  
                    try  
                    {  
                        aTable = aFeaWorkspace.CreateTable(tableName, flds  
                            , null, null, null);  
  
                        if (!aliasName.Equals(""))  
                        {  
                            IClassSchemaEdit aClassEdit = aTable as IClassSchemaEdit;  
                            aClassEdit.RegisterAsObjectClass("OBJECTID", null);  
                            if (aClassEdit != null) aClassEdit.AlterAliasName(aliasName);  
                        }  
                        break;  
                    }  
                    catch (Exception ex)  
                    {  
                        //MessageBox.Show ("错误:\n"+ex.Message ,"新建表",  
                        //    MessageBoxButtons.OK ,MessageBoxIcon.Error );  
                        LSCommonHelper.MessageBoxHelper.ShowErrorMessageBox(ex, "");  
                    }  
                    aWizard = new DataTableWizard();  
                    aWizard.Workspace = pWorkspace;  
                    aWizard.TableName = tableName;  
                    aWizard.TableAliasName = aliasName;  
                    aWizard.Fields = flds;  
                    if (aWizard.ShowDialog() == DialogResult.Cancel) break;  
                }  
            }  
            return aTable;  
        }  
    } 

导出类
public class clsExportClass  
    {  
     
        /// <summary>  
        /// 导出FeatureClass到Shapefile文件  
        /// </summary>  
        /// <param name="apFeatureClass"></param>  
        public static bool ExportFeatureClassToShp(string sPath,IFeatureClass apFeatureClass)  
        {  
            try  
            {  
                string ExportFileShortName = System.IO.Path.GetFileNameWithoutExtension(sPath);  
                if (ExportFileShortName == "")  
                {  
                    ExportFileShortName =LSCommonHelper.OtherHelper.GetRightName( (apFeatureClass as IDataset).Name,".");  
                }  
                string ExportFilePath = System.IO.Path.GetDirectoryName(sPath);  
                if (ExportFilePath == null)  
                {  
                    ExportFilePath = sPath;  
                }  
                //设置导出要素类的参数  
                IFeatureClassName pOutFeatureClassName = new FeatureClassNameClass();  
                IDataset pOutDataset = (IDataset)apFeatureClass;  
                pOutFeatureClassName = (IFeatureClassName)pOutDataset.FullName;  
                //创建一个输出shp文件的工作空间  
                IWorkspaceFactory pShpWorkspaceFactory = new ShapefileWorkspaceFactoryClass();  
                IWorkspaceName pInWorkspaceName = new WorkspaceNameClass();  
                pInWorkspaceName = pShpWorkspaceFactory.Create(ExportFilePath, ExportFileShortName, null, 0);  
  
                //创建一个要素集合  
                IFeatureDatasetName pInFeatureDatasetName = null;  
                //创建一个要素类  
                IFeatureClassName pInFeatureClassName = new FeatureClassNameClass();  
                IDatasetName pInDatasetClassName;  
                pInDatasetClassName = (IDatasetName)pInFeatureClassName;  
                pInDatasetClassName.Name = ExportFileShortName;//作为输出参数  
                pInDatasetClassName.WorkspaceName = pInWorkspaceName;  
                //通过FIELDCHECKER检查字段的合法性,为输出SHP获得字段集合  
                long iCounter;  
                IFields pOutFields, pInFields;  
        
                IField pGeoField;  
                IEnumFieldError pEnumFieldError = null;  
                pInFields = apFeatureClass.Fields;  
                IFieldChecker pFieldChecker = new FieldChecker();  
                pFieldChecker.Validate(pInFields, out pEnumFieldError, out pOutFields);  
                //通过循环查找几何字段  
                pGeoField = null;  
                for (iCounter = 0; iCounter < pOutFields.FieldCount; iCounter++)  
                {  
                    if (pOutFields.get_Field((int)iCounter).Type == esriFieldType.esriFieldTypeGeometry)  
                    {  
                        pGeoField = pOutFields.get_Field((int)iCounter);  
                        break;  
                    }  
                }  
                //得到几何字段的几何定义  
                IGeometryDef pOutGeometryDef;  
                IGeometryDefEdit pOutGeometryDefEdit;  
                pOutGeometryDef = pGeoField.GeometryDef;  
                //设置几何字段的空间参考和网格  
                pOutGeometryDefEdit = (IGeometryDefEdit)pOutGeometryDef;  
                pOutGeometryDefEdit.GridCount_2 = 1;  
                pOutGeometryDefEdit.set_GridSize(0, 1500000);  
  
                //开始导入  
                IFeatureDataConverter pShpToClsConverter = new FeatureDataConverterClass();  
                pShpToClsConverter.ConvertFeatureClass(pOutFeatureClassName, null, pInFeatureDatasetName, pInFeatureClassName, pOutGeometryDef, pOutFields, "", 1000, 0);  
                return true;  
            }  
            catch (Exception ex)  
            {  
             return false;  
            }  
        }  
        public static void ExportFeatureClass2Shapefile(IFeatureClassName pFcName)  
        {  
              
            IName pName = pFcName as IName;  
            IFeatureClass pFc = pName.Open() as IFeatureClass;  
  
            SaveFileDialog ofd = new SaveFileDialog();  
            ofd.Filter = "Shapefile文件(.shp)|*.shp";  
            if (ofd.ShowDialog() == DialogResult.OK)  
            {  
                string sPath = ofd.FileName;  
                if (ExportFeatureClassToShp(sPath, pFc))  
                {  
                    LSCommonHelper.MessageBoxHelper.ShowMessageBox("导出成功");  
                }  
                LSCommonHelper.MessageBoxHelper.ShowMessageBox("导出失败");  
            }  
        }  
  
        public static bool  ConvertFeatureDataset(IWorkspace sourceWorkspace, IWorkspace targetWorkspace,  
     string nameOfSourceFeatureDataset, string nameOfTargetFeatureDataset)  
        {  
            try  
            {  
                //create source workspace name    
                IDataset sourceWorkspaceDataset = (IDataset)sourceWorkspace;  
                IWorkspaceName sourceWorkspaceName = (IWorkspaceName)sourceWorkspaceDataset.FullName;  
                //create source dataset name     
                IFeatureDatasetName sourceFeatureDatasetName = new FeatureDatasetNameClass();  
                IDatasetName sourceDatasetName = (IDatasetName)sourceFeatureDatasetName;  
                sourceDatasetName.WorkspaceName = sourceWorkspaceName;  
                sourceDatasetName.Name = nameOfSourceFeatureDataset;  
                //create target workspace name     
                IDataset targetWorkspaceDataset = (IDataset)targetWorkspace;  
                IWorkspaceName targetWorkspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName;  
                //create target dataset name    
                IFeatureDatasetName targetFeatureDatasetName = new FeatureDatasetNameClass();  
                IDatasetName targetDatasetName = (IDatasetName)targetFeatureDatasetName;  
                targetDatasetName.WorkspaceName = targetWorkspaceName;  
                targetDatasetName.Name = nameOfTargetFeatureDataset;  
                //Convert feature dataset       
                IFeatureDataConverter featureDataConverter = new FeatureDataConverterClass();  
                featureDataConverter.ConvertFeatureDataset(sourceFeatureDatasetName, targetFeatureDatasetName, null, "", 1000, 0);  
                return true;  
            }  
            catch (Exception ex)  
            { return false; }  
        }  
  
        public static void ExportFeatureDataset2GDB(IDatasetName pDSName,int flag)  
        {  
            FolderBrowserDialog fbd = new FolderBrowserDialog();  
            fbd.Description = "选择保存路径";  
            if (fbd.ShowDialog() == DialogResult.OK)  
            {  
                string sPath = fbd.SelectedPath;  
                string sTemplate = "";  
                if (flag == 0)  
                {  
                    sTemplate = Application.StartupPath + @"\template\pgdb.mdb";  
                    File.Copy(sTemplate, sPath + "\\pgdb.mdb");  
                }  
                else  
                {  
                    sTemplate = Application.StartupPath + @"\template\fgdb.gdb";  
                    FileHelper.CopyDir(sTemplate, sPath+"\\fgdb.gdb");  
                }  
                 
                IName pName = pDSName as IName;  
                string sSrcDSName = pDSName.Name;  
                sSrcDSName = LSCommonHelper.OtherHelper.GetRightName(sSrcDSName, ".");  
                IDataset pDS = pName.Open() as IDataset;  
                IWorkspace pSrcWS = pDS.Workspace;  
                IWorkspace pDesWS = null;  
                if (flag == 0)  
                {  
                    pDesWS = LSGISHelper.WorkspaceHelper.GetAccessWorkspace(sPath + "\\pgdb.mdb");  
                }  
                else  
                {  
                    pDesWS = LSGISHelper.WorkspaceHelper.GetFGDBWorkspace(sPath + "\\fgdb.gdb");  
                }  
                if (ConvertFeatureDataset(pSrcWS, pDesWS, sSrcDSName, sSrcDSName))  
                {  
                    LSCommonHelper.MessageBoxHelper.ShowMessageBox("导出成功");  
                }  
                else  
                {  
                    LSCommonHelper.MessageBoxHelper.ShowMessageBox("导出失败");  
                }  
            }  
  
        }  
  
        public static void ExportFeatureDataset2Shapefile(IDatasetName pDSName,  
             TaskMonitor mTaskMonitor)  
        {  
              
                FolderBrowserDialog fbd = new FolderBrowserDialog();  
                fbd.Description = "选择保存路径";  
                if (fbd.ShowDialog() == DialogResult.OK)  
                {  
                    string sPath = fbd.SelectedPath;  
                    IName pName = pDSName as IName;  
                    IDataset pDS = pName.Open() as IDataset;  
                    IFeatureDataset pFDS = pDS as IFeatureDataset;  
                    IFeatureClassContainer pFCC = pFDS as IFeatureClassContainer;  
                    IFeatureClass pfc = null;  
                    mTaskMonitor.EnterWaitState();  
  
                    for (int i = 0; i < pFCC.ClassCount; i++)  
                    {  
                        pfc = pFCC.get_Class(i);  
                        mTaskMonitor.TaskCaption = "正在导出第"+(i+1)+"个"+pfc.AliasName+"图层,共"+pFCC.ClassCount+"个";  
                        mTaskMonitor.TaskProgress = LSCommonHelper.MathHelper.Precent(  
                            0, pFCC.ClassCount, i);  
                        if (ExportFeatureClassToShp(sPath, pfc))  
                        { }  
                    }  
                    mTaskMonitor.ExitWaitState();  
                    LSCommonHelper.MessageBoxHelper.ShowMessageBox("导出完毕");  
                }  
        }  
     
    }  

导入类
public  class clsImportClass  
    {  
        public static void ImportGDB2SDE(IWorkspace pDesWS, int flag)  
        {  
            IWorkspace pSrcWS = null;  
            try  
            {  
                if (flag == 0)  
                {  
                    OpenFileDialog ofd = new OpenFileDialog();  
                    ofd.Filter = "PGDB文件(.mdb)|*.mdb";  
                    ofd.Multiselect = false;  
                    if (ofd.ShowDialog() == DialogResult.OK)  
                    {  
                        string sFileName = ofd.FileName;  
                        pSrcWS = LSGISHelper.WorkspaceHelper.GetAccessWorkspace(sFileName);  
                    }  
                }  
                else  
                {  
                    FolderBrowserDialog fdb = new FolderBrowserDialog();  
                    if (fdb.ShowDialog() == DialogResult.OK)  
                    {  
                        string sFileName = fdb.SelectedPath;  
                        pSrcWS = LSGISHelper.WorkspaceHelper.GetFGDBWorkspace(sFileName);  
                    }  
                }  
                if (pSrcWS != null)  
                {  
                    IEnumDatasetName pEnumDSName = pSrcWS.get_DatasetNames(esriDatasetType.esriDTFeatureDataset);  
                    IDatasetName pDName = pEnumDSName.Next();  
          
                    while (pDName != null)  
                    {  
                        clsExportClass.ConvertFeatureDataset(pSrcWS, pDesWS, pDName.Name, pDName.Name);  
                 
                        pDName = pEnumDSName.Next();  
                    }  
                    LSCommonHelper.MessageBoxHelper.ShowMessageBox("导入成功");  
                }  
            }  
            catch { }  
        }  
  
        public static void ImportShapefile2SDE(IWorkspace pDesWS, TaskMonitor mTaskMonitor,  
            IFeatureDatasetName pFDN)  
        {  
            OpenFileDialog ofd = new OpenFileDialog();  
            ofd.Title = "打开SHP数据";  
            ofd.Filter = "SHP数据(*.shp)|*.shp";  
            ofd.Multiselect = true;  
            ofd.RestoreDirectory = true;  
            if (ofd.ShowDialog() == DialogResult.OK)  
            {  
                string[] sFileNames = ofd.FileNames;  
                string sFileName = "";  
                IFeatureClass pFC = null;  
  
                mTaskMonitor.EnterWaitState();  
                string sName = "";  
                IWorkspace pSrcWS=null;  
                for (int i = 0; i < sFileNames.Length; i++)  
                {  
                    mTaskMonitor.TaskCaption = "共" + sFileNames.Length + "个文件,先处理第" + (i + 1) + "个文件";  
                    mTaskMonitor.TaskProgress = LSCommonHelper.MathHelper.Precent(0, sFileNames.Length, i);  
                    sFileName = sFileNames[i].ToString();  
                    pSrcWS=LSGISHelper.WorkspaceHelper.GetShapefileWorkspace(sFileName);  
                   sFileName = System.IO.Path.GetFileNameWithoutExtension(sFileName);  
                   IFeatureWorkspace pFWS = pSrcWS as IFeatureWorkspace;  
                    pFC = pFWS.OpenFeatureClass(sFileName);  
                    sName = (pFC as IDataset).Name;  
                    if (ConvertFeatureClass2FeatureDataset(pSrcWS, pDesWS, sName, sName, pFDN))  
                    { }  
                }  
                mTaskMonitor.ExitWaitState();  
                LSCommonHelper.MessageBoxHelper.ShowMessageBox("导入成功");  
            }  
        }  
        public static bool ConvertFeatureClass2FeatureDataset(IWorkspace sourceWorkspace,  
      IWorkspace targetWorkspace, string nameOfSourceFeatureClass,  
      string nameOfTargetFeatureClass, IFeatureDatasetName pName)  
        {  
            try  
            {  
                //create source workspace name   
                IDataset sourceWorkspaceDataset = (IDataset)sourceWorkspace;  
                IWorkspaceName sourceWorkspaceName = (IWorkspaceName)sourceWorkspaceDataset.FullName;  
                //create source dataset name     
                IFeatureClassName sourceFeatureClassName = new FeatureClassNameClass();  
                IDatasetName sourceDatasetName = (IDatasetName)sourceFeatureClassName;  
                sourceDatasetName.WorkspaceName = sourceWorkspaceName;  
                sourceDatasetName.Name = nameOfSourceFeatureClass;  
  
                //create target workspace name     
                IDataset targetWorkspaceDataset = (IDataset)targetWorkspace;  
                IWorkspaceName targetWorkspaceName = (IWorkspaceName)targetWorkspaceDataset.FullName;  
                //create target dataset name      
                IFeatureClassName targetFeatureClassName = new FeatureClassNameClass();  
                IDatasetName targetDatasetName = (IDatasetName)targetFeatureClassName;  
                targetDatasetName.WorkspaceName = targetWorkspaceName;  
                targetDatasetName.Name = nameOfTargetFeatureClass;  
                //Open input Featureclass to get field definitions.    
                ESRI.ArcGIS.esriSystem.IName sourceName = (ESRI.ArcGIS.esriSystem.IName)sourceFeatureClassName;  
                IFeatureClass sourceFeatureClass = (IFeatureClass)sourceName.Open();  
                //Validate the field names because you are converting between different workspace types.     
                IFieldChecker fieldChecker = new FieldCheckerClass();  
                IFields targetFeatureClassFields;  
                IFields sourceFeatureClassFields = sourceFeatureClass.Fields;  
                IEnumFieldError enumFieldError;  
                // Most importantly set the input and validate workspaces!   
                fieldChecker.InputWorkspace = sourceWorkspace;  
                fieldChecker.ValidateWorkspace = targetWorkspace;  
                fieldChecker.Validate(sourceFeatureClassFields, out enumFieldError,  
                    out targetFeatureClassFields);  
                // Loop through the output fields to find the geomerty field     
                IField geometryField;  
                for (int i = 0; i < targetFeatureClassFields.FieldCount; i++)  
                {  
                    if (targetFeatureClassFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry)  
                    {  
                        geometryField = targetFeatureClassFields.get_Field(i);  
                        // Get the geometry field's geometry defenition            
                        IGeometryDef geometryDef = geometryField.GeometryDef;  
                        //Give the geometry definition a spatial index grid count and grid size       
                        IGeometryDefEdit targetFCGeoDefEdit = (IGeometryDefEdit)geometryDef;  
                        targetFCGeoDefEdit.GridCount_2 = 1;  
                        targetFCGeoDefEdit.set_GridSize(0, 0);  
                        //Allow ArcGIS to determine a valid grid size for the data loaded       
                        targetFCGeoDefEdit.SpatialReference_2 = geometryField.GeometryDef.SpatialReference;  
                        // we want to convert all of the features      
                        IQueryFilter queryFilter = new QueryFilterClass();  
                        queryFilter.WhereClause = "";  
                        // Load the feature class              
                        IFeatureDataConverter fctofc = new FeatureDataConverterClass();  
                        IEnumInvalidObject enumErrors = fctofc.ConvertFeatureClass(sourceFeatureClassName,  
                            queryFilter, pName, targetFeatureClassName,  
                            geometryDef, targetFeatureClassFields, "", 1000, 0);  
                        break;  
                    }  
                }  
                return true;  
            }  
            catch (Exception ex) { return false; }  
        }  
    }  

你可能感兴趣的:(C#,arcgis,Engine二次开发)