public static IFeatureClass GetShpFeatureClass(string directory, string fileName)
        {
            IWorkspaceFactory            workspaceFactory = new ShapefileWorkspaceFactory();
            IWorkspace                   workspace        = workspaceFactory.OpenFromFile(directory, 0);
            IFeatureClass                featureClass     = workspace.GetFeatureClass(fileName);
            IWorkspaceFactoryLockControl factorylock      = workspaceFactory as IWorkspaceFactoryLockControl;

            if (factorylock.SchemaLockingEnabled)
            {
                factorylock.DisableSchemaLocking();
            }
            return(featureClass);
        }
Esempio n. 2
0
        /// <summary>
        /// 获得指定文件夹的工作区间要素编辑接口
        /// </summary>
        /// <param name="folder">文件夹路径</param>
        /// <returns>要素编辑接口</returns>
        public static IWorkspaceEdit GetEdit(string folder)
        {
            IWorkspaceFactory            wsf             = new ShapefileWorkspaceFactoryClass();
            IWorkspaceFactoryLockControl ipWsFactoryLock = (IWorkspaceFactoryLockControl)wsf;

            if (ipWsFactoryLock.SchemaLockingEnabled)
            {
                ipWsFactoryLock.DisableSchemaLocking();
            }
            IFeatureWorkspace fws    = (IFeatureWorkspace)wsf.OpenFromFile(folder, 0);
            IWorkspaceEdit    wsEdit = fws as IWorkspaceEdit;

            return(wsEdit);
        }
Esempio n. 3
0
        //获取featureClass
        public static IFeatureClass GetFeatureClass(string filePath)
        {
            IWorkspaceFactory            pWorkspaceFactory            = new ShapefileWorkspaceFactory();
            IWorkspaceFactoryLockControl pWorkspaceFactoryLockControl = pWorkspaceFactory as IWorkspaceFactoryLockControl;

            if (pWorkspaceFactoryLockControl.SchemaLockingEnabled)
            {
                pWorkspaceFactoryLockControl.DisableSchemaLocking();
            }
            IWorkspace        pWorkspace        = pWorkspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(filePath), 0);
            IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;
            IFeatureClass     pFeatureClass     = pFeatureWorkspace.OpenFeatureClass(System.IO.Path.GetFileName(filePath));

            return(pFeatureClass);
        }
Esempio n. 4
0
        public static void Move(string filePath, List <StockTable> tables)
        {
            IWorkspaceFactory workspaceFactory = new AccessWorkspaceFactoryClass();
            IWorkspace        workspace        = workspaceFactory.OpenFromFile(filePath, 0);

            IEnumDataset    dataset        = workspace.get_Datasets(esriDatasetType.esriDTFeatureDataset);
            IFeatureDataset featureDataset = dataset.Next() as IFeatureDataset;

            foreach (var table in tables)
            {
            }

            IWorkspaceFactoryLockControl factorylock = workspaceFactory as IWorkspaceFactoryLockControl;

            if (factorylock.SchemaLockingEnabled)
            {
                factorylock.DisableSchemaLocking();
            }
        }
Esempio n. 5
0
        /// <summary>
        /// 给要素类 添加字段  XZSDM  XZSMC
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="tables"></param>
        public static void AddFields(string filePath, List <StockTable> tables)
        {
            IWorkspaceFactory workspaceFactory = new AccessWorkspaceFactoryClass();
            IWorkspace        workspace        = workspaceFactory.OpenFromFile(filePath, 0);

            foreach (var table in tables)
            {
                IFeatureClass featureClass = workspace.GetFeatureClass(table.Name);
                if (featureClass != null)
                {
                    IClass      pClass     = featureClass as IClass;
                    IFieldsEdit fieldsEdit = featureClass.Fields as IFieldsEdit;
                    IField      field      = null;
                    IFieldEdit  fieldedit  = null;
                    var         index      = featureClass.Fields.FindField("XZSDM");

                    if (index == -1)
                    {
                        field            = new FieldClass();
                        fieldedit        = field as IFieldEdit;
                        fieldedit.Type_2 = esriFieldType.esriFieldTypeString;
                        fieldedit.Name_2 = "XZSDM";
                        pClass.AddField(field);
                    }
                    index = featureClass.Fields.FindField("XZSMC");
                    if (index == -1)
                    {
                        field            = new FieldClass();
                        fieldedit        = field as IFieldEdit;
                        fieldedit.Type_2 = esriFieldType.esriFieldTypeString;
                        fieldedit.Name_2 = "XZSMC";
                        pClass.AddField(field);
                    }
                }
            }
            IWorkspaceFactoryLockControl factorylock = workspaceFactory as IWorkspaceFactoryLockControl;

            if (factorylock.SchemaLockingEnabled)
            {
                factorylock.DisableSchemaLocking();
            }
        }
Esempio n. 6
0
        private static IFeatureClass GetFeatureClass(string mdbfile, string featureClassName)
        {
            IWorkspaceFactory            workspaceFactory = new AccessWorkspaceFactoryClass();
            IWorkspace                   workspace        = workspaceFactory.OpenFromFile(mdbfile, 0);
            IFeatureClass                featureClass     = workspace.GetFeatureClass(featureClassName);
            IWorkspaceFactoryLockControl factorylock      = workspaceFactory as IWorkspaceFactoryLockControl;

            if (factorylock.SchemaLockingEnabled)
            {
                factorylock.DisableSchemaLocking();
            }
            IDataset dataset = featureClass as IDataset;

            Console.WriteLine(dataset.FullName);
            Console.WriteLine(dataset.Name);
            Console.WriteLine(dataset.BrowseName);
            Console.WriteLine(dataset.Category);

            Console.WriteLine(featureClass.AliasName);

            return(featureClass);
        }
        /// <summary>
        /// 根据栅格图层创建SHP,栅格图层要在根目录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CreatePolygenShpFromRasterLayerButton_Click(object sender, EventArgs e)
        {
            string            strFileNameWithType = "Rectangle.shp";                 //shp文件名
            string            strFolderPath       = Application.StartupPath;
            IWorkspaceFactory mIWorkspaceFactory  = new ShapefileWorkspaceFactory(); //文件夹
            IWorkspace        mIWorkspace         = mIWorkspaceFactory.OpenFromFile(strFolderPath, 0);
            IFeatureWorkspace mIFeatureWorkspace  = mIWorkspace as IFeatureWorkspace;
            IFeatureClass     mIFeatureClass;

            if (File.Exists(strFolderPath + "\\" + strFileNameWithType))
            {
                mIFeatureClass = mIFeatureWorkspace.OpenFeatureClass(strFileNameWithType);//fileName为文件名(不包含路径)
                IDataset mIDataset = mIFeatureClass as IDataset;
                mIDataset.Delete();
            }
            //指定类型和空间参考
            IGeometryDef     mIGeometryDef     = new GeometryDefClass();
            IGeometryDefEdit mIGeometryDefEdit = mIGeometryDef as IGeometryDefEdit;

            mIGeometryDefEdit.GeometryType_2     = esriGeometryType.esriGeometryPolygon;
            mIGeometryDefEdit.SpatialReference_2 = this.MapControl.SpatialReference;
            //建立Shp文件的字段集
            IFields     mIFields     = new FieldsClass();
            IFieldsEdit mIFieldsEdit = mIFields as IFieldsEdit;
            IField      mIField      = new FieldClass();
            IFieldEdit  mIFieldEdit  = mIField as IFieldEdit;

            //建立shape(几何)字段
            mIFieldEdit.Name_2        = "Shape";
            mIFieldEdit.Type_2        = esriFieldType.esriFieldTypeGeometry;
            mIFieldEdit.GeometryDef_2 = mIGeometryDef;
            mIFieldsEdit.AddField(mIField);
            //新建Name字段
            mIField                 = new FieldClass();
            mIFieldEdit             = mIField as IFieldEdit;
            mIFieldEdit.Length_2    = 32;
            mIFieldEdit.Name_2      = "Name";
            mIFieldEdit.AliasName_2 = "Name";
            mIFieldEdit.Type_2      = esriFieldType.esriFieldTypeString;
            mIFieldsEdit.AddField(mIField);

            //新建Xmin字段
            mIField                 = new FieldClass();
            mIFieldEdit             = mIField as IFieldEdit;
            mIFieldEdit.Length_2    = 32;
            mIFieldEdit.Name_2      = "Xmin";
            mIFieldEdit.AliasName_2 = "Xmin";
            mIFieldEdit.Type_2      = esriFieldType.esriFieldTypeDouble;
            mIFieldsEdit.AddField(mIField);

            //新建Ymin字段
            mIField                 = new FieldClass();
            mIFieldEdit             = mIField as IFieldEdit;
            mIFieldEdit.Length_2    = 32;
            mIFieldEdit.Name_2      = "Ymin";
            mIFieldEdit.AliasName_2 = "Ymin";
            mIFieldEdit.Type_2      = esriFieldType.esriFieldTypeDouble;
            mIFieldsEdit.AddField(mIField);

            //新建Xmax字段
            mIField                 = new FieldClass();
            mIFieldEdit             = mIField as IFieldEdit;
            mIFieldEdit.Length_2    = 32;
            mIFieldEdit.Name_2      = "Xmax";
            mIFieldEdit.AliasName_2 = "Xmax";
            mIFieldEdit.Type_2      = esriFieldType.esriFieldTypeDouble;
            mIFieldsEdit.AddField(mIField);

            //新建Ymax字段
            mIField                 = new FieldClass();
            mIFieldEdit             = mIField as IFieldEdit;
            mIFieldEdit.Length_2    = 32;
            mIFieldEdit.Name_2      = "Ymax";
            mIFieldEdit.AliasName_2 = "Ymax";
            mIFieldEdit.Type_2      = esriFieldType.esriFieldTypeDouble;
            mIFieldsEdit.AddField(mIField);

            //新建CSize字段
            mIField                 = new FieldClass();
            mIFieldEdit             = mIField as IFieldEdit;
            mIFieldEdit.Length_2    = 32;
            mIFieldEdit.Name_2      = "CSize";
            mIFieldEdit.AliasName_2 = "CSize";
            mIFieldEdit.Type_2      = esriFieldType.esriFieldTypeDouble;
            mIFieldsEdit.AddField(mIField);

            //新建Width字段
            mIField                 = new FieldClass();
            mIFieldEdit             = mIField as IFieldEdit;
            mIFieldEdit.Length_2    = 32;
            mIFieldEdit.Name_2      = "Width";
            mIFieldEdit.AliasName_2 = "Width";
            mIFieldEdit.Type_2      = esriFieldType.esriFieldTypeInteger;
            mIFieldsEdit.AddField(mIField);

            //新建Height字段
            mIField                 = new FieldClass();
            mIFieldEdit             = mIField as IFieldEdit;
            mIFieldEdit.Length_2    = 32;
            mIFieldEdit.Name_2      = "Height";
            mIFieldEdit.AliasName_2 = "Height";
            mIFieldEdit.Type_2      = esriFieldType.esriFieldTypeInteger;
            mIFieldsEdit.AddField(mIField);

            //最后创建Shp文件
            mIFeatureClass = mIFeatureWorkspace.CreateFeatureClass(strFileNameWithType, mIFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
            for (int i = 0; i < this.MapControl.LayerCount; i++)
            {
                ILayer       mILayer       = this.MapControl.get_Layer(i);
                IRasterLayer mIRasterLayer = mILayer as IRasterLayer;
                if (mIRasterLayer != null)
                {
                    IRasterProps     mIRasterProps     = mIRasterLayer.Raster as IRasterProps;
                    IFeature         mIFeature         = mIFeatureClass.CreateFeature();
                    IPointCollection mIPointCollection = new PolygonClass();
                    mIPointCollection.AddPoint(mIRasterProps.Extent.UpperLeft);
                    mIPointCollection.AddPoint(mIRasterProps.Extent.UpperRight);
                    mIPointCollection.AddPoint(mIRasterProps.Extent.LowerRight);
                    mIPointCollection.AddPoint(mIRasterProps.Extent.LowerLeft);
                    mIPointCollection.AddPoint(mIRasterProps.Extent.UpperLeft);
                    IPolygon mIPolygon = (IPolygon)mIPointCollection;
                    mIFeature.Shape = mIPolygon;
                    mIFeature.set_Value(mIFeature.Fields.FindField("Name"), mILayer.Name);
                    mIFeature.set_Value(mIFeature.Fields.FindField("Xmin"), mIRasterProps.Extent.XMin);
                    mIFeature.set_Value(mIFeature.Fields.FindField("Ymin"), mIRasterProps.Extent.YMin);
                    mIFeature.set_Value(mIFeature.Fields.FindField("Xmax"), mIRasterProps.Extent.XMax);
                    mIFeature.set_Value(mIFeature.Fields.FindField("Ymax"), mIRasterProps.Extent.YMax);
                    mIFeature.set_Value(mIFeature.Fields.FindField("CSize"), mIRasterProps.MeanCellSize().X.RetentionDecimal(3));
                    //douCellSize = mIRasterProps.MeanCellSize().X.RetentionDecimal(3);
                    mIFeature.set_Value(mIFeature.Fields.FindField("Width"), mIRasterProps.Width);
                    mIFeature.set_Value(mIFeature.Fields.FindField("Height"), mIRasterProps.Height);
                    mIFeature.Store();
                }
            }
            //解除锁定
            IWorkspaceFactoryLockControl mIWorkspaceFactoryLockControl = mIWorkspaceFactory as IWorkspaceFactoryLockControl;

            if (mIWorkspaceFactoryLockControl.SchemaLockingEnabled)
            {
                mIWorkspaceFactoryLockControl.DisableSchemaLocking();
            }
        }
Esempio n. 8
0
        /// <summary>
        /// Opens the workspace.
        /// </summary>
        /// <param name="sFilePath">The s file path.</param>
        /// <param name="type">The type.</param>
        /// <returns>IWorkspace.</returns>
        public static IWorkspace OpenWorkspace(string sFilePath, DataType type)
        {
            IWorkspace result;

            try
            {
                sFilePath = sFilePath.TrimEnd(new char[]
                {
                    '\\'
                });
                IWorkspaceFactory workspaceFactory = null;
                if (type <= DataType.sde)
                {
                    switch (type)
                    {
                    case DataType.shp:
                        workspaceFactory = new ShapefileWorkspaceFactoryClass();
                        //关闭资源锁定
                        IWorkspaceFactoryLockControl ipWsFactoryLock = (IWorkspaceFactoryLockControl)workspaceFactory;
                        if (ipWsFactoryLock.SchemaLockingEnabled)
                        {
                            ipWsFactoryLock.DisableSchemaLocking();
                        }
                        break;

                    case DataType.mdb:
                        workspaceFactory = new AccessWorkspaceFactoryClass();
                        break;

                    case (DataType)3:
                        break;

                    case DataType.gdb:
                        workspaceFactory = new FileGDBWorkspaceFactoryClass();
                        break;

                    default:
                        if (type == DataType.sde)
                        {
                            workspaceFactory = new SdeWorkspaceFactoryClass();
                        }
                        break;
                    }
                }
                else if (type != DataType.cad)
                {
                    if (type != DataType.raster)
                    {
                        if (type == DataType.coverage)
                        {
                            workspaceFactory = new ArcInfoWorkspaceFactoryClass();
                        }
                    }
                    else
                    {
                        workspaceFactory = new RasterWorkspaceFactoryClass();
                    }
                }
                else
                {
                    workspaceFactory = new CadWorkspaceFactoryClass();
                }

                result = workspaceFactory.OpenFromFile(sFilePath, 0);
            }
            catch
            {
                result = null;
            }
            return(result);
        }
Esempio n. 9
0
        /// <summary>
        /// 创建矢量图层
        /// </summary>
        /// <param name="path">图层路径</param>
        /// <param name="sr">参考系</param>
        /// <param name="attributeNames">属性名称</param>
        /// <param name="attributeTypes">属性类型</param>
        /// <param name="shapeType">图层形状</param>
        ///<returns>要素图层</returns>
        public static IFeatureLayer CreateFeatureLayer(string path, ISpatialReference sr, string[] attributeNames, string[] attributeTypes, string shapeType)
        {
            IWorkspaceFactory            xjWsF           = new ShapefileWorkspaceFactoryClass();
            IWorkspaceFactoryLockControl ipWsFactoryLock = (IWorkspaceFactoryLockControl)xjWsF;

            if (ipWsFactoryLock.SchemaLockingEnabled)
            {
                ipWsFactoryLock.DisableSchemaLocking();
            }
            IFeatureWorkspace xjFWs = (IFeatureWorkspace)xjWsF.OpenFromFile(System.IO.Path.GetDirectoryName(path), 0);
            //新建字段集
            IFields     xjFields     = new FieldsClass();
            IFieldsEdit xjFieldsEdit = (IFieldsEdit)xjFields;

            //新建Shape字段
            IField     xjField     = new FieldClass();
            IFieldEdit xjFieldEdit = (IFieldEdit)xjField;

            xjFieldEdit.Name_2 = "Shape";                             //字段名
            xjFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry; //字段类型
            IGeometryDef     xjGeometryDef = new GeometryDefClass();
            IGeometryDefEdit xjGDefEdit    = (IGeometryDefEdit)xjGeometryDef;

            if (shapeType.Equals("P"))
            {
                xjGDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;//几何类型
            }
            else if (shapeType.Equals("L"))
            {
                xjGDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;//几何类型
            }
            else
            {
                xjGDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon; //几何类型
            }
            xjGDefEdit.SpatialReference_2 = sr;                                   //参考系
            xjFieldEdit.GeometryDef_2     = xjGeometryDef;
            xjFieldsEdit.AddField(xjField);

            IFeatureClass xjFeatureClass;
            IFeatureLayer fl = new FeatureLayerClass();

            //新建其他字段
            if (attributeNames == null)
            {
                xjFeatureClass  = xjFWs.CreateFeatureClass(System.IO.Path.GetFileName(path), xjFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
                fl.FeatureClass = xjFeatureClass;
                return(fl);
            }
            for (int i = 0; i < attributeNames.Length; i++)
            {
                IField     xjField2     = new FieldClass();
                IFieldEdit xjFieldEdit2 = xjField2 as IFieldEdit;
                xjFieldEdit2.Name_2 = attributeNames[i];
                xjFieldEdit2.Type_2 = GetType(attributeTypes[i]);
                xjFieldsEdit.AddField(xjField2);
            }
            xjFeatureClass  = xjFWs.CreateFeatureClass(System.IO.Path.GetFileName(path), xjFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
            fl.FeatureClass = xjFeatureClass;
            return(fl);
        }