ArcGIS AddIN开发:如何调用ArcMap中的选择工作空间的窗体

本文介绍了一个用于ArcGIS的应用程序示例,该程序通过一个对话框让用户选择工作空间,如数据库工作空间、文件工作空间或数据集工作空间,并返回所选工作空间的名称。

示例代码如下:

 public static IWorkspaceName BrowseWorkspace(int hwnd,out IWorkspace ws)
        {
            IGxObjectFilterCollection ipFilters = new GxDialogClass();
            //IGxObjectFilter ipFilter1 = new GxFilterFeatureDatasetsClass();  //要素数据集 ,导出时,IFeatureClassConverter对象无法写入Dataset中,此处隐藏掉
            //ipFilters.AddFilter(ipFilter1,false);
            IGxObjectFilter ifilt2 = new GxFilterWorkspacesClass();  //数据库工作空间,此类比较含糊,不知道具体指啥
            ipFilters.AddFilter(ifilt2,false);
            IGxObjectFilter ipFilter3 = new GxFilterFileFolderClass();  //文件工作空间
            ipFilters.AddFilter(ipFilter3,false);


            IGxDialog pGDialog = (IGxDialog)ipFilters;
            pGDialog.RememberLocation = true;
            pGDialog.Title = "请选择工作空间";
            pGDialog.AllowMultiSelect = false;

            IEnumGxObject pResultEnum = null;
            //IWorkspace ws = null;
            ws = null;
            IWorkspaceName wsn = null;
            if (pGDialog.DoModalOpen(hwnd, out pResultEnum) && pResultEnum != null)
            {
                IGxObject gxObj = pResultEnum.Next();
                if (gxObj is IGxDatabase)
                {
                    IGxDatabase gxDB = gxObj as IGxDatabase;
                    if (gxDB != null)
                    {
                        ws = gxDB.Workspace;
                        wsn = gxDB.WorkspaceName;
                    }  
                }
                else if (gxObj is IGxFolder)
                {
                    //Todo: figure out how to decide which workspace to get for
                    // a particular folder (shapefile, raster etc.)                    
                    //IEnumName enumName = ((IGxFolder)gxObj).FileSystemWorkspaceNames;

                    // for now just assume we want a shapefile ...
                    IWorkspaceFactory wsf = new ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass();
                    ws = wsf.OpenFromFile(((IGxFile)gxObj).Path, hwnd);
                    IDataset pOutDataset = ws as IDataset;
                    wsn = pOutDataset.FullName as IWorkspaceName;
                }
                else if (gxObj is IGxDataset)
                {
                    //如果是数据集工作空间
                    IGxDataset gxDs = gxObj as IGxDataset;
                    if (gxDs != null)
                    {
                        ws = gxDs.Dataset.Workspace;
                        wsn = gxDs.DatasetName.WorkspaceName;
                    }
                        
                }
                Marshal.FinalReleaseComObject(pResultEnum);
            }

            pGDialog.InternalCatalog.Close();
            Marshal.FinalReleaseComObject(pGDialog);
            
            return wsn;
        }

 

上述代码可以拓展为:调用ArcMap的添加图层窗口等

转载于:https://www.cnblogs.com/DayDreamEveryWhere/p/5936237.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值