Ejemplo n.º 1
0
        public static IFeatureClassName GetFeatureClassName(IFeatureDatasetName pFeatureDatasetName, string featureClassName)
        {
            IDatasetName pContainDSName;

            pContainDSName = (IDatasetName)pFeatureDatasetName;
            IEnumDatasetName  pEnumDsName4FC = (IEnumDatasetName)pFeatureDatasetName.FeatureClassNames;
            IFeatureClassName pfeaClsName    = (IFeatureClassName)pEnumDsName4FC.Next();

            IDatasetName pFC_DSName;

            try
            {
                while (pfeaClsName != null)
                {
                    pFC_DSName = (IDatasetName)pfeaClsName;
                    if (pFC_DSName.Name == featureClassName)
                    {
                        return(pfeaClsName);
                    }

                    pfeaClsName = (IFeatureClassName)pEnumDsName4FC.Next();
                }
            }
            catch
            {
            }
            return(null);
        }
Ejemplo n.º 2
0
 IEnumInvalidObject ESRI.ArcGIS.Geodatabase.IFeatureDataConverter2.ConvertFeatureClass(
     IDatasetName idatasetName_0, IQueryFilter iqueryFilter_0, ISelectionSet iselectionSet_0,
     IFeatureDatasetName ifeatureDatasetName_0, IFeatureClassName ifeatureClassName_0,
     IGeometryDef igeometryDef_0, IFields ifields_0, string string_0, int int_0, int int_1)
 {
     return(null);
 }
Ejemplo n.º 3
0
        /// 获得个人地理数据库中要素类的名称
        /// </summary>
        /// <param name="pAccessWorkSpace">个人地理数据库工作空间</param>
        /// <returns pArrayFeatureClassName>个人地理数据库中要素类的名称</returns>
        public static IArray GetFeactureClassName_From_AccessWorkSpace(IWorkspace pAccessWorkSpace)
        {
            IArray pArrayFeatureClassName = new ArrayClass();

            //遍历直接位于地理数据库下的要素类FeatureClass
            IEnumDatasetName enumDatasetName = ((IWorkspace)pAccessWorkSpace).get_DatasetNames(esriDatasetType.esriDTFeatureClass);
            IDatasetName     datasetName     = enumDatasetName.Next();

            while (datasetName != null)
            {
                pArrayFeatureClassName.Add(datasetName.Name.ToString());
                datasetName = enumDatasetName.Next();//推进器
            }

            //遍历位于地理数据库数据集featuredataset下的要素类
            enumDatasetName = ((IWorkspace)pAccessWorkSpace).get_DatasetNames(esriDatasetType.esriDTFeatureDataset);
            datasetName     = enumDatasetName.Next();
            while (datasetName != null)
            {
                IFeatureDatasetName featureDatasetName = (IFeatureDatasetName)datasetName;
                IEnumDatasetName    enumDatasetNameFC  = featureDatasetName.FeatureClassNames;
                IDatasetName        datasetNameFC      = enumDatasetNameFC.Next();
                while (datasetNameFC != null)
                {
                    pArrayFeatureClassName.Add(datasetNameFC.Name.ToString());
                    datasetNameFC = enumDatasetNameFC.Next();//推进器
                }
                datasetName = enumDatasetName.Next();
            }

            return(pArrayFeatureClassName);
        }
Ejemplo n.º 4
0
        public IList <FeatureName> get_FeatureDataSetNames() //遍历矢量要素集
        {
            IList <FeatureName> names = new List <FeatureName>();

            if (this.m_workSpace != null)
            {
                IFeatureClass    feaClass;
                IEnumDatasetName enumDatasetName = m_workSpace.get_DatasetNames(esriDatasetType.esriDTFeatureDataset);
                IDatasetName     datasetName     = enumDatasetName.Next();//DataSet的名字
                while (datasetName != null)
                {
                    FeatureName name = new FeatureName();
                    name.FeatDSName = datasetName.Name.ToString();
                    IFeatureDatasetName featureDatasetName = (IFeatureDatasetName)datasetName;
                    IEnumDatasetName    enumDatasetNameFC  = featureDatasetName.FeatureClassNames; //是FeatureClass的名字集合
                    IDatasetName        datasetNameFC      = enumDatasetNameFC.Next();
                    while (datasetNameFC != null)
                    {
                        //添加FeatureClass的名字
                        name.FCName.Add(datasetNameFC.Name.ToString());
                        feaClass = ((IFeatureWorkspace)m_workSpace).OpenFeatureClass(datasetNameFC.Name.ToString());
                        name.ShapType.Add(feaClass.ShapeType);
                        name.FeatureType.Add(feaClass.FeatureType);
                        datasetNameFC = enumDatasetNameFC.Next();
                    }
                    names.Add(name);

                    datasetName = enumDatasetName.Next();
                }
            }
            return(names);
        }
Ejemplo n.º 5
0
 public static bool DeleteFeatureDataset(IWorkspace ws, string name)
 {
     if (ws == null || string.IsNullOrEmpty(name))
     {
         return(false);
     }
     try
     {
         var pFeaWorkspace    = ws as IFeatureWorkspace;
         var pEnumDatasetName = ws.DatasetNames[esriDatasetType.esriDTAny];
         pEnumDatasetName.Reset();
         var pDatasetName = pEnumDatasetName.Next();
         while (pDatasetName != null)
         {
             if (pDatasetName.Type == esriDatasetType.esriDTFeatureDataset)
             {
                 //如果是要素集,则对要素集内的要素类进行查找
                 IFeatureDatasetName featureDatasetName = pDatasetName as IFeatureDatasetName;
                 if (featureDatasetName != null)
                 {
                     IEnumDatasetName pEnumFcName = featureDatasetName.FeatureClassNames;
                     IDatasetName     pFcName;
                     while ((pFcName = pEnumFcName.Next()) != null)
                     {
                         if (pFcName.Name.IndexOf(name, StringComparison.Ordinal) >= 0)
                         {
                             DeleteByName(pFeaWorkspace, pFcName);
                             return(true);
                         }
                     }
                 }
             }
             else
             {
                 if (pDatasetName.Name.IndexOf(name, StringComparison.Ordinal) >= 0)
                 {
                     DeleteByName(pFeaWorkspace, pDatasetName);
                     return(true);
                 }
             }
             pDatasetName = pEnumDatasetName.Next();
         }
         return(true);
     }
     catch (Exception ex)
     {
         return(false);
     }
 }
Ejemplo n.º 6
0
        /// <summary>
        /// Gets feature class names in the given feature dataset. Right now it only works with the
        /// following esriGeometryType values: esriGeometryPoint, esriGeometryPolyline,
        /// esriGeometryPolygon, esriGeometryAny (point, line, polygon).
        /// </summary>
        /// <param name="geomType">geometry type to get</param>
        /// <param name="fdsName">IFeatureDatasetName corresponding to the feature dataset to get
        /// feature classes in</param>
        /// <returns>list of IDatasetName objects for the feature classes</returns>
        public static List <IDatasetName> GetFeatureClassNames(esriGeometryType geomType,
                                                               IFeatureDatasetName fdsName)
        {
            List <IDatasetName> outDsNames = new List <IDatasetName>();
            IEnumDatasetName    dsNamesFc  = fdsName.FeatureClassNames;
            IDatasetName        dsNameFc   = dsNamesFc.Next();

            while (dsNameFc != null)
            {
                if (CheckGeometryType(geomType, ((IFeatureClassName)dsNameFc).ShapeType))
                {
                    outDsNames.Add(dsNameFc);
                }
                dsNameFc = dsNamesFc.Next();
            }
            return(outDsNames);
        }
Ejemplo n.º 7
0
        //从数据库中读取数据
        //遍历选择的featureclass
        public void Read_EntitiesFromDatabase()
        {
            string            layerName;
            IName             pName;
            IFeatureClassName pFcn;
            IFeatureClass     pFC;

            //默认的输入图层与输出图层名字一样
            //需要修改的时候与对照表对照
            for (int i = 0; i < inputDs.Count; i++)
            {
                IDatasetName datasetName = inputDs.get_Item(i);

                //feactureclass
                if (datasetName.Type == esriDatasetType.esriDTFeatureClass)
                {
                    pFcn      = (IFeatureClassName)datasetName;
                    pName     = (IName)pFcn;
                    pFC       = (IFeatureClass)pName.Open();
                    layerName = datasetName.Name;

                    Read_Entity_0(pFC, layerName);
                }
                //dataset
                if (datasetName.Type == esriDatasetType.esriDTFeatureDataset)
                {
                    IFeatureDatasetName featureDatasetName = (IFeatureDatasetName)datasetName;

                    IEnumDatasetName enumDatasetNameFC = featureDatasetName.FeatureClassNames;

                    IDatasetName datasetNameFC = enumDatasetNameFC.Next();
                    while (datasetNameFC != null)
                    {
                        IFeatureClassName featureClassName = (IFeatureClassName)datasetNameFC;
                        pName     = (IName)featureClassName;
                        pFC       = (IFeatureClass)pName.Open();
                        layerName = datasetNameFC.Name;

                        Read_Entity_0(pFC, layerName);

                        datasetNameFC = enumDatasetNameFC.Next();
                    }
                }
            }
        }
Ejemplo n.º 8
0
        public static bool ConvertFeatureClassToFeatureDataset(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); }
        }
Ejemplo n.º 9
0
/// <summary>
/// 保存输出JointCount>1的点位图层
/// </summary>
/// <param name="apFeatureClass"></param>
        public void ExportFeatureClassToShp(IFeatureClass apFeatureClass)
        {
            if (apFeatureClass == null)
            {
                MessageBox.Show("请选择", "系统提示");
                return;
            }
//调用保存文件函数
            SaveFileDialog sa = new SaveFileDialog();

            sa.Filter = "SHP文件(.shp)|*.shp";
            sa.ShowDialog();
            sa.CreatePrompt = true;
            string ExportShapeFileName = sa.FileName;

// string StrFilter = "SHP文件(.shp)|*.shp";
// string ExportShapeFileName = SaveFileDialog(StrFilter);
            if (ExportShapeFileName == "")
            {
                return;
            }
            string ExportFileShortName = System.IO.Path.GetFileNameWithoutExtension(ExportShapeFileName);
            string ExportFilePath      = System.IO.Path.GetDirectoryName(ExportShapeFileName);

            shpPath = ExportFilePath + "\\" + ExportFileShortName + "\\" + ExportFileShortName + ".shp";
//设置导出要素类的参数
            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;
            IFieldChecker   pFieldChecker;
            IField          pGeoField;
            IEnumFieldError pEnumFieldError = null;

            pInFields     = apFeatureClass.Fields;
            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);
            try
            {
//开始导入
                IFeatureDataConverter pShpToClsConverter = new FeatureDataConverterClass();
                pShpToClsConverter.ConvertFeatureClass(pOutFeatureClassName, null, pInFeatureDatasetName, pInFeatureClassName, pOutGeometryDef, pOutFields, "", 1000, 0);
                MessageBox.Show("导出成功", "系统提示");
            }
            catch (Exception ex)
            {
                MessageBox.Show("the following exception occurred:" + ex.ToString());
            }
        }
Ejemplo n.º 10
0
        public void Execute(IArray paramvalues, ITrackCancel trackcancel, IGPEnvironmentManager envMgr, IGPMessages message)
        {
            // Get Parameters
            IGPParameter3 inputParameter   = (IGPParameter3)paramvalues.get_Element(0);
            IGPParameter3 polygonParameter = (IGPParameter3)paramvalues.get_Element(1);
            IGPParameter3 outputParameter  = (IGPParameter3)paramvalues.get_Element(2);
            IGPParameter3 fieldParameter   = (IGPParameter3)paramvalues.get_Element(3);

            // UnPackGPValue. This ensures you get the value from either the dataelement or GpVariable (ModelBuilder)
            IGPValue inputParameterValue   = m_GPUtilities.UnpackGPValue(inputParameter);
            IGPValue polygonParameterValue = m_GPUtilities.UnpackGPValue(polygonParameter);
            IGPValue outputParameterValue  = m_GPUtilities.UnpackGPValue(outputParameter);
            IGPValue fieldParameterValue   = m_GPUtilities.UnpackGPValue(fieldParameter);

            // Decode Input Feature Layers
            IFeatureClass inputFeatureClass;
            IFeatureClass polygonFeatureClass;

            IQueryFilter inputFeatureClassQF;
            IQueryFilter polygonFeatureClassQF;

            m_GPUtilities.DecodeFeatureLayer(inputParameterValue, out inputFeatureClass, out inputFeatureClassQF);
            m_GPUtilities.DecodeFeatureLayer(polygonParameterValue, out polygonFeatureClass, out polygonFeatureClassQF);

            if (inputFeatureClass == null)
            {
                message.AddError(2, "Could not open input dataset.");
                return;
            }

            if (polygonFeatureClass == null)
            {
                message.AddError(2, "Could not open clipping polygon dataset.");
                return;
            }

            if (polygonFeatureClass.FeatureCount(null) > 1)
            {
                message.AddWarning("Clipping polygon feature class contains more than one feature.");
            }

            // Create the Geoprocessor
            Geoprocessor gp = new Geoprocessor();

            // Create Output Polygon Feature Class
            CreateFeatureclass cfc      = new CreateFeatureclass();
            IName               name    = m_GPUtilities.CreateFeatureClassName(outputParameterValue.GetAsText());
            IDatasetName        dsName  = name as IDatasetName;
            IFeatureClassName   fcName  = dsName as IFeatureClassName;
            IFeatureDatasetName fdsName = fcName.FeatureDatasetName as IFeatureDatasetName;

            // Check if output is in a FeatureDataset or not. Set the output path parameter for CreateFeatureClass tool.
            if (fdsName != null)
            {
                cfc.out_path = fdsName;
            }
            else
            {
                cfc.out_path = dsName.WorkspaceName.PathName;
            }

            // Set the output Coordinate System for CreateFeatureClass tool.
            // ISpatialReference3 sr = null;
            IGPEnvironment env = envMgr.FindEnvironment("outputCoordinateSystem");

            // Same as Input
            if (env.Value.IsEmpty())
            {
                IGeoDataset ds = inputFeatureClass as IGeoDataset;
                cfc.spatial_reference = ds.SpatialReference as ISpatialReference3;
            }
            // Use the environment setting
            else
            {
                IGPCoordinateSystem cs = env.Value as IGPCoordinateSystem;
                cfc.spatial_reference = cs.SpatialReference as ISpatialReference3;
            }

            // Remaining properties for Create Feature Class Tool
            cfc.out_name      = dsName.Name;
            cfc.geometry_type = "POLYGON";

            // Execute Geoprocessor
            gp.Execute(cfc, null);

            // Get Unique Field
            int    iField      = inputFeatureClass.FindField(fieldParameterValue.GetAsText());
            IField uniqueField = inputFeatureClass.Fields.get_Field(iField);

            // Extract Clipping Polygon Geometry
            IFeature polygonFeature  = polygonFeatureClass.GetFeature(0);
            IPolygon clippingPolygon = (IPolygon)polygonFeature.Shape;

            // Spatial Filter
            ISpatialFilter spatialFilter = new SpatialFilterClass();

            spatialFilter.Geometry   = polygonFeature.ShapeCopy;
            spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;

            // Debug Message
            message.AddMessage("Generating TIN...");

            // Create TIN
            ITinEdit tinEdit = new TinClass();

            // Advanced TIN Functions
            ITinAdvanced2 tinAdv = (ITinAdvanced2)tinEdit;

            try
            {
                // Initialize New TIN
                IGeoDataset gds = inputFeatureClass as IGeoDataset;
                tinEdit.InitNew(gds.Extent);

                // Add Mass Points to TIN
                tinEdit.StartEditing();
                tinEdit.AddFromFeatureClass(inputFeatureClass, spatialFilter, uniqueField, uniqueField, esriTinSurfaceType.esriTinMassPoint);
                tinEdit.Refresh();

                // Get TIN Nodes
                ITinNodeCollection tinNodeCollection = (ITinNodeCollection)tinEdit;

                // Report Node Count
                message.AddMessage("Input Node Count: " + inputFeatureClass.FeatureCount(null).ToString());
                message.AddMessage("TIN Node Count: " + tinNodeCollection.NodeCount.ToString());

                // Open Output Feature Class
                IFeatureClass outputFeatureClass = m_GPUtilities.OpenFeatureClassFromString(outputParameterValue.GetAsText());

                // Debug Message
                message.AddMessage("Generating Polygons...");

                // Create Voronoi Polygons
                tinNodeCollection.ConvertToVoronoiRegions(outputFeatureClass, null, clippingPolygon, "", "");

                // Release COM Objects
                tinEdit.StopEditing(false);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(tinNodeCollection);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(tinEdit);
            }
            catch (Exception ex)
            {
                message.AddError(2, ex.Message);
            }
        }
Ejemplo n.º 11
0
        public void CreateGeometricNetwork(IWorkspace _pWorkspace, IFeatureDatasetName
            _pFeatureDatasetName,String _pGeometricName)
        {
            INetworkLoader2 pNetworkLoader = new NetworkLoaderClass();

               // 网络的名称
               pNetworkLoader.NetworkName = _pGeometricName;

               // 网络的类型
               pNetworkLoader.NetworkType = esriNetworkType.esriNTUtilityNetwork;

               // Set the containing feature dataset.
               pNetworkLoader.FeatureDatasetName = (IDatasetName)_pFeatureDatasetName;

               // 检查要建立几何网络的数据,每一个要素只能参与一个网络
               if (pNetworkLoader.CanUseFeatureClass("PrimaryLine") ==
               esriNetworkLoaderFeatureClassCheck.esriNLFCCValid)
               {
               pNetworkLoader.AddFeatureClass("PrimaryLine",
                   esriFeatureType.esriFTComplexEdge, null, false);
               }

               if (pNetworkLoader.CanUseFeatureClass("Feeder") ==
               esriNetworkLoaderFeatureClassCheck.esriNLFCCValid)
               {
               pNetworkLoader.AddFeatureClass("Feeder", esriFeatureType.esriFTSimpleJunction,
                   null, false);
               }

             // 我的数据中没有enable字段,所以,用了false,如果用true的话,就要进行相关的设置

              INetworkLoaderProps pNetworkLoaderProps = (INetworkLoaderProps)pNetworkLoader;

               pNetworkLoader.PreserveEnabledValues = false;

               // Set the ancillary role field for the Feeder class.
               String defaultAncillaryRoleFieldName =
               pNetworkLoaderProps.DefaultAncillaryRoleField;
               esriNetworkLoaderFieldCheck ancillaryRoleFieldCheck =
               pNetworkLoader.CheckAncillaryRoleField("Feeder",
               defaultAncillaryRoleFieldName);
               switch (ancillaryRoleFieldCheck)
               {
               case esriNetworkLoaderFieldCheck.esriNLFCValid:
               case esriNetworkLoaderFieldCheck.esriNLFCNotFound:
                   pNetworkLoader.PutAncillaryRole("Feeder",
                       esriNetworkClassAncillaryRole.esriNCARSourceSink,
                       defaultAncillaryRoleFieldName);
                   break;
               default:
                   Console.WriteLine(
                       "The field {0} could not be used as an ancillary role field.",
                       defaultAncillaryRoleFieldName);
                   break;
               }

               pNetworkLoader.SnapTolerance = 0.02;

               // 给几何网络添加权重
               pNetworkLoader.AddWeight("Weight", esriWeightType.esriWTDouble, 0);

               // 将权重和PrimaryLine数据中的SHAPE_Length字段关联
               pNetworkLoader.AddWeightAssociation("Weight", "PrimaryLine", "SHAPE_Length");

               // 构建网络
               pNetworkLoader.LoadNetwork();
        }
Ejemplo n.º 12
0
        public static void Project(IFeatureClass ifeatureClass_0, ISpatialReference ispatialReference_0,
                                   IFeatureDatasetName ifeatureDatasetName_0, string string_0, double double_0)
        {
            string                str2;
            double                num3;
            double                num4;
            double                num5;
            double                num6;
            IEnumFieldError       error;
            IFields               fields2;
            IWorkspace            workspace = ((IDataset)ifeatureClass_0).Workspace;
            IFeatureDataConverter converter = new FeatureDataConverterClass();
            IWorkspaceName        name      = new WorkspaceNameClass
            {
                ConnectionProperties   = workspace.ConnectionProperties,
                WorkspaceFactoryProgID = workspace.WorkspaceFactory.GetClassID().Value.ToString()
            };
            IWorkspaceName workspaceName = (ifeatureDatasetName_0 as IDatasetName).WorkspaceName;
            IDatasetName   name3         = new FeatureClassNameClass();
            string         aliasName     = ifeatureClass_0.AliasName;
            int            index         = aliasName.LastIndexOf(".");

            if (index != -1)
            {
                aliasName = aliasName.Substring(index + 1);
            }
            name3.Name          = aliasName;
            name3.WorkspaceName = name;
            IWorkspace2  workspace2 = (workspaceName as IName).Open() as IWorkspace2;
            IDatasetName name4      = new FeatureClassNameClass
            {
                WorkspaceName = workspaceName
            };

            (name4 as IFeatureClassName).FeatureDatasetName = ifeatureDatasetName_0 as IDatasetName;
            IFieldChecker checker = new FieldCheckerClass
            {
                ValidateWorkspace = workspace2 as IWorkspace
            };

            string[] strArray = string_0.Split(new char[] { '.' });
            string_0 = strArray[strArray.Length - 1] + "_Project";
            checker.ValidateTableName(string_0, out str2);
            string str3 = str2;
            int    num2 = 1;

            if ((workspaceName.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace) ||
                (workspaceName.Type == esriWorkspaceType.esriLocalDatabaseWorkspace))
            {
                while (workspace2.get_NameExists(esriDatasetType.esriDTFeatureClass, str3))
                {
                    str3 = str2 + "_" + num2.ToString();
                    num2++;
                }
            }
            else if (workspaceName.Type == esriWorkspaceType.esriFileSystemWorkspace)
            {
                while (File.Exists(str3 + ".shp"))
                {
                    str3 = str2 + "_" + num2.ToString();
                    num2++;
                }
            }
            name4.Name = str3;
            IFields inputField = new FieldsClass();

            index = ifeatureClass_0.Fields.FindField(ifeatureClass_0.ShapeFieldName);
            IField            field            = ifeatureClass_0.Fields.get_Field(index);
            IGeometryDef      geometryDef      = field.GeometryDef;
            ISpatialReference spatialReference = geometryDef.SpatialReference;

            ispatialReference_0.GetDomain(out num3, out num4, out num5, out num6);
            ((IGeometryDefEdit)geometryDef).GridCount_2 = 1;
            ((IGeometryDefEdit)geometryDef).set_GridSize(0, double_0);
            ((IGeometryDefEdit)geometryDef).SpatialReference_2 = ispatialReference_0;
            ((IFieldEdit)field).GeometryDef_2 = geometryDef;
            for (int i = 0; i < ifeatureClass_0.Fields.FieldCount; i++)
            {
                if (i == index)
                {
                    ((IFieldsEdit)inputField).AddField(field);
                }
                else
                {
                    IField field2 = ifeatureClass_0.Fields.get_Field(i);
                    ((IFieldsEdit)inputField).AddField(field2);
                }
            }
            checker.Validate(inputField, out error, out fields2);
            if (m_pfrm != null)
            {
                m_pfrm.FeatureProgress = converter;
            }
            try
            {
                converter.ConvertFeatureClass((IFeatureClassName)name3, null, ifeatureDatasetName_0,
                                              (IFeatureClassName)name4, geometryDef, fields2, "", 1000, 0);
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message);
            }
        }
Ejemplo n.º 13
0
        public IEnumInvalidObject ConvertFeatureClass(IFeatureClassName ifeatureClassName_0, IQueryFilter iqueryFilter_0,
                                                      IFeatureDatasetName ifeatureDatasetName_0, IFeatureClassName ifeatureClassName_1,
                                                      IGeometryDef igeometryDef_0, IFields ifields_0, string string_0, int int_0, int int_1)
        {
            IEnumFieldError    enumFieldError;
            IFields            field;
            string             str;
            IEnumInvalidObject enumInvalidObject = null;
            IFieldChecker      fieldCheckerClass = new FieldChecker();
            IWorkspaceName     workspaceName     = null;

            workspaceName = (ifeatureDatasetName_0 == null
                ? (ifeatureClassName_1 as IDatasetName).WorkspaceName
                : (ifeatureDatasetName_0 as IDatasetName).WorkspaceName);
            IWorkspace workspace = (workspaceName as IName).Open() as IWorkspace;

            fieldCheckerClass.ValidateWorkspace = workspace;
            fieldCheckerClass.Validate(ifields_0, out enumFieldError, out field);
            string name = (ifeatureClassName_1 as IDatasetName).Name;

            fieldCheckerClass.ValidateTableName(name, out str);
            name = str;
            IField field1 = null;
            int    num    = 0;

            while (true)
            {
                if (num >= field.FieldCount)
                {
                    break;
                }
                else if (field.Field[num].Type == esriFieldType.esriFieldTypeGeometry)
                {
                    field1 = field.Field[num];
                    break;
                }
                else
                {
                    num++;
                }
            }
            IFeatureClass featureClass = null;

            if (ifeatureDatasetName_0 == null)
            {
                featureClass = (workspace as IFeatureWorkspace).CreateFeatureClass(name, field, null, null,
                                                                                   esriFeatureType.esriFTSimple, field1.Name, string_0);
            }
            else
            {
                IFeatureDataset featureDataset = (ifeatureDatasetName_0 as IName).Open() as IFeatureDataset;
                featureClass = featureDataset.CreateFeatureClass(name, field, null, null, esriFeatureType.esriFTSimple,
                                                                 field1.Name, string_0);
            }
            IFeatureClass  featureClass1  = (ifeatureClassName_0 as IName).Open() as IFeatureClass;
            IFeatureCursor featureCursor  = featureClass1.Search(iqueryFilter_0, false);
            IFeature       feature        = featureCursor.NextFeature();
            int            num1           = 0;
            IFeatureCursor featureCursor1 = featureClass.Insert(true);

            while (feature != null)
            {
                IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();
                if (feature.Shape != null)
                {
                    try
                    {
                        this.method_0(featureCursor1, featureBuffer, field, feature);
                    }
                    catch (Exception exception)
                    {
                        Logger.Current.Error("", exception, "");
                    }
                }
                num1++;
                if (num1 == int_0)
                {
                    num1 = 0;
                    featureCursor1.Flush();
                }
                feature = featureCursor.NextFeature();
                if (this.ifeatureProgress_StepEventHandler_0 == null)
                {
                    continue;
                }
                this.ifeatureProgress_StepEventHandler_0();
            }
            if (num1 > 0)
            {
                featureCursor1.Flush();
            }
            ComReleaser.ReleaseCOMObject(featureCursor);
            ComReleaser.ReleaseCOMObject(featureCursor1);
            return(enumInvalidObject);
        }
Ejemplo n.º 14
0
        /// <summary>
        /// 导出Shp文件
        /// </summary>
        /// <param name="path"></param>
        /// <param name="apFeatureClass"></param>
        /// <returns></returns>
        public static bool ExportFeatureClassToShp(string path, IFeatureClass apFeatureClass)
        {
            try
            {
                string exportFileShortName = System.IO.Path.GetFileNameWithoutExtension(path);
                if (exportFileShortName == "")
                {
                    exportFileShortName = (apFeatureClass as IDataset).Name;
                    if (exportFileShortName.LastIndexOf('.') >= 0)
                    {
                        exportFileShortName = exportFileShortName.Substring(exportFileShortName.LastIndexOf('.') + 1);
                    }
                }
                string exportFilePath = System.IO.Path.GetDirectoryName(path);
                if (exportFilePath == null)
                {
                    exportFilePath = path;
                }
                //设置导出要素类的参数
                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获得字段集合
                IFields pInFields = apFeatureClass.Fields;
                pInFields = apFeatureClass.Fields;
                IFieldChecker pFieldChecker = new FieldChecker();
                pFieldChecker.Validate(pInFields, out IEnumFieldError pEnumFieldError, out IFields pOutFields);
                //通过循环查找几何字段
                IField pGeoField = null;
                for (long 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);
            }
        }
Ejemplo n.º 15
0
        public static Dictionary <int, KeyValuePair <string, IEnumInvalidObject> > TransferMapDataWithinExtents(IMap map, IFeatureWorkspace outputWorkspace, IFeatureDatasetName outputFeatureDatasetName, ESRI.ArcGIS.ADF.Web.Geometry.Envelope downloadDataExtent, ISpatialReference outputSpatialReference)
        {
            Dictionary <int, KeyValuePair <string, IEnumInvalidObject> > invalidObjects = new Dictionary <int, KeyValuePair <string, IEnumInvalidObject> >();
            IWorkspaceName outWorkspaceName = GeodatabaseUtil.GetWorkspaceName((IWorkspace)outputWorkspace);

            List <IFeatureLayer> featureLayers = GetFeatureLayers(map);

            int counter = 0;

            foreach (IFeatureLayer featureLayer in featureLayers)
            {
                IFeatureClass     inFeatureClass     = featureLayer.FeatureClass;
                IDataset          dataset            = (IDataset)inFeatureClass;
                IFeatureWorkspace inFeatureWorkspace = (IFeatureWorkspace)dataset.Workspace;

                IEnvelope env = new ESRI.ArcGIS.Geometry.EnvelopeClass();
                env.XMin = downloadDataExtent.XMin;
                env.YMin = downloadDataExtent.YMin;
                env.XMax = downloadDataExtent.XMax;
                env.YMax = downloadDataExtent.YMax;

                ISpatialFilter spatialFilter = new SpatialFilterClass();
                spatialFilter.Geometry      = env;
                spatialFilter.GeometryField = inFeatureClass.ShapeFieldName;
                spatialFilter.SpatialRel    = esriSpatialRelEnum.esriSpatialRelIntersects;

                IFeatureClassName outputFeatureClassName = GeodatabaseUtil.GetFeatureClassName(outWorkspaceName, dataset.Name);

                IEnumInvalidObject eInvalidObject = TransferData(inFeatureWorkspace, inFeatureClass, outputWorkspace, outputFeatureClassName, outputFeatureDatasetName, spatialFilter, outputSpatialReference);
                invalidObjects.Add(counter, new KeyValuePair <string, IEnumInvalidObject>(dataset.Name, eInvalidObject));
                counter++;
            }

            return(invalidObjects);
        }
Ejemplo n.º 16
0
        /// <summary>
        /// Transfers data from an input FeatureClass to an output FeatureClass with data filtered with the specified query filter.
        /// </summary>
        /// <param name="inputWorkspace">The input workspace.</param>
        /// <param name="inputFeatureClassName">Name of the input feature class.</param>
        /// <param name="outputWorkspace">The output workspace.</param>
        /// <param name="outputFeatureClassName">Name of the output feature class.</param>
        /// <param name="outputFeatureDatasetName">The output FeatureDataset</param>
        /// <param name="queryFilter">The query filter used to filter data to be transfered.</param>
        public static IEnumInvalidObject TransferData(IFeatureWorkspace inputWorkspace, IFeatureClass inputFeatureClass, IFeatureWorkspace outputWorkspace, IFeatureClassName outputFeatureClassName, IFeatureDatasetName outputFeatureDatasetName, IQueryFilter queryFilter, ISpatialReference outputSpatialReference)
        {
            if (inputWorkspace == null)
            {
                throw new ArgumentNullException("A valid input feature workspace reference [inputWorkspace] is required.");
            }

            if (inputFeatureClass == null)
            {
                throw new ArgumentNullException("A valid input featureclass [inputFeatureClass] is required.");
            }

            if (outputWorkspace == null)
            {
                throw new ArgumentNullException("A valid output feature workspace reference [outputWorkspace] is required.");
            }

            if (outputFeatureClassName == null)
            {
                throw new ArgumentNullException("A valid output featureclass name reference [outputFeatureClassName] is required.");
            }

            IDataset          dataset = (IDataset)inputFeatureClass;
            IFeatureClassName inputFeatureClassName = (IFeatureClassName)dataset.FullName;

            IEnumFieldError   error        = null;
            IFields           outFields    = null;
            IFields           inFields     = inputFeatureClass.Fields;
            FieldCheckerClass fieldChecker = new FieldCheckerClass();

            fieldChecker.InputWorkspace    = (IWorkspace)inputWorkspace;
            fieldChecker.ValidateWorkspace = (IWorkspace)outputWorkspace;
            fieldChecker.Validate(inFields, out error, out outFields);

            IField shapeField = null;

            for (int i = 0; i < outFields.FieldCount; i++)
            {
                if (outFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry)
                {
                    shapeField = outFields.get_Field(i);
                    break;
                }
            }


            IGeometryDef     shapeGeoDef     = shapeField.GeometryDef;
            IGeometryDefEdit shapeGeoDefEdit = shapeGeoDef as IGeometryDefEdit;

            shapeGeoDefEdit.GridCount_2 = 1;
            shapeGeoDefEdit.set_GridSize(0, DefaultIndexGrid(ref inputFeatureClass));
            shapeGeoDefEdit.SpatialReference_2 = outputSpatialReference;

            FeatureDataConverterClass fdc = new FeatureDataConverterClass();

            return(fdc.ConvertFeatureClass(inputFeatureClassName, queryFilter, outputFeatureDatasetName, outputFeatureClassName, shapeGeoDefEdit, outFields, "", 1000, 0));
        }
Ejemplo n.º 17
0
 /// <summary>
 /// 复制导入要素(ConvertFeatureDataset)
 /// </summary>
 /// <param name="pDataSet"></param>
 /// <param name="strFeatFileDir"></param>
 /// <param name="strFeatFileName"></param>
 /// <param name="strOutName"></param>
 /// <param name="isWorkspace"></param>
 public void FeatureClassToFeatureClass(IDataset pDataSet, string strFeatFileDir, string strFeatFileName, string strOutName, bool isWorkspace)
 {
     try
     {
         IWorkspaceFactory pWSF            = new ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass();
         IFeatureWorkspace pFeatureWK      = (IFeatureWorkspace)pWSF.OpenFromFile(strFeatFileDir, 0);
         IFeatureClass     pInFeatureClass = pFeatureWK.OpenFeatureClass(strFeatFileName);
         if (pInFeatureClass == null || pDataSet == null)
         {
             MessageBox.Show("创建失败");
             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))
         {
             MessageBoxResult result = MessageBox.Show(null, "矢量文件名  " + strOutName + "  在数据库中已存在!" + "/r是否覆盖?", "相同文件名", MessageBoxButton.YesNo, MessageBoxImage.Information, MessageBoxResult.Yes);
             //覆盖原矢量要素
             if (result == MessageBoxResult.Yes)
             {
                 IFeatureWorkspace pFWS     = (IFeatureWorkspace)pWS2;
                 IDataset          pDataset = pFWS.OpenFeatureClass(strOutName) as IDataset;
                 pDataset.Delete();
                 pDataset = null;
             }
         }
         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)
     {
         MessageBox.Show(ex.Message);
         return;
     }
 }
Ejemplo n.º 18
0
        public static void Project(IFeatureClass ifeatureClass_0, ISpatialReference ispatialReference_0,
                                   IFeatureDatasetName ifeatureDatasetName_0, string string_0, double double_0)
        {
            IWorkspace            workspace            = ((IDataset)ifeatureClass_0).Workspace;
            IFeatureDataConverter featureDataConverter = new FeatureDataConverter();
            IWorkspaceName        workspaceName        = new WorkspaceName() as IWorkspaceName;

            workspaceName.ConnectionProperties   = workspace.ConnectionProperties;
            workspaceName.WorkspaceFactoryProgID = workspace.WorkspaceFactory.GetClassID().Value.ToString();
            IWorkspaceName workspaceName2 = (ifeatureDatasetName_0 as IDatasetName).WorkspaceName;
            IDatasetName   datasetName    = new FeatureClassName() as IDatasetName;
            string         text           = ifeatureClass_0.AliasName;
            int            num            = text.LastIndexOf(".");

            if (num != -1)
            {
                text = text.Substring(num + 1);
            }
            datasetName.Name          = text;
            datasetName.WorkspaceName = workspaceName;
            IWorkspace2  workspace2   = (workspaceName2 as IName).Open() as IWorkspace2;
            IDatasetName datasetName2 = new FeatureClassName() as IDatasetName;

            datasetName2.WorkspaceName = workspaceName2;
            (datasetName2 as IFeatureClassName).FeatureDatasetName = (ifeatureDatasetName_0 as IDatasetName);
            IFieldChecker fieldChecker = new FieldChecker();

            fieldChecker.ValidateWorkspace = (workspace2 as IWorkspace);
            string[] array = string_0.Split(new char[]
            {
                '.'
            });
            string_0 = array[array.Length - 1] + "_Project";
            string text2;

            fieldChecker.ValidateTableName(string_0, out text2);
            string text3 = text2;
            int    num2  = 1;

            if (workspaceName2.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace ||
                workspaceName2.Type == esriWorkspaceType.esriLocalDatabaseWorkspace)
            {
                while (workspace2.get_NameExists(esriDatasetType.esriDTFeatureClass, text3))
                {
                    text3 = text2 + "_" + num2.ToString();
                    num2++;
                }
            }
            else if (workspaceName2.Type == esriWorkspaceType.esriFileSystemWorkspace)
            {
                while (System.IO.File.Exists(text3 + ".shp"))
                {
                    text3 = text2 + "_" + num2.ToString();
                    num2++;
                }
            }
            datasetName2.Name = text3;
            IFields fields = new ESRI.ArcGIS.Geodatabase.Fields() as IFields;

            num = ifeatureClass_0.Fields.FindField(ifeatureClass_0.ShapeFieldName);
            IField            field       = ifeatureClass_0.Fields.get_Field(num);
            IGeometryDef      geometryDef = field.GeometryDef;
            ISpatialReference arg_1D9_0   = geometryDef.SpatialReference;
            double            num3;
            double            num4;
            double            num5;
            double            num6;

            ispatialReference_0.GetDomain(out num3, out num4, out num5, out num6);
            ((IGeometryDefEdit)geometryDef).GridCount_2 = 1;
            ((IGeometryDefEdit)geometryDef).set_GridSize(0, double_0);
            ((IGeometryDefEdit)geometryDef).SpatialReference_2 = ispatialReference_0;
            ((IFieldEdit)field).GeometryDef_2 = geometryDef;
            for (int i = 0; i < ifeatureClass_0.Fields.FieldCount; i++)
            {
                if (i == num)
                {
                    ((IFieldsEdit)fields).AddField(field);
                }
                else
                {
                    IField field2 = ifeatureClass_0.Fields.get_Field(i);
                    ((IFieldsEdit)fields).AddField(field2);
                }
            }
            IEnumFieldError enumFieldError;
            IFields         outputFields;

            fieldChecker.Validate(fields, out enumFieldError, out outputFields);
            if (SRLibCommonFunc.m_pfrm != null)
            {
                SRLibCommonFunc.m_pfrm.FeatureProgress = featureDataConverter;
            }
            try
            {
                featureDataConverter.ConvertFeatureClass((IFeatureClassName)datasetName, null, ifeatureDatasetName_0,
                                                         (IFeatureClassName)datasetName2, geometryDef, outputFields, "", 1000, 0);
            }
            catch (System.Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }
        }
Ejemplo n.º 19
0
 public void ConvertFeatureDataset(IFeatureDatasetName ifeatureDatasetName_0,
                                   IFeatureDatasetName ifeatureDatasetName_1, IGeometryDef igeometryDef_0, string string_0, int int_0,
                                   int int_1)
 {
 }
Ejemplo n.º 20
0
        public void DataImport(IWorkspace sourceWorkspace, IWorkspace targetWorkspace, IFeatureClass sourceFeatureClass, IDataset targetFeatureDataset, string storeName)
        {
            int errorRowCount = 0;
            int totalRowCount = 0;
            Dictionary <int, string> dicError         = new Dictionary <int, string>();
            IDataset       sourceWorkspaceDataset     = (IDataset)sourceWorkspace;
            IDataset       targetWorkspaceDataset     = (IDataset)targetWorkspace;
            string         sourceLayerName            = ((IDataset)sourceFeatureClass).Name;
            IName          sourceWorkspaceDatasetName = sourceWorkspaceDataset.FullName;
            IName          targetWorkspaceDatasetName = targetWorkspaceDataset.FullName;
            IWorkspaceName sourceWorkspaceName        = (IWorkspaceName)sourceWorkspaceDatasetName;
            IWorkspaceName targetWorkspaceName        = (IWorkspaceName)targetWorkspaceDatasetName;

            // Create a name object for the shapefile and cast it to the IDatasetName interface.
            IFeatureClassName sourceFeatureClassName = new FeatureClassNameClass();
            IDatasetName      sourceDatasetName      = (IDatasetName)sourceFeatureClassName;

            sourceDatasetName.Name          = sourceLayerName;
            sourceDatasetName.WorkspaceName = sourceWorkspaceName;

            // Create a name object for the FGDB feature class and cast it to the IDatasetName interface.
            IFeatureClassName targetFeatureClassName = new FeatureClassNameClass();
            IDatasetName      targetDatasetName      = (IDatasetName)targetFeatureClassName;

            targetDatasetName.Name          = storeName;// importMappingScheme.StoreDatasetName;"GEODATA.DLTB7"
            targetDatasetName.WorkspaceName = targetWorkspaceName;

            // Create the objects and references necessary for field validation.
            IFieldChecker   fieldChecker   = new FieldCheckerClass();
            IFields         sourceFields   = sourceFeatureClass.Fields;
            IFields         targetFields   = null;
            IEnumFieldError enumFieldError = null;

            // Set the required properties for the IFieldChecker interface.
            fieldChecker.InputWorkspace    = sourceWorkspace;
            fieldChecker.ValidateWorkspace = targetWorkspace;

            // Validate the fields and check for errors.
            fieldChecker.Validate(sourceFields, out enumFieldError, out targetFields);

            // Find the shape field.
            String shapeFieldName  = sourceFeatureClass.ShapeFieldName;
            int    shapeFieldIndex = sourceFeatureClass.FindField(shapeFieldName);
            IField shapeField      = sourceFields.get_Field(shapeFieldIndex);

            // Get the geometry definition from the shape field and clone it.
            IGeometryDef geometryDef            = shapeField.GeometryDef;
            IClone       geometryDefClone       = (IClone)geometryDef;
            IClone       targetGeometryDefClone = geometryDefClone.Clone();
            IGeometryDef targetGeometryDef      = (IGeometryDef)targetGeometryDefClone;

            // Cast the IGeometryDef to the IGeometryDefEdit interface.
            IGeometryDefEdit targetGeometryDefEdit = (IGeometryDefEdit)targetGeometryDef;

            // Set the IGeometryDefEdit properties.
            targetGeometryDefEdit.GridCount_2 = 1;
            targetGeometryDefEdit.set_GridSize(0, 0.75);

            //修改目标字段
            string fieldNameString = ChangeTargetFields(targetFields);

            if (fieldNameString != string.Empty)
            {
                fieldNameString += string.Format(",{0}", shapeFieldName);
            }
            else
            {
                fieldNameString = shapeFieldName;
            }
            IQueryFilter queryFilter = new QueryFilterClass();

            queryFilter.SubFields = fieldNameString;

            //设置导出的要素集
            IFeatureDatasetName featureDatasetName = null;

            if (targetFeatureDataset != null)
            {
                featureDatasetName = (IFeatureDatasetName)targetFeatureDataset.FullName;
            }

            // Create the converter and run the conversion.
            IFeatureDataConverter featureDataConverter = new FeatureDataConverterClass();
            IEnumInvalidObject    enumInvalidObject    = featureDataConverter.ConvertFeatureClass
                                                             (sourceFeatureClassName, queryFilter, featureDatasetName, targetFeatureClassName,
                                                             targetGeometryDef, targetFields, "", 1000, 0);

            // Check for errors.
            IInvalidObjectInfo invalidObjectInfo = null;

            enumInvalidObject.Reset();
            while ((invalidObjectInfo = enumInvalidObject.Next()) != null)
            {
                if (dicError.ContainsKey(invalidObjectInfo.InvalidObjectID) == false)
                {
                    // Handle the errors in a way appropriate to the application.
                    dicError.Add(invalidObjectInfo.InvalidObjectID, invalidObjectInfo.ErrorDescription);
                    errorRowCount++;
                }
                Console.WriteLine(invalidObjectInfo.InvalidObjectID + "" + invalidObjectInfo.ErrorDescription);
            }
        }
Ejemplo n.º 21
0
        /// <summary>
        /// 要素类转Shape
        /// </summary>
        /// <param name="apFeatureClass"></param>
        private void ExportFeatureClassToConTempShp(IFeatureClass apFeatureClass)
        {
            if (Directory.Exists(System.Windows.Forms.Application.StartupPath + "\\Convert\\DWGConvert\\ConTempShp"))
            {
                Directory.Delete(System.Windows.Forms.Application.StartupPath + "\\Convert\\DWGConvert\\ConTempShp", true);
            }

            //设置导出要素类的参数
            IFeatureClassName pOutFeatureClassName = new FeatureClassNameClass();
            IDataset          pOutDataset          = (IDataset)apFeatureClass;

            pOutFeatureClassName = (IFeatureClassName)pOutDataset.FullName;
            //创建一个输出shp文件的工作空间
            IWorkspaceFactory pShpWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
            IWorkspaceName    pInWorkspaceName     = new WorkspaceNameClass();

            pInWorkspaceName = pShpWorkspaceFactory.Create(System.Windows.Forms.Application.StartupPath + "\\Convert\\DWGConvert", "ConTempShp", null, 0);

            //创建一个要素集合
            IFeatureDatasetName pInFeatureDatasetName = null;
            //创建一个要素类
            IFeatureClassName pInFeatureClassName = new FeatureClassNameClass();
            IDatasetName      pInDatasetClassName;

            pInDatasetClassName               = (IDatasetName)pInFeatureClassName;
            pInDatasetClassName.Name          = "ConTempShp";//作为输出参数
            pInDatasetClassName.WorkspaceName = pInWorkspaceName;
            //通过FIELDCHECKER检查字段的合法性,为输出SHP获得字段集合
            long            iCounter;
            IFields         pOutFields, pInFields;
            IFieldChecker   pFieldChecker;
            IField          pGeoField;
            IEnumFieldError pEnumFieldError = null;

            pInFields     = apFeatureClass.Fields;
            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);

            //try
            //{
            IFeatureDataConverter pShpToClsConverter = new FeatureDataConverterClass();

            pShpToClsConverter.ConvertFeatureClass(pOutFeatureClassName, null, pInFeatureDatasetName, pInFeatureClassName, pOutGeometryDef, pOutFields, "", 1000, 0);
            // MessageBox.Show("导出成功", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);


            //}
            //catch (Exception ex)
            //{

            //}
            /*****20130227杨漾(去掉trycatch,上层trycatch(MainForm)处理)*****/
        }
Ejemplo n.º 22
0
 public IEnumInvalidObject ConvertFeatureClass(IFeatureClassName ifeatureClassName_0, IQueryFilter iqueryFilter_0,
                                               IFeatureDatasetName ifeatureDatasetName_0, IFeatureClassName ifeatureClassName_1,
                                               IGeometryDef igeometryDef_0, IFields ifields_0, string string_0, int int_0, int int_1)
 {
     return(null);
 }
Ejemplo n.º 23
0
        /// <summary>
        /// 将指定要素类复制到目标数据库中(在目标数据库中创建要素类)
        /// </summary>
        /// <param name="pSrcFC">源要素类</param>
        /// <param name="pQueryFilter">查询条件</param>
        /// <param name="pTargetWks">目标数据库</param>
        /// <param name="sMessage">转换消息</param>
        /// <param name="sTargetName">目标要素类名</param>
        /// <param name="sAlias">目标要素类别名</param>
        /// <param name="sFDatasetName">目标要素数据集</param>
        /// <returns></returns>
        public bool TranslateFeatureClass(IFeatureClass pSrcFC, IQueryFilter pQueryFilter, IWorkspace pTargetWks, string sTargetName = null, string sAlias = null, string sFDatasetName = null)
        {
            GeoDataUtils geoDataUtils = new GeoDataUtils();

            IDataset            pSrcDataset         = pSrcFC as IDataset;
            IFeatureClassName   pSrcName            = pSrcDataset.FullName as IFeatureClassName;
            IFeatureDatasetName pFeatureDatasetName = null;

            if (pTargetWks.Type != esriWorkspaceType.esriFileSystemWorkspace)
            {
                string sFeatureDatasetName = sFDatasetName;
                if (string.IsNullOrEmpty(sFeatureDatasetName) && pSrcFC.FeatureDataset != null)
                {
                    sFeatureDatasetName = geoDataUtils.ExtractDatasetName(pSrcFC.FeatureDataset.Name);
                }
                if (!string.IsNullOrEmpty(sFeatureDatasetName))
                {
                    if (geoDataUtils.IsNameExist(pTargetWks, sFeatureDatasetName, esriDatasetType.esriDTFeatureDataset))
                    {
                        IFeatureDataset pTargetFeatureDataset = (pTargetWks as IFeatureWorkspace).OpenFeatureDataset(sFeatureDatasetName);
                        pFeatureDatasetName = pTargetFeatureDataset.FullName as IFeatureDatasetName;
                        Marshal.ReleaseComObject(pTargetFeatureDataset);
                    }
                    else
                    {
                        pFeatureDatasetName = new FeatureDatasetName() as IFeatureDatasetName;
                        IDatasetName pDatasetName = pFeatureDatasetName as IDatasetName;
                        pDatasetName.Name          = sFeatureDatasetName;
                        pDatasetName.WorkspaceName = (pTargetWks as IDataset).FullName as IWorkspaceName;
                    }
                }
            }

            //目标要素类名
            FeatureClassName pTargetName        = new FeatureClassName();
            IDatasetName     pTargetDatasetName = pTargetName as IDatasetName;

            if (string.IsNullOrEmpty(sTargetName))
            {
                sTargetName = geoDataUtils.ExtractDatasetName(pSrcDataset.Name);
            }
            pTargetDatasetName.Name          = sTargetName;
            pTargetDatasetName.WorkspaceName = (pTargetWks as IDataset).FullName as IWorkspaceName;
            geoDataUtils.DeleteDataset(pTargetWks, pTargetDatasetName);

            // 验证字段
            IFields pTargetFields;
            string  sShapeFieldName;

            geoDataUtils.CheckFields(pSrcFC, pTargetWks, out pTargetFields, out sShapeFieldName);
            IEnumInvalidObject    pEnumInvalidObject = null;
            IFeatureDataConverter pConverter         = null;

            try
            {
                int          iIndex             = pTargetFields.FindField(sShapeFieldName);
                IGeometryDef pTargetGeometryDef = pTargetFields.get_Field(iIndex).GeometryDef;

                // 执行批量转换
                pConverter         = new FeatureDataConverter();
                pEnumInvalidObject = pConverter.ConvertFeatureClass(pSrcName, pQueryFilter, pFeatureDatasetName as IFeatureDatasetName,
                                                                    pTargetName as IFeatureClassName, pTargetGeometryDef, pTargetFields, "", 1000, 0);

                // 检查转换过程中是否产生错误
                if (pEnumInvalidObject != null)
                {
                    IInvalidObjectInfo pInvalidInfo = null;
                    pEnumInvalidObject.Reset();
                    while ((pInvalidInfo = pEnumInvalidObject.Next()) != null)
                    {
                        ErrorMessage += pSrcFC.AliasName + "图层要素:" + pInvalidInfo.InvalidObjectID + "执行失败!";
                    }
                }
            }
            finally //释放资源
            {
                if (pEnumInvalidObject != null)
                {
                    Marshal.ReleaseComObject(pEnumInvalidObject);
                }
                if (pConverter != null)
                {
                    Marshal.ReleaseComObject(pConverter);
                }
            }
            //修改要素类别名
            if (string.IsNullOrEmpty(sAlias))
            {
                sAlias = pSrcFC.AliasName;
            }
            IFeatureClass pTargetFC = (pTargetWks as IFeatureWorkspace).OpenFeatureClass(sTargetName);

            geoDataUtils.AlterDatasetAlias(pTargetFC, sAlias);
            Marshal.ReleaseComObject(pTargetFC);
            return(true);
        }
Ejemplo n.º 24
0
        /// <summary>
        /// 导出FeatureClass到Shapefile文件
        /// </summary>
        /// <param name="sPath"></param>
        /// <param name="apFeatureClass"></param>
        public static bool ExportFeatureClassToShp(string sPath, IFeatureClass apFeatureClass)
        {
            try
            {
                DateTime dt             = DateTime.Now;
                string   strTime        = string.Format("{0:yyyyMMddHHmmss}", dt);
                string   fileName       = System.IO.Path.GetFileNameWithoutExtension(sPath);              //文件名称
                string   ExportFilePath = System.IO.Path.GetDirectoryName(sPath);                         //文件夹路径
                string   ExportFileName = ExportFilePath.Substring(ExportFilePath.LastIndexOf("\\") + 1); //最后选择的文件夹
                //如果是c:\\这样的根目录,那么根日期建立一个导出文件夹的名称
                if (string.IsNullOrEmpty(ExportFileName))
                {
                    ExportFileName = "导出Shape文件";
                }
                else
                {
                    ExportFilePath = ExportFilePath.Substring(0, ExportFilePath.LastIndexOf("\\"));//除了导出文件夹的路径
                }
                //设置导出要素类的参数
                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, ExportFileName, null, 0);

                //创建一个要素集合
                IFeatureDatasetName pInFeatureDatasetName = null;
                //创建一个要素类
                IFeatureClassName pInFeatureClassName = new FeatureClassNameClass();
                IDatasetName      pInDatasetClassName;
                pInDatasetClassName               = (IDatasetName)pInFeatureClassName;
                pInDatasetClassName.Name          = fileName + strTime;//作为输出参数
                pInDatasetClassName.WorkspaceName = pInWorkspaceName;
                //通过FIELDCHECKER检查字段的合法性,为输出SHP获得字段集合
                long    iCounter;
                IFields pOutFields, pInFields;

                IField          pGeoField;
                IEnumFieldError pEnumFieldError = null;

                IQueryFilter filter = null;
                string       subset = "";

                pInFields = apFeatureClass.Fields;
                IFieldChecker pFieldChecker = new FieldChecker();
                pFieldChecker.Validate(pInFields, out pEnumFieldError, out pOutFields);

                //通过循环查找几何字段
                pGeoField = null;
                for (iCounter = 0; iCounter < pOutFields.FieldCount; iCounter++)
                {
                    IField field = pOutFields.get_Field((int)iCounter);
                    if (field.Type == esriFieldType.esriFieldTypeGeometry)
                    {
                        pGeoField = field;
                    }
                    if (!IsBlob(field))
                    {
                        string fieldName = field.Name;
                        if (fieldName.Contains("_"))
                        {
                            fieldName = fieldName.Replace("_", ".");
                        }
                        subset += (fieldName + ",");
                    }
                }
                subset           = subset.Substring(0, subset.LastIndexOf(","));
                filter           = new QueryFilterClass();
                filter.SubFields = subset;

                //得到几何字段的几何定义
                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, filter, pInFeatureDatasetName, pInFeatureClassName, pOutGeometryDef, pOutFields, "", 1000, 0);
                return(true);
            }
            catch
            {
                return(false);
            }
        }
Ejemplo n.º 25
0
        public static void OperateConvertToShape(string sFileName, IFeatureClass pInFeatureClass)
        {
            try
            {
                string str = sFileName;

                string str2 = str.Substring(str.LastIndexOf(@"\") + 1);         //文件名

                string str3 = str.Substring(0, (str.Length - str2.Length) - 1); //路径


                IDataset pInDataset = pInFeatureClass as IDataset;

                IDatasetName pInputDatasetName = (IDatasetName)pInDataset.FullName;

                IFeatureClassName pInputFClassName = (IFeatureClassName)pInputDatasetName;

                ///////////////////////////////////////////// //创建一个输出shp文件的工作空间
                IWorkspaceFactory pShpWorkspaceFactory = new ShapefileWorkspaceFactoryClass() as IWorkspaceFactory;

                IWorkspace pWorkspace = pShpWorkspaceFactory.OpenFromFile(str3, 0);

                IWorkspaceName pOutWorkspaceName = new WorkspaceNameClass();

                IDataset pDataset = pWorkspace as IDataset;

                pOutWorkspaceName = (IWorkspaceName)pDataset.FullName;

                //创建一个要素集合

                IFeatureDatasetName pOutFeatureDatasetName = null;

                //创建一个要素类

                IFeatureClassName pOutFeatureClassName = new FeatureClassNameClass();

                IDatasetName pOutDatasetClassName = (IDatasetName)pOutFeatureClassName;

                pOutDatasetClassName.Name = str2;

                //作为输出参数

                pOutDatasetClassName.WorkspaceName = pOutWorkspaceName;

                //////////////////////////////////////////////////////////////// //创建输出文件属性字段

                IFields pOutFields, pInFields;

                IFieldChecker pFieldChecker;

                IField pGeoField;

                IEnumFieldError pEnumFieldError = null;

                pInFields = pInFeatureClass.Fields;

                pFieldChecker = new FieldChecker();

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

                ///设置输出文件的几何定义

                String shapeFieldName = pInFeatureClass.ShapeFieldName;

                int shapeFieldIndex = pInFeatureClass.FindField(shapeFieldName);

                IField shapeField = pInFeatureClass.Fields.get_Field(shapeFieldIndex);

                IGeometryDef geometryDef = shapeField.GeometryDef;

                IClone geometryDefClone = (IClone)geometryDef;

                IClone outGeometryDefClone = geometryDefClone.Clone();

                IGeometryDef outGeometryDef = (IGeometryDef)outGeometryDefClone;

                IFeatureDataConverter featureDataConverter = new FeatureDataConverterClass();

                IEnumInvalidObject enumInvalidObject = featureDataConverter.ConvertFeatureClass(pInputFClassName, null, null, pOutFeatureClassName, outGeometryDef, pOutFields, "", 1000, 0);

                //  IFeatureDataConverter pFeatureDataConverter =  new FeatureDataConverterClass();
                //pFeatureDataConverter.ConvertFeatureClass(sFeatureClassName, null, null, pFeatureClassName, null, null, "", 0x3e8, 0);

                MessageBox.Show("等值线计算完毕!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            catch (Exception exception)
            {
                MessageBox.Show(exception.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
Ejemplo n.º 26
0
        /// <summary>
        /// 将GDB的数据入到SDE中 xisheng 20110919
        /// </summary>
        private void ImportGDBToSDE(string file, string outfilename, out int featurecount)
        {
            m_success = false;//初始化
            try
            {
                string filepath = file.Substring(0, file.LastIndexOf("---"));
                string filename = file.Substring(file.LastIndexOf("-") + 1);

                //打开mdb文件所在的工作空间
                ESRI.ArcGIS.Geodatabase.IWorkspaceFactory wf = new FileGDBWorkspaceFactory();
                IFeatureWorkspace pFeatureWorkspaceGDB       = wf.OpenFromFile(@filepath, 0) as IFeatureWorkspace;
                IWorkspace        pWorkspaceGDB = pFeatureWorkspaceGDB as IWorkspace;
                // 创建源工作空间名称
                IDataset       sourceWorkspaceDataset = (IDataset)pFeatureWorkspaceGDB;
                IWorkspaceName sourceWorkspaceName    = (IWorkspaceName)sourceWorkspaceDataset.FullName;

                //创建源数据集名称
                //IFeatureClassName sourceFeatureClassName = serverContext.CreateObject("esriGeoDatabase.FeatureClassName") as IFeatureClassName;
                IFeatureClassName sourceFeatureClassName = new FeatureClassNameClass();
                IDatasetName      sourceDatasetName      = (IDatasetName)sourceFeatureClassName;
                sourceDatasetName.WorkspaceName = sourceWorkspaceName;
                sourceDatasetName.Name          = filename;

                //打开存在的工作空间,作为导入的空间;
                IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pTargetworkspace;

                //创建目标工作空间名称
                IDataset        targetWorkspaceDataset = (IDataset)pTargetworkspace;
                IWorkspaceName  targetWorkspaceName    = (IWorkspaceName)targetWorkspaceDataset.FullName;
                IWorkspace2     pWorkspace2            = pTargetworkspace as IWorkspace2;
                IFeatureDataset tmpfeaturedataset;
                //创建目标数据集名称
                // IFeatureClassName targetFeatureClassName = serverContext.CreateObject("esriGeoDatabase.FeatureClassName") as IFeatureClassName;
                //判断要素是否存在,若存在将删除源文件
                if (pWorkspace2.get_NameExists(esriDatasetType.esriDTFeatureDataset, textBox.Text))
                {
                    tmpfeaturedataset = pFeatureWorkspace.OpenFeatureDataset(textBox.Text);
                    if (text_prj.Text != "")
                    {
                        IGeoDatasetSchemaEdit pgeodataset = tmpfeaturedataset as IGeoDatasetSchemaEdit;
                        if (pgeodataset.CanAlterSpatialReference)
                        {
                            pgeodataset.AlterSpatialReference(GetSpatialReferenceformFile(text_prj.Text));
                        }
                    }
                }
                else
                {
                    tmpfeaturedataset = CreateFeatureDataset(pTargetworkspace as IFeatureWorkspace, textBox.Text, text_prj.Text);
                }
                if (pWorkspace2.get_NameExists(esriDatasetType.esriDTFeatureClass, outfilename))
                {
                    IFeatureClass tmpfeatureclass;
                    tmpfeatureclass = pFeatureWorkspace.OpenFeatureClass(outfilename);
                    IDataset tempset = tmpfeatureclass as IDataset;
                    tempset.Delete();
                }

                IFeatureClassName targetFeatureClassName = new FeatureClassNameClass();
                IDatasetName      targetDatasetName      = (IDatasetName)targetFeatureClassName;
                targetDatasetName.WorkspaceName = targetWorkspaceName;
                targetDatasetName.Name          = outfilename;
                //目标数据集
                IFeatureDatasetName outfeaturedatasetname = tmpfeaturedataset.FullName as IFeatureDatasetName;


                //打开输入的要素类以得到字段定义
                ESRI.ArcGIS.esriSystem.IName sourceName = (ESRI.ArcGIS.esriSystem.IName)sourceFeatureClassName;
                IFeatureClass sourceFeatureClass        = (IFeatureClass)sourceName.Open();//打开源要素类

                //验证字段名称,因为你正在不同类型的工作空间之间进行数据转换
                //IFieldChecker fieldChecker = serverContext.CreateObject("esriGeoDatabase.FieldChecker") as IFieldChecker;
                IFieldChecker   fieldChecker             = new FieldCheckerClass();
                IFields         sourceFeatureClassFields = sourceFeatureClass.Fields;
                IFields         targetFeatureClassFields;
                IEnumFieldError enumFieldError;

                //最重要的设置输入和验证工作空间
                fieldChecker.InputWorkspace    = pWorkspaceGDB;
                fieldChecker.ValidateWorkspace = pTargetworkspace;
                fieldChecker.Validate(sourceFeatureClassFields, out enumFieldError, out targetFeatureClassFields);

                //遍历所有输出字段找到几何字段
                IField geometryField;
                for (int i = 0; i < targetFeatureClassFields.FieldCount; i++)
                {
                    if (targetFeatureClassFields.get_Field(i).Type == esriFieldType.esriFieldTypeGeometry)
                    {
                        geometryField = targetFeatureClassFields.get_Field(i);
                        //得到几何字段的几何定义
                        IGeometryDef geometryDef = geometryField.GeometryDef;
                        //赋予几何定义一个空间索引格网数目和格网大小值
                        IGeometryDefEdit targetFCGeoDefEdit = (IGeometryDefEdit)geometryDef;
                        targetFCGeoDefEdit.GridCount_2 = 1;
                        targetFCGeoDefEdit.set_GridSize(0, 0);
                        //允许ArcGIS为数据加载确定一个有效的格网大小
                        targetFCGeoDefEdit.SpatialReference_2 = geometryField.GeometryDef.SpatialReference;
                        //转换要素类中所有的要素
                        //IQueryFilter queryFilter = serverContext.CreateObject("esriGeoDatabase.QueryFilter") as IQueryFilter; ;
                        QueryFilter queryFilter = new QueryFilterClass();
                        queryFilter.WhereClause = "";
                        //加载要素类
                        //IFeatureDataConverter fctofc = serverContext.CreateObject("esriGeoDatabase.FeatureDataConverter") as IFeatureDataConverter;

                        IFeatureDataConverter fctofc     = new FeatureDataConverterClass();
                        IEnumInvalidObject    enumErrors = fctofc.ConvertFeatureClass(sourceFeatureClassName, queryFilter, outfeaturedatasetname, targetFeatureClassName, geometryDef, targetFeatureClassFields, "", 1000, 0);
                    }
                }
                featurecount = sourceFeatureClass.FeatureCount(null);
                m_success    = true;
            }
            catch (Exception ee) { m_success = false; m_strErr = ee.Message; featurecount = 0; }
        }
Ejemplo n.º 27
0
        //创建要素
        public void ExportFeature(IFeatureClass apFeatureClass, string ExportFilePath, string ExportFileShortName)
        {
            if (apFeatureClass == null)
            {
                MessageBox.Show("分析出错,请检查路径分析结果", "系统提示");
                return;
            }

            //设置导出要素类的参数
            IFeatureClassName pOutFeatureClassName = new FeatureClassNameClass();
            IDataset          pOutDataset          = (IDataset)apFeatureClass;

            pOutFeatureClassName = (IFeatureClassName)pOutDataset.FullName;
            //创建一个输出shp文件的工作空间
            IWorkspaceFactory pShpWorkspaceFactory = new ShapefileWorkspaceFactory();
            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;
            //自定义字段
            AddField(apFeatureClass, "Elevation", "", esriFieldType.esriFieldTypeInteger);
            //通过FIELDCHECKER检查字段的合法性,为输出SHP获得字段集合
            long            iCounter;
            IFields         pOutFields, pInFields;
            IFieldChecker   pFieldChecker;
            IField          pGeoField;
            IEnumFieldError pEnumFieldError = null;

            pInFields     = apFeatureClass.Fields;
            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);
            try
            {
                //开始导入
                IFeatureDataConverter pShpToClsConverter = new FeatureDataConverterClass();
                pShpToClsConverter.ConvertFeatureClass(pOutFeatureClassName, null, pInFeatureDatasetName, pInFeatureClassName, pOutGeometryDef, pOutFields, "", 1000, 0);
                MessageBox.Show("导出成功!");
            }
            catch
            {
            }
        }