zoukankan      html  css  js  c++  java
  • 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的添加图层窗口等

  • 相关阅读:
    网页中输出漂亮格式的Php数组神器
    从对轮播图的封装中体会 面对接口 编程的思想
    UITabBarController 详解
    UINavigationController 详解
    UITabBarController 和 UINavigationController 的详解
    【iOS开发】canOpenURL: failed for URL
    SDK里报错[NSConcreteMutableData wbsdk_base64EncodedString]
    UIScrollView 几乎所有的属性和方法
    oracle服务器和客户端字符集的查看和修改
    查看、修改oracle字符集,查看oracle版本
  • 原文地址:https://www.cnblogs.com/DayDreamEveryWhere/p/5936237.html
Copyright © 2011-2022 走看看