Пример #1
0
        //浏览文件夹选择文件gdb
        private void simpleButton1_Click(object sender, EventArgs e)
        {
            string path = "";
            FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();

            folderBrowserDialog.ShowNewFolderButton = false;
            folderBrowserDialog.Description         = "选择.gdb文件数据库";
            if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
            {
                path = folderBrowserDialog.SelectedPath;
                if (path.Substring((path.Length) - 4) != ".gdb")
                {
                    MessageBox.Show("请选择*.gdb文件地理数据库!", "提示");
                    return;
                }
                tbxGDBPath.Text            = path;
                GlobalTopoVaribate.GDBPath = path;
            }
            if (path == "")
            {
                return;
            }
            IWorkspaceFactory pWorkspaceFactory = new FileGDBWorkspaceFactory();
            IWorkspace        pWorkspace        = pWorkspaceFactory.OpenFromFile(path, 0);

            FeatureDSList = getGDBFeatureDS(pWorkspace);
            GlobalTopoVaribate.GFeatureDSList = FeatureDSList;
            cbxFeatureDS.Properties.Items.Clear();
            cbxFeatureDS.Text = "";
            foreach (IFeatureDataset pFeatureDS in FeatureDSList)
            {
                cbxFeatureDS.Properties.Items.Add(pFeatureDS.Name);
            }
        }
        private void CreaWorkSpaceOutput(out IWorkspaceName WorkspaceName, out string pathFGDB)
        {
            IWorkspaceFactory2 workF = new FileGDBWorkspaceFactory() as IWorkspaceFactory2;
            Guid g = Guid.NewGuid();

            string timeStamp = DateTime.UtcNow.ToString("dd-MM-yyyy", CultureInfo.CurrentUICulture);

            string basePath = $@"C:\arcgisserver\directories\arcgisoutput\_ags_{timeStamp}";

            string nomeFGDB = $@"FGDB_{g}.gdb";

            pathFGDB = System.IO.Path.Combine(basePath, nomeFGDB);

            if (!System.IO.Directory.Exists(basePath))
            {
                System.IO.Directory.CreateDirectory(basePath);
            }

            #region Parte dedicata alla creazione di un File Geodatabase
            // Istanzio l'oggetto singleton
            IWorkspaceFactory2 workspaceFactory = new FileGDBWorkspaceFactory() as IWorkspaceFactory2;

            WorkspaceName = workspaceFactory.Create(basePath, nomeFGDB, null, 0);

            #endregion

            #region Rilascio tutti gli oggetti singleton
            int resLeft = 0;
            do
            {
                resLeft = System.Runtime.InteropServices.Marshal.ReleaseComObject(workspaceFactory);
            }while (resLeft > 0);
            #endregion
        }
Пример #3
0
        public static IWorkspace CreateFileGDB(string string_0)
        {
            IWorkspace        workspace = null;
            IWorkspaceFactory fileGDBWorkspaceFactoryClass = new FileGDBWorkspaceFactory();

            try
            {
                IWorkspaceName workspaceName =
                    fileGDBWorkspaceFactoryClass.Create(System.IO.Path.GetDirectoryName(string_0),
                                                        System.IO.Path.GetFileNameWithoutExtension(string_0), null, 0);
                workspace = (workspaceName as IName).Open() as IWorkspace;
            }
            catch (COMException cOMException1)
            {
                COMException cOMException = cOMException1;
                int          errorCode    = cOMException.ErrorCode;
                MessageBox.Show(string.Concat("错误代码:", errorCode.ToString(), "\r\n", cOMException.Message));
            }
            catch (Exception exception)
            {
            }
            ComReleaser.ReleaseCOMObject(fileGDBWorkspaceFactoryClass);
            fileGDBWorkspaceFactoryClass = null;
            return(workspace);
        }
Пример #4
0
        private GdbAccess()
        {
            string            calcGdb          = MilSpaceConfiguration.ConnectionProperty.TemporaryGDBConnection;
            IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactory();

            calcWorkspace = workspaceFactory.OpenFromFile(calcGdb, 0);
        }
Пример #5
0
        public override void OnClick()
        {
            IGxObject firstObject = ((IGxSelection)_context.GxSelection).FirstObject;

            if (firstObject is IGxFile)
            {
                string path = (firstObject as IGxFile).Path;
                path = (path[path.Length - 1] != '\\'
                    ? string.Concat(path, "\\新建文件型数据库")
                    : string.Concat(path, "新建文件型数据库"));
                string str = string.Concat(path, ".gdb");
                int    num = 1;
                while (Directory.Exists(str))
                {
                    num++;
                    str = string.Concat(path, " (", num.ToString(), ").gdb");
                }
                IWorkspaceFactory fileGDBWorkspaceFactoryClass = new FileGDBWorkspaceFactory();
                try
                {
                    IWorkspaceName workspaceName = fileGDBWorkspaceFactoryClass.Create(Path.GetDirectoryName(str),
                                                                                       Path.GetFileNameWithoutExtension(str), null, 0);
                    IGxObject gxDatabase = new GxDatabase();
                    (gxDatabase as IGxDatabase).WorkspaceName = workspaceName;
                    IGxCatalog catalog = GxCatalogCommon.GetCatalog(firstObject);
                    gxDatabase.Attach(firstObject, catalog);
                    catalog.ObjectAdded(gxDatabase);
                }
                catch (Exception exception)
                {
                    MessageBox.Show(exception.Message);
                }
            }
        }
Пример #6
0
        public IWorkspace OpenLoaclGeoDataBase(string path, EnumLoaclGeoDatabaseType type)
        {
            try
            {
                IWorkspaceFactory pTargetWsf = null;
                switch (type)
                {
                case EnumLoaclGeoDatabaseType.MDB:
                    pTargetWsf = new AccessWorkspaceFactory();
                    break;

                case EnumLoaclGeoDatabaseType.GDB:
                    pTargetWsf = new FileGDBWorkspaceFactory();
                    break;

                case EnumLoaclGeoDatabaseType.SHP:
                    pTargetWsf = new ShapefileWorkspaceFactory();
                    break;
                }
                return(pTargetWsf.OpenFromFile(path, 0));
            }
            catch (Exception ex)
            {
                ErrorMessage = ex.Message;
                return(null);
            }
        }
Пример #7
0
        //按下新建文件GDB按钮
        private void button1_Click(object sender, EventArgs e)
        {
            SaveFileDialog saveFileDialog = new SaveFileDialog();

            saveFileDialog.Filter = "文件地理数据库(*.gdb)|*.gdb";
            saveFileDialog.Title  = "新建文件地理数据库";
            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                if (System.IO.File.Exists(saveFileDialog.FileName))
                {
                    MessageBox.Show("文件已存在!");
                    return;
                }
                try
                {
                    int               index             = saveFileDialog.FileName.LastIndexOf("\\");
                    string            GDBName           = saveFileDialog.FileName.Substring(index + 1);
                    string            GDBPath           = saveFileDialog.FileName.Substring(0, index);
                    IWorkspaceFactory pWorkspaceFactory = new FileGDBWorkspaceFactory();
                    pWorkspaceFactory.Create(GDBPath, GDBName, null, 0);
                    MessageBox.Show("创建成功!", "提示");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
Пример #8
0
        // Get the filegeodatabase workspace.
        public IWorkspace GetOutputWorkspace()
        {
            IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactory();
            IWorkspace        workspace        = workspaceFactory.OpenFromFile(_options.OutputGeodatabase + "NextGenRoadLoader.gdb", 0);

            //IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWorkspace;
            return(workspace);
        }
Пример #9
0
        //读取geodatabase数据的方法
        public IFeatureClass OpenGDBFeatureClass(string dbPath, string clsName)
        {
            IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactory();
            IWorkspace        workspace        = workspaceFactory.OpenFromFile(dbPath, 0);
            IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace;
            IFeatureClass     featureClass     = featureWorkspace.OpenFeatureClass(clsName);

            return(featureClass);
        }
Пример #10
0
        private void btn_read_Click(object sender, EventArgs e)
        {
            // Считываю слои из базы и заполняю CheckBoxList
            clb1.Items.Clear();
            IFeatureClass     myFeatureClass   = null;
            IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactory();
            IWorkspace        workspace        = workspaceFactory.OpenFromFile(txtb1.Text, 0);
            IFeatureWorkspace iworkspace       = (IFeatureWorkspace)workspace;
            IEnumDataset      enumDataset      = workspace.get_Datasets(esriDatasetType.esriDTAny);

            enumDataset.Reset();
            List <string> datasets = new List <string>();
            IDataset      dataset  = null;

            while ((dataset = enumDataset.Next()) != null)
            {
                if (dataset.Type == esriDatasetType.esriDTFeatureClass)
                {
                    clb1.Items.Add(dataset.Name);
                }
                if (dataset.Type == esriDatasetType.esriDTFeatureDataset)
                {
                    datasets.Add(dataset.Name);
                }
                //Проходим по датасетам если они есть

                foreach (string el in datasets)
                {
                    string          datasetsroot = txtb1.Text + @"\" + el;
                    IFeatureDataset mydataset    = iworkspace.OpenFeatureDataset(el);
                    IEnumDataset    enumDataset1 = mydataset.Subsets;
                    IDataset        dataset1     = null;
                    while ((dataset1 = enumDataset1.Next()) != null)
                    {
                        clb1.Items.Add(dataset1.Name);
                    }
                }
            }
            // Считываю все поля из всех слоев
            clb2.Items.Clear();
            List <string> bn = new List <string>();

            foreach (object item in clb1.Items)
            {
                myFeatureClass = iworkspace.OpenFeatureClass(item.ToString());
                for (int j = 0; j < myFeatureClass.Fields.FieldCount; j++)
                {
                    bn.Add(myFeatureClass.Fields.get_Field(j).Name);
                }
            }
            string[] bnn = bn.Distinct().ToArray();

            foreach (string f in bnn)
            {
                clb2.Items.Add(f);
            }
        }
Пример #11
0
        public static IWorkspace OpenWorkspace(IPropertySet ipropertySet_0)
        {
            IWorkspace        workspace = null;
            IWorkspaceFactory factory;
            Exception         exception;

            if (ipropertySet_0.Count == 1)
            {
                object obj2;
                object obj3;
                string str2 = "";
                ipropertySet_0.GetAllProperties(out obj2, out obj3);
                if (((string[])obj2)[0] == "DATABASE")
                {
                    str2 = System.IO.Path.GetExtension(((object[])obj3)[0].ToString()).ToLower();
                }
                if (str2 == ".mdb")
                {
                    factory = new AccessWorkspaceFactory();
                    try
                    {
                        workspace = factory.Open(ipropertySet_0, 0);
                    }
                    catch (Exception exception1)
                    {
                        exception = exception1;
                        MessageBox.Show(exception.Message);
                    }
                    return(workspace);
                }
                if (str2 == ".gdb")
                {
                    factory = new FileGDBWorkspaceFactory();
                    try
                    {
                        workspace = factory.Open(ipropertySet_0, 0);
                    }
                    catch (Exception exception2)
                    {
                        exception = exception2;
                        MessageBox.Show(exception.Message);
                    }
                }
                return(workspace);
            }
            factory = new SdeWorkspaceFactory();
            try
            {
                workspace = factory.Open(ipropertySet_0, 0);
            }
            catch (Exception exception3)
            {
                exception = exception3;
                MessageBox.Show(exception.Message);
            }
            return(workspace);
        }
Пример #12
0
        public static IWorkspace OpenWorkspace(IPropertySet ipropertySet_0)
        {
            object            obj;
            object            obj1;
            IWorkspaceFactory sdeWorkspaceFactoryClass;
            IWorkspace        workspace = null;

            if (ipropertySet_0.Count != 1)
            {
                sdeWorkspaceFactoryClass = new SdeWorkspaceFactory();
                try
                {
                    workspace = sdeWorkspaceFactoryClass.Open(ipropertySet_0, 0);
                }
                catch (Exception exception)
                {
                    MessageBox.Show(exception.Message);
                }
            }
            else
            {
                string str   = "";
                string lower = "";
                ipropertySet_0.GetAllProperties(out obj, out obj1);
                if (((string[])obj)[0] == "DATABASE")
                {
                    str   = ((object[])obj1)[0].ToString();
                    lower = System.IO.Path.GetExtension(str).ToLower();
                }
                if (lower == ".mdb")
                {
                    sdeWorkspaceFactoryClass = new AccessWorkspaceFactory();
                    try
                    {
                        workspace = sdeWorkspaceFactoryClass.Open(ipropertySet_0, 0);
                    }
                    catch (Exception exception1)
                    {
                        MessageBox.Show(exception1.Message);
                    }
                }
                else if (lower == ".gdb")
                {
                    sdeWorkspaceFactoryClass = new FileGDBWorkspaceFactory();
                    try
                    {
                        workspace = sdeWorkspaceFactoryClass.Open(ipropertySet_0, 0);
                    }
                    catch (Exception exception2)
                    {
                        MessageBox.Show(exception2.Message);
                    }
                }
            }
            return(workspace);
        }
Пример #13
0
        public static ITable open_table(string ws, string name)
        {
            IWorkspaceFactory GdbWsF = new FileGDBWorkspaceFactory();
            IWorkspace        GdbWs  = GdbWsF.OpenFromFile(ws, 0);
            // open fcs
            IFeatureWorkspace FeatWs = GdbWs as IFeatureWorkspace;
            ITable            table  = FeatWs.OpenTable(name);

            return(table);
        }
Пример #14
0
        public static IFeatureClass open_fc(string ws, string name)
        {
            IWorkspaceFactory GdbWsF = new FileGDBWorkspaceFactory();
            IWorkspace        GdbWs  = GdbWsF.OpenFromFile(ws, 0);
            // open fcs
            IFeatureWorkspace FeatWs = GdbWs as IFeatureWorkspace;
            IFeatureClass     fc     = FeatWs.OpenFeatureClass(name);

            return(fc);
        }
        /// <summary>
        /// Creates the output featureclass, either fgdb featureclass or a shapefile
        /// </summary>
        /// <param name="outputPath">location of featureclass</param>
        /// <param name="saveAsType">Type of output selected, either fgdb featureclass or shapefile</param>
        /// <param name="graphicsList">List of graphics for selected tab</param>
        /// <param name="ipSpatialRef">Spatial Reference being used</param>
        /// <returns>Output featureclass</returns>
        public IFeatureClass CreateFCOutput(string outputPath, SaveAsType saveAsType, List <Graphic> graphicsList, ISpatialReference ipSpatialRef)
        {
            string        fcName     = System.IO.Path.GetFileName(outputPath);
            string        folderName = System.IO.Path.GetDirectoryName(outputPath);
            IFeatureClass fc         = null;

            try
            {
                bool isGraphicLineOrRangeRing = graphicsList[0].GraphicType == GraphicTypes.Line || graphicsList[0].GraphicType == GraphicTypes.RangeRing;
                if (saveAsType == SaveAsType.FileGDB)
                {
                    IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactory();
                    IWorkspace        workspace        = workspaceFactory.OpenFromFile(folderName, 0);
                    IFeatureWorkspace fWorkspace       = (IFeatureWorkspace)workspace;

                    if (DoesFeatureClassExist(folderName, fcName))
                    {
                        DeleteFeatureClass(fWorkspace, fcName);
                    }

                    fc = CreateFeatureClass(fWorkspace, fcName, isGraphicLineOrRangeRing);

                    foreach (Graphic graphic in graphicsList)
                    {
                        IFeature feature = fc.CreateFeature();

                        if (graphic.GraphicType != GraphicTypes.Line && graphic.GraphicType != GraphicTypes.RangeRing)
                        {
                            feature.Shape = PolylineToPolygon(graphic.Geometry);
                        }
                        else
                        {
                            feature.Shape = graphic.Geometry;
                        }

                        feature.Store();
                    }
                }
                else if (saveAsType == SaveAsType.Shapefile)
                {
                    // already asked them for confirmation to overwrite file
                    if (File.Exists(outputPath))
                    {
                        DeleteShapeFile(outputPath);
                    }

                    fc = ExportToShapefile(outputPath, graphicsList, ipSpatialRef, isGraphicLineOrRangeRing);
                }
                return(fc);
            }
            catch (Exception ex)
            {
                return(fc);
            }
        }
Пример #16
0
 private void AddGDB()
 {
     FileGDBWorkspaceFactory pWSF = new FileGDBWorkspaceFactory();
     IFeatureWorkspace pWS1 = pWSF.OpenFromFile("C:\\temp\\gdb.gdb", 0) as IFeatureWorkspace;
     IFeatureClass featureclass = pWS1.OpenFeatureClass("layer");
     IFeatureLayer pFLRoads = new FeatureLayer();
     pFLRoads.FeatureClass = featureclass;
     pFLRoads.Name = "点";
     ILayer pLayerRoads = pFLRoads as ILayer;
     Global.mainmap.AddLayer(pLayerRoads);
 }
Пример #17
0
        //创建GDB
        public IWorkspace CreateGDB(string gdbPath, string gdbName)
        {
            IPropertySet ps = new PropertySetClass();

            ps.SetProperty("DATABASE", gdbPath);
            IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactory();
            IWorkspaceName    newWorkspacename = workspaceFactory.Create(gdbPath, gdbName, ps, 0);
            IName             name             = (IName)newWorkspacename;
            IWorkspace        newWorkspace     = (IWorkspace)name.Open();

            return(newWorkspace);
        }
Пример #18
0
        private GdbAccess()
        {
            string            calcGdb          = MilSpaceConfiguration.ConnectionProperty.TemporaryGDBConnection;
            IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactory();

            logger.InfoEx($"Opening access to {calcGdb}.");
            calcWorkspace = workspaceFactory.OpenFromFile(calcGdb, 0);
            if (calcWorkspace == null)
            {
                logger.ErrorEx($"Cannot access to {calcGdb}.");
            }
        }
Пример #19
0
        private void btnQuery_Click(object sender, EventArgs e)
        {
            string year  = cbxYear.SelectedItem.ToString();
            string month = cbxMonth.SelectedItem.ToString();

            IWorkspaceFactory pFileGDBWorkspaceFactory;

            pFileGDBWorkspaceFactory = new FileGDBWorkspaceFactory();
            IWorkspace   pWorkspace   = pFileGDBWorkspaceFactory.OpenFromFile(rasterPath, 0);
            IEnumDataset pEnumDataset = pWorkspace.get_Datasets(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTAny);

            pEnumDataset.Reset();
            IDataset  pDataset        = pEnumDataset.Next();
            DataTable SpatialRefTable = new DataTable();

            SpatialRefTable.Columns.Add(new DataColumn("影像名称", typeof(string)));
            SpatialRefTable.Columns.Add(new DataColumn("影像拍摄时间", typeof(string)));

            //判断数据集是否有数据
            while (pDataset != null)
            {
                if (pDataset is IRasterDataset) //栅格数据集
                {
                    IRasterWorkspaceEx pRasterWorkspace = (IRasterWorkspaceEx)pWorkspace;
                    IRasterDataset     pRasterDataset   = pRasterWorkspace.OpenRasterDataset(pDataset.Name);
                    //影像金字塔判断与创建
                    ISpatialReference pSpatialRef = (pRasterDataset as IGeoDataset).SpatialReference;
                    string            spatialref  = pSpatialRef.Name.ToString();
                    string            rastername  = pDataset.Name.ToString();
                    string[]          strArray    = rastername.Split('_');

                    DataRow dr = SpatialRefTable.NewRow();
                    dr["影像名称"]   = pDataset.Name.ToString();
                    dr["影像拍摄时间"] = strArray[1].Substring(0, 8);
                    IRasterLayer pRasterLayer = new RasterLayer();
                    pRasterLayer.CreateFromDataset(pRasterDataset);
                    if (strArray[1].Substring(0, 6) == year + month)
                    {
                        SpatialRefTable.Rows.Add(dr);
                    }
                }
                pDataset = pEnumDataset.Next();
            }
            // ExportExcel(SpatialRefTable);
            //弹出显示框
            FormQueryShowResult timeQuery = new FormQueryShowResult();

            timeQuery.Text = "时间查询";
            timeQuery.dgvQueryResult.DataSource       = SpatialRefTable;
            timeQuery.dgvQueryResult.Columns[1].Width = 200;
            timeQuery.Show();
        }
Пример #20
0
        public static IFeatureClass GetFeatureClass(string GDBpath, string FCname)
        {
            //创建最后所需的点图层
            IFeatureClass feaclass = null;

            //创建工作空间
            FileGDBWorkspaceFactory fileGDBWorkspaceFactory = new FileGDBWorkspaceFactory();
            IWorkspace        workspace        = fileGDBWorkspaceFactory.OpenFromFile(GDBpath, 0);
            IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;

            feaclass = featureWorkspace.OpenFeatureClass(FCname);

            return(feaclass);
        }
        /// <summary>
        /// Retrieves all datasets names from filegdb
        /// </summary>
        /// <param name="gdbFilePath">Path to filegdb</param>
        /// <returns>List of names of all featureclasses in filegdb</returns>
        private List <string> GetAllDatasetNames(string gdbFilePath)
        {
            IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactory();
            IWorkspace        workspace        = workspaceFactory.OpenFromFile(gdbFilePath, 0);
            IEnumDataset      enumDataset      = workspace.get_Datasets(esriDatasetType.esriDTAny);
            List <string>     names            = new List <string>();
            IDataset          dataset          = null;

            while ((dataset = enumDataset.Next()) != null)
            {
                names.Add(dataset.Name);
            }
            return(names);
        }
Пример #22
0
        protected override void OnClick()
        {
            IWorkspaceFactory pWorkspaceFactory = new FileGDBWorkspaceFactory();

            IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(@"D:\Applications\ArcObjects\TestButton\GeoDP\GeoDB.gdb", ArcMap.Application.hWnd);

            IWorkspaceDomains pWorkspaceDomains = pWorkspace as IWorkspaceDomains;
            ICodedValueDomain pDomain           = pWorkspaceDomains.DomainByName["Resturants"] as ICodedValueDomain;

            for (int i = 0; i < pDomain.CodeCount; i++)
            {
                MessageBox.Show("Code: " + pDomain.Value[i] + Environment.NewLine + "Description: " + pDomain.Name[i]);
            }
        }
Пример #23
0
        /// <summary>
        /// Creates an fgdb in the given path.
        /// </summary>
        /// <param name="fgdbPath"></param>
        public static void CreateFgdbWorkspace(string fgdbPath)
        {
            if (string.IsNullOrWhiteSpace(fgdbPath))
            {
                return;
            }

            var    parentDir = Directory.GetParent(fgdbPath).FullName;
            string fgdbName  = Path.GetFileName(fgdbPath);

            IWorkspaceFactory scratchWorkspaceFactory = new FileGDBWorkspaceFactory();
            IWorkspaceName    workspaceName           = scratchWorkspaceFactory.Create(parentDir, fgdbName, null, 0);

            Marshal.FinalReleaseComObject(workspaceName);
        }
Пример #24
0
        public static List <string> list_fcs_in_gdb(string ws)
        {
            List <string>     fc_names = new List <string>();
            IWorkspaceFactory GdbWsF   = new FileGDBWorkspaceFactory();
            IWorkspace        GdbWs    = GdbWsF.OpenFromFile(ws, 0);
            IEnumDatasetName  ds_names = GdbWs.get_DatasetNames(esriDatasetType.esriDTFeatureClass);
            IDatasetName      ds_name  = ds_names.Next();

            while (ds_name != null)
            {
                fc_names.Add(ds_name.Name);
                ds_name = ds_names.Next();
            }
            return(fc_names);
        }
Пример #25
0
        public static IWorkspace connectSde(string path)
        {
            try
            {
                //定义工作空间,工作空间的数据源来自SDE,IWorkspaceFactory是Geodatabase的入口
                //Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");
                //IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);

                IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactory();

                ////通过IPropertySet设置通过SDE连接数据库的各种参数
                //IPropertySet propertySet = new PropertySetClass();
                //propertySet.SetProperty("SERVER", "10.64.192.51");
                //propertySet.SetProperty("SERVICE", "esri_sde");
                //propertySet.SetProperty("INSTANCE", "sde:sqlserver:10.64.192.51");
                ////propertySet.SetProperty("Instance", "port:5151");
                //propertySet.SetProperty("DATABASE", "GasEarlyWarningGIS");
                //propertySet.SetProperty("USER", "sde");
                //propertySet.SetProperty("PASSWORD", "sde");
                //propertySet.SetProperty("VERSION", "sde.DEFAULT");

                ////通过以上设置的参数将数据库的数据通过SDE读入工作空间
                IWorkspace workspace = workspaceFactory.OpenFromFile(path, 0);
                //IWorkspace workspace = null;

                //ILayer pLayer = DataEditCommon.GetLayerByName(DataEditCommon.g_pMap,"点");

                //IFeatureLayer pFeatureLayer = (IFeatureLayer)pLayer;

                //IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
                //IDataset pDataset = (IDataset)pFeatureClass;
                //workspace = pDataset.Workspace;
                //IWorkspaceFactory workspaceFactory = new SdeWorkspaceFactoryClass();
                //workspace = workspaceFactory.Open(ConnectSDE(true), 0);
                return(workspace);



                //return GetSDEWorkspace();
            }
            catch (Exception ex)
            {
                MessageBox.Show("数据库连接失败!" + ex.Message);
            }

            return(null);
        }
Пример #26
0
        public IWorkspace get_FWorkSp()
        {
            IWorkspaceFactory pWorkSpaceFactory = new FileGDBWorkspaceFactory();
            string            tempFP            = openFGDB();

            if (tempFP != null)
            {
                IWorkspace pWorkSpace = pWorkSpaceFactory.OpenFromFile(tempFP, 0);
                //IEnumDataset pEDataset =pWorkSpace. get_Datasets(esriDatasetType.esriDTAny);
                //IDataset pDataset = pEDataset.Next();
                return(pWorkSpace);
            }
            else
            {
                return(null);
            }
        }
Пример #27
0
        private void barButtonItem6_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            FolderBrowserDialog openDLG = new FolderBrowserDialog();                                                 //创建文件夹浏览对话框

            if (openDLG.ShowDialog() == DialogResult.OK)                                                             //打开对话框,选择文件夹后,若点击ok按钮
            {
                string sFilePath = openDLG.SelectedPath;                                                             //获得选择的文件夹

                IWorkspaceFactory pWorkspaceFectory = new FileGDBWorkspaceFactory();                                 // 创建能够打开文件型数据库的工作空间工厂对象
                IWorkspace        pWorkspace        = pWorkspaceFectory.OpenFromFile(sFilePath, 0);                  //打开对应的文件夹,返回工作空间对象
                IEnumDataset      pEnumDataset      = pWorkspace.get_Datasets(esriDatasetType.esriDTFeatureDataset); //获取文件数据库中的所有矢量特征数据集集合

                pEnumDataset.Reset();                                                                                //指向矢量特征数据集集合头部
                IDataset pDataset = pEnumDataset.Next();                                                             //获取第一个矢量特征数据集
                while (pDataset != null)                                                                             //若矢量特征数据集非空
                {
                    if (pDataset is IFeatureDataset)                                                                 // 当前矢量特征数据集是否为FeatureDataset
                    {
                        IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;                       //接口转换为IFeatureWorkspace
                        IFeatureDataset   pFeatureDaset     = pFeatureWorkspace.OpenFeatureDataset(pDataset.Name);   //打开当前矢量特征数据集
                        IEnumDataset      pSubEnumdataset   = pFeatureDaset.Subsets;                                 //获取其子数据集
                        pSubEnumdataset.Reset();                                                                     //指向子数据集头部
                        IDataset pSubDataset = pSubEnumdataset.Next();                                               //获取子数据集的第一个数据集
                        while (pSubDataset != null && pSubDataset is IFeatureClass)                                  //当新获取的这个新数据集是FeatureClass
                        {
                            IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(pSubDataset.Name);      // 打开该IFeatureClass
                            IFeatureLayer pLayer        = new FeatureLayer();                                        //创建一个矢量特征层
                            pLayer.FeatureClass = pFeatureClass;                                                     //给该层数据源赋值
                            axMapControl1.Map.AddLayer(pLayer as ILayer);                                            //添加到地图控件中
                            pSubDataset = pSubEnumdataset.Next();                                                    //获取下一个新的子数据集
                        }
                    }
                    else if (pDataset is IFeatureClass)                                                          //当前矢量特征数据集是否为FeatureClass
                    {
                        IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;                   //接口转换为IFeatureWorkspace
                        IFeatureClass     pFeatureClass     = pFeatureWorkspace.OpenFeatureClass(pDataset.Name); // 打开该IFeatureClass
                        IFeatureLayer     pLayer            = new FeatureLayer();                                //创建一个矢量特征层
                        pLayer.FeatureClass = pFeatureClass;                                                     //给该层数据源赋值
                        axMapControl1.Map.AddLayer(pLayer as ILayer);                                            //添加到地图控件中
                    }
                    pDataset = pEnumDataset.Next();                                                              //获取下一个数据集
                }
                axMapControl1.ActiveView.Refresh();                                                              //地图刷新
            }
            //添加GDB
        }
Пример #28
0
        public static IWorkspace connectSde(string path)
        {
            try
            {
                //定义工作空间,工作空间的数据源来自SDE,IWorkspaceFactory是Geodatabase的入口
                //Type factoryType = Type.GetTypeFromProgID("esriDataSourcesGDB.SdeWorkspaceFactory");
                //IWorkspaceFactory workspaceFactory = (IWorkspaceFactory)Activator.CreateInstance(factoryType);

                IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactory();

                ////通过IPropertySet设置通过SDE连接数据库的各种参数
                //IPropertySet propertySet = new PropertySetClass();
                //propertySet.SetProperty("SERVER", "10.64.192.51");
                //propertySet.SetProperty("SERVICE", "esri_sde");
                //propertySet.SetProperty("INSTANCE", "sde:sqlserver:10.64.192.51");
                ////propertySet.SetProperty("Instance", "port:5151");
                //propertySet.SetProperty("DATABASE", "GasEarlyWarningGIS");
                //propertySet.SetProperty("USER", "sde");
                //propertySet.SetProperty("PASSWORD", "sde");
                //propertySet.SetProperty("VERSION", "sde.DEFAULT");

                ////通过以上设置的参数将数据库的数据通过SDE读入工作空间
                IWorkspace workspace = workspaceFactory.OpenFromFile(path, 0);
                //IWorkspace workspace = null;

                //ILayer pLayer = DataEditCommon.GetLayerByName(DataEditCommon.g_pMap,"点");

                //IFeatureLayer pFeatureLayer = (IFeatureLayer)pLayer;

                //IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
                //IDataset pDataset = (IDataset)pFeatureClass;
                //workspace = pDataset.Workspace;
                //IWorkspaceFactory workspaceFactory = new SdeWorkspaceFactoryClass();
                //workspace = workspaceFactory.Open(ConnectSDE(true), 0);
                return workspace;

                //return GetSDEWorkspace();
            }
            catch (Exception ex)
            {
                MessageBox.Show("数据库连接失败!" + ex.Message);
            }

            return null;
        }
Пример #29
0
        public IWorkspace CreateOrOpenLoaclGeoDataBase(string path, EnumLoaclGeoDatabaseType type)
        {
            try
            {
                IWorkspaceFactory pTargetWsf = null;
                switch (type)
                {
                case EnumLoaclGeoDatabaseType.MDB:
                    pTargetWsf = new AccessWorkspaceFactory();
                    break;

                case EnumLoaclGeoDatabaseType.GDB:
                    pTargetWsf = new FileGDBWorkspaceFactory();
                    break;

                case EnumLoaclGeoDatabaseType.SHP:
                    pTargetWsf = new ShapefileWorkspaceFactory();
                    break;
                }
                if (System.IO.Directory.Exists(path) || System.IO.File.Exists(path))
                {
                    if (pTargetWsf.IsWorkspace(path))
                    {
                        return(pTargetWsf.OpenFromFile(path, 0));
                    }
                    else
                    {
                        ErrorMessage = "当前工作空间已经损坏";
                        return(null);
                    }
                }
                else
                {
                    string         sPath          = System.IO.Path.GetDirectoryName(path);
                    string         sName          = System.IO.Path.GetFileNameWithoutExtension(path);
                    IWorkspaceName pWorkspaceName = pTargetWsf.Create(sPath, sName, null, 0);
                    return(pTargetWsf.Open(pWorkspaceName.ConnectionProperties, 0));
                }
            }
            catch (Exception ex)
            {
                ErrorMessage = ex.Message;
                return(null);
            }
        }
Пример #30
0
        private static string GetDefaultWorkspace()
        {
            string documents     = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            string tempDir       = System.IO.Path.Combine(documents, "temp");
            string workspacePath = System.IO.Path.Combine(tempDir, "Scratch.gdb");

            IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactory();

            if (!workspaceFactory.IsWorkspace(workspacePath))
            {
                IWorkspaceName defaultWorkspaceName = workspaceFactory.Create(tempDir, "Scratch", null, 0);
                return(defaultWorkspaceName.PathName);
            }
            else
            {
                return(workspacePath);
            }
        }
Пример #31
0
        protected override void OnClick()
        {
            //
            //  TODO: Sample code showing how to access button host
            //
            IWorkspaceFactory pWorkspaceFactory = new FileGDBWorkspaceFactory();
            IWorkspace        pWorkspace        = pWorkspaceFactory.OpenFromFile(@"C:\IGeometry\IGeometryGDB\IGeometry.gdb", ArcMap.Application.hWnd);

            IWorkspaceDomains pWorkspaceDomains = pWorkspace as IWorkspaceDomains;
            ICodedValueDomain pDomain           = pWorkspaceDomains.DomainByName["RestaurantTypes"] as ICodedValueDomain;

            for (int i = 0; i < pDomain.CodeCount; i++)
            {
                MessageBox.Show("Code: " + pDomain.Value[i] + Environment.NewLine + "Description: " + pDomain.Name[i]);
            }

            ArcMap.Application.CurrentTool = null;
        }
Пример #32
0
        //选择数据集路径
        private void button1_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();

            folderBrowserDialog.Description         = "选择文件GDB";
            folderBrowserDialog.ShowNewFolderButton = false;
            if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
            {
                if (folderBrowserDialog.SelectedPath.Substring(folderBrowserDialog.SelectedPath.LastIndexOf(".")) != ".gdb")
                {
                    MessageBox.Show("请选择正确的地理数据库");
                    return;
                }
                IWorkspaceFactory pWorkspaceFactory = new FileGDBWorkspaceFactory();
                pWorkspace    = pWorkspaceFactory.OpenFromFile(folderBrowserDialog.SelectedPath, 0);
                textBox1.Text = folderBrowserDialog.SelectedPath;
            }
        }
Пример #33
0
 private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
 {
     double xpoint = e.mapX;
     double ypoint = e.mapY;
     IPoint point = new PointClass();
     point.PutCoords(xpoint, ypoint);
     IWorkspaceFactory wsf = new FileGDBWorkspaceFactory();
     IFeatureWorkspace ws = wsf.OpenFromFile(@"\\alexn\TestGDB\Feature.gdb", 0) as IFeatureWorkspace;
     IGeoDataset pointfc = ws.OpenFeatureClass(@"Points") as IGeoDataset;
     point.SpatialReference = pointfc.SpatialReference;
     //IGeometry point2 = point as IGeometry;
     IFeatureClass pointfc2 = pointfc as IFeatureClass;
     IFeature pointfc3 = pointfc2.CreateFeature();
     IFeatureCursor pointFC = pointfc2.Insert(true);
     IFeatureBuffer fbuffer = pointfc2.CreateFeatureBuffer();
     fbuffer.Shape = point;
     pointFC.InsertFeature(fbuffer);
     IActiveView display = axMapControl1.ActiveView;
     display.Activate(0);
     display.Refresh();
 }
Пример #34
0
        /// <summary>
        /// 创建镶嵌数据集
        /// </summary>
        /// <param name="pFGDBPath"></param>
        /// <param name="pMDame"></param>
        /// <param name="pSrs"></param>
        /// <returns></returns>
        IMosaicDataset CreateMosaicDataset(string pFGDBPath, string pMDame, ISpatialReference pSrs )
        {
            IWorkspaceFactory pWorkspaceFactory = new FileGDBWorkspaceFactory();

                  IWorkspace pFgdbWorkspace = pWorkspaceFactory.OpenFromFile(pFGDBPath, 0);

                  ICreateMosaicDatasetParameters pCreationPars = new CreateMosaicDatasetParametersClass();

                  pCreationPars.BandCount = 3;

                  pCreationPars.PixelType = rstPixelType.PT_UCHAR;

                  IMosaicWorkspaceExtensionHelper pMosaicExentionHelper = new  MosaicWorkspaceExtensionHelperClass();

                  IMosaicWorkspaceExtension pMosaicExtention = pMosaicExentionHelper.FindExtension(pFgdbWorkspace);

                  return pMosaicExtention.CreateMosaicDataset(pMDame, pSrs, pCreationPars, "");
        }
Пример #35
0
 private IFeatureClass OpenFeatureClass(string filePath, string fcName)
 {
     var gdbWorkspaceFactory = new FileGDBWorkspaceFactory();
     var featureWorkspace = (IFeatureWorkspace)gdbWorkspaceFactory.OpenFromFile(_fgdb, 0);
     return featureWorkspace.OpenFeatureClass(fcName);
 }
 /// <summary>
 /// Retrieves all datasets names from filegdb
 /// </summary>
 /// <param name="gdbFilePath">Path to filegdb</param>
 /// <returns>List of names of all featureclasses in filegdb</returns>
 private List<string> GetAllDatasetNames(string gdbFilePath)
 {
     IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactory();
     IWorkspace workspace = workspaceFactory.OpenFromFile (gdbFilePath, 0);
     IEnumDataset enumDataset = workspace.get_Datasets(esriDatasetType.esriDTAny);
     List<string> names = new List<string>();
     IDataset dataset = null;
     while((dataset = enumDataset.Next())!= null)
     {
         names.Add(dataset.Name);
     }
     return names;
 }
        /// <summary>
        /// Creates the output featureclass, either fgdb featureclass or a shapefile
        /// </summary>
        /// <param name="outputPath">location of featureclass</param>
        /// <param name="saveAsType">Type of output selected, either fgdb featureclass or shapefile</param>
        /// <param name="graphicsList">List of graphics for selected tab</param>
        /// <param name="ipSpatialRef">Spatial Reference being used</param>
        /// <returns>Output featureclass</returns>
        public IFeatureClass CreateFCOutput(string outputPath, SaveAsType saveAsType, List<Graphic> graphicsList, ISpatialReference ipSpatialRef)
        {
            string fcName = System.IO.Path.GetFileName(outputPath);
            string folderName = System.IO.Path.GetDirectoryName(outputPath);
            IFeatureClass fc = null;

            try
            {
                if (saveAsType == SaveAsType.FileGDB)
                {
                    IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactory();
                    IWorkspace workspace = workspaceFactory.OpenFromFile(folderName, 0);
                    IFeatureWorkspace fWorkspace = (IFeatureWorkspace)workspace;

                    if (DoesFeatureClassExist(folderName, fcName))
                    {
                        DeleteFeatureClass(fWorkspace, fcName);
                    }

                    fc = CreatePolylineFeatureClass(fWorkspace, fcName);

                    foreach (Graphic graphic in graphicsList)
                    {
                        IFeature feature = fc.CreateFeature();

                        feature.Shape = graphic.Geometry;
                        feature.Store();
                    }

                }
                else if (saveAsType == SaveAsType.Shapefile)
                {
                    // already asked them for confirmation to overwrite file
                    if (File.Exists(outputPath))
                    {
                        DeleteShapeFile(outputPath);
                    }            

                    fc = ExportToShapefile(outputPath, graphicsList, ipSpatialRef);
                }
                return fc;
            }
            catch (Exception ex)
            {
                return fc;
            }
        }