zoukankan      html  css  js  c++  java
  • 导入shape文件到SDE数据库

    /**

           * pDataSet:要导出的数据库的数据集,如果直接导入到数据库而不是数据集,则使用强制转换IWorkspace-->IDataset

           * strFeatFileDir:要导入的shape文件所在目录

           * strFeatFileName:要导入的shape文件名

           * isWorkspace:标识是导入数据库还是数据集

           *strOutName:存储于数据库的文件名  

           *failInfo:导入失败文件名  

           *errorDetail:错误信息  

           *skipInfo:发现重名情况跳过文件名

         **/

     

            public void FeatureClassToFeatureClass(IDataset pDataSet, string strFeatFileDir, string strFeatFileName, string strOutName, bool isWorkspace, ref string failInfo, ref string errorDetail, ref string skipInfo)

            {

                try

                {

                    IWorkspaceFactory pWSF = new ShapefileWorkspaceFactoryClass();

                    IFeatureWorkspace pFeatureWK = (IFeatureWorkspace)pWSF.OpenFromFile(strFeatFileDir, 0);

                    IFeatureClass pInFeatureClass = pFeatureWK.OpenFeatureClass(strFeatFileName);

     

                    if (pInFeatureClass == null || pDataSet == null)

                    {

                        if (failInfo == "")

                        {

                            failInfo = strFeatFileDir + "\\" + strFeatFileName;

                            errorDetail = "错误信息:" + strFeatFileDir + "是空的矢量工作空间。";

                        }

                        else

                        {

                            failInfo += ";" + strFeatFileDir + "\\" + strFeatFileName;

                            errorDetail += ";" + "错误信息:" + strFeatFileDir + "是空的矢量工作空间。";

                        }

                        return;

                    }

     

                    IFeatureClassName pInFeatureclassName;

                    IDataset pIndataset = (IDataset)pInFeatureClass;

                    pInFeatureclassName = (IFeatureClassName)pIndataset.FullName;

     

                    //如果名称已存在

                    IWorkspace2 pWS2 = null;

                    if (isWorkspace)

                        pWS2 = pDataSet as IWorkspace2;

                    else

                        pWS2 = pDataSet.Workspace as IWorkspace2;

     

                    if (pWS2.get_NameExists(esriDatasetType.esriDTFeatureClass, strOutName))

                    {

                        DialogResult result;

                        result = System.Windows.Forms.MessageBox.Show(null, "矢量文件名  " + strOutName + "  在数据库中已存在!" + "\r是否覆盖?", "相同文件名", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);

                        //覆盖原矢量要素

                        if (result == DialogResult.Yes)

                        {

                            IFeatureWorkspace pFWS = (IFeatureWorkspace)pWS2;

                            IDataset pDataset = pFWS.OpenFeatureClass(strOutName) as IDataset;

                            pDataset.Delete();

                            pDataset = null;

                        }

                        else if (result == DialogResult.No)

                        {

                            //不覆盖,则退出for循环,忽略这个要素,转入下一个要素的导入

                            if (skipInfo == "")

                                skipInfo = strFeatFileDir + "\\" + strFeatFileName;

                            else

                                skipInfo += ";" + strFeatFileDir + "\\" + strFeatFileName;

                            return;

                        }

                    }

     

                    IFields pInFields, pOutFields;

     

                    IFieldChecker pFieldChecker = new FieldCheckerClass();

                    IEnumFieldError pError;

                    pInFields = pInFeatureClass.Fields;

                    pFieldChecker.Validate(pInFields, out pError, out pOutFields);

     

                    IField geoField = null;

                    for (int i = 0; i < pOutFields.FieldCount; i++)

                    {

                        IField pField = pOutFields.get_Field(i);

                        if (pField.Type == esriFieldType.esriFieldTypeOID)

                        {

                            IFieldEdit pFieldEdit = (IFieldEdit)pField;

                            pFieldEdit.Name_2 = pField.AliasName;

                        }

                        if (pField.Type == esriFieldType.esriFieldTypeGeometry)

                        {

                            geoField = pField;

                            break;

                        }

                    }

     

                    IGeometryDef geometryDef = geoField.GeometryDef;

     

                    IFeatureDataConverter one2another = new FeatureDataConverterClass();

     

                    IFeatureClassName pOutFeatureClassName = new FeatureClassNameClass();

                    IDatasetName pOutDatasetName = (IDatasetName)pOutFeatureClassName;

                    if (isWorkspace)

                        pOutDatasetName.WorkspaceName = (IWorkspaceName)pDataSet.FullName;

                    else

                        pOutDatasetName.WorkspaceName = (IWorkspaceName)((IDataset)pDataSet.Workspace).FullName;

                    pOutDatasetName.Name = strOutName;

     

                    if (isWorkspace)

                    {

                        one2another.ConvertFeatureClass(pInFeatureclassName, null, null, pOutFeatureClassName, geometryDef,

                        pOutFields, "", 1000, 0);

                    }

                    else

                    {

                        IFeatureDataset pFeatDS = (IFeatureDataset)pDataSet;

                        IFeatureDatasetName pOutFeatDSName = pFeatDS.FullName as IFeatureDatasetName;

     

                        one2another.ConvertFeatureClass(pInFeatureclassName, null, pOutFeatDSName, pOutFeatureClassName, geometryDef,

                        pOutFields, "", 1000, 0);

                        pOutFeatDSName = null;

                        pFeatDS = null;

                    }

                }

                catch (Exception ex)

                {

                    if (failInfo == "")

                    {

                        failInfo = strFeatFileDir + "\\" + strFeatFileName;

                        errorDetail = "错误信息:" + ex.Message;

                    }

                    else

                    {

                        failInfo += ";" + strFeatFileDir + "\\" + strFeatFileName;

                        errorDetail += ";" + "错误信息:" + ex.Message;

                    }

                    Console.WriteLine(ex.Message);

                    return;

                }

            }

  • 相关阅读:
    laravel5.6 调用第三方类库
    substring
    SpringSecurity3配置及原理简介
    正则表达式
    type=json
    正则表达式2
    笔记1
    oracle 自带函数大全及例子
    Vector容器类
    HQL
  • 原文地址:https://www.cnblogs.com/bluemaplestudio/p/1710747.html
Copyright © 2011-2022 走看看