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


    示例代码如下:

     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的添加图层窗口等

  • 相关阅读:
    sqoop导入数据到mysql原理_sqoop的详细使用及原理
    Attempt to do update or delete using transaction manager that does not support these operations
    impala安装
    stm32单片机时钟中断的配置
    jtag引脚
    关于芯片封装类型
    Altium Designer绘制mark点
    Altium Designer如何移动选中的所有对象
    Altium Designer敷铜的规则设定
    关于Altium Designer重新修改某一原件pcb封装的问题
  • 原文地址:https://www.cnblogs.com/DayDreamEveryWhere/p/5936237.html
Copyright © 2020-2023  润新知