Beispiel #1
0
        internal static ESRI.ArcGIS.Geodatabase.IWorkspace CreateInMemoryWorkspace(string workspacename)
        {
            // Create an in-memory workspace factory.
            Type factoryType = Type.GetTypeFromProgID(
                "esriDataSourcesGDB.InMemoryWorkspaceFactory");

            ESRI.ArcGIS.Geodatabase.IWorkspaceFactory workspaceFactory = (ESRI.ArcGIS.Geodatabase.IWorkspaceFactory)
                                                                         Activator.CreateInstance(factoryType);


            // Create an in-memory workspace.
            ESRI.ArcGIS.Geodatabase.IWorkspaceName workspaceName = workspaceFactory.Create("", workspacename,
                                                                                           null, 0);

            // Cast for IName and open a reference to the in-memory workspace through the name object.
            ESRI.ArcGIS.esriSystem.IName name = (ESRI.ArcGIS.esriSystem.IName)workspaceName;

            ESRI.ArcGIS.Geodatabase.IWorkspace workspace = (ESRI.ArcGIS.Geodatabase.IWorkspace)name.Open();
            return(workspace);
        }
 /// <summary>
 /// 重置mxd文档的数据源
 /// </summary>
 /// <param name="pMapDoc"></param>
 /// <param name="pWs"></param>
 public static void ChangeMxdDataSource(ESRI.ArcGIS.Carto.IMapDocument pMapDoc, ESRI.ArcGIS.Geodatabase.IWorkspace pWs)
 {
     ESRI.ArcGIS.Geodatabase.IWorkspaceName pWsName  = GetWorkspaceName(pWs);
     ESRI.ArcGIS.Carto.IMap               pMap       = pMapDoc.ActiveView.FocusMap;
     ESRI.ArcGIS.Carto.ILayer             pLayer     = null;
     ESRI.ArcGIS.Carto.IDataLayer         pDataLayer = null;
     ESRI.ArcGIS.Geodatabase.IDatasetName pDataName  = null;
     for (int i = 0; i < pMap.LayerCount; i++)
     {
         pLayer = pMap.get_Layer(i);
         if (pLayer.Valid == false)
         {
             if (pLayer is ESRI.ArcGIS.Carto.IDataLayer)
             {
                 pDataLayer = pLayer as ESRI.ArcGIS.Carto.IDataLayer;
                 try
                 {
                     pDataName = pDataLayer.DataSourceName as ESRI.ArcGIS.Geodatabase.IDatasetName;
                     //获取DatasetName,必须是要替换的工作空间下的
                     ESRI.ArcGIS.Geodatabase.IDatasetName pDsName = GetDatasetName(pWs, pDataName.Name);
                     if (pDsName == null)
                     {
                         continue;
                     }
                     pDataName = pDataLayer.DataSourceName as ESRI.ArcGIS.Geodatabase.IDatasetName;
                     pDataName.WorkspaceName = pWsName;
                     pDataLayer.Connect(pDsName as ESRI.ArcGIS.esriSystem.IName);
                     System.Runtime.InteropServices.Marshal.ReleaseComObject(pDataName);
                     System.Runtime.InteropServices.Marshal.ReleaseComObject(pDsName);
                     //pDataName = pDataLayer.DataSourceName as ESRI.ArcGIS.Geodatabase.IDatasetName;
                 }
                 catch { }
                 System.Runtime.InteropServices.Marshal.ReleaseComObject(pDataLayer);
             }
         }
     }
     System.Runtime.InteropServices.Marshal.ReleaseComObject(pWsName);
     System.Runtime.InteropServices.Marshal.ReleaseComObject(pMap);
     pMapDoc.Save(true, true);
 }
        public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
        {
            //
            if (context == null)
            {
                return(null);
            }
            if (context.Instance == null)
            {
                return(null);
            }
            if (provider == null)
            {
                return(null);
            }

            // Cannot handle multiple objects
            if (context.Instance is object[])
            {
                return(null);
            }

            // Do ArcGIS Desktop Test
            object dialog = null;

            try {
                dialog = new GxDialogClass();
            }
            catch { }
            if (dialog == null)
            {
                MessageBox.Show(
                    Resources.TEXT_NO_ARCGIS_DESKTOP,
                    Resources.TEXT_APPLICATION,
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Exclamation,
                    MessageBoxDefaultButton.Button1,
                    MessageBoxOptions.DefaultDesktopOnly);
                return(null);
            }

            // Create GxObjectFilter for GxDialog
            IGxObjectFilter gxObjectFilter = new GxFilterWorkspacesClass();

            // Create GxDialog
            IGxDialog gxDialog = (IGxDialog)dialog;

            gxDialog.AllowMultiSelect = false;
            gxDialog.ButtonCaption    = Resources.TEXT_SELECT;
            gxDialog.ObjectFilter     = gxObjectFilter;
            gxDialog.RememberLocation = true;
            gxDialog.Title            = Resources.TEXT_SELECT_EXISTING_GEODATABASE;

            // Declare Enumerator to hold selected objects
            IEnumGxObject enumGxObject = null;

            // Open Dialog
            if (!gxDialog.DoModalOpen(0, out enumGxObject))
            {
                return(null);
            }
            if (enumGxObject == null)
            {
                return(null);
            }

            // Get Selected Object (if any)
            IGxObject gxObject = enumGxObject.Next();

            if (gxObject == null)
            {
                return(null);
            }
            //if (!gxObject.IsValid) { return null; }

            // Get GxDatabase
            if (!(gxObject is IGxDatabase))
            {
                return(null);
            }
            IGxDatabase gxDatabase = (IGxDatabase)gxObject;

            // Get IWorkspace
            ESRI.ArcGIS.Geodatabase.IWorkspaceName workspaceName = gxDatabase.WorkspaceName;

            // Return Arguments
            return(workspaceName);
        }