Ejemplo n.º 1
0
 /// <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);
 }
Ejemplo n.º 2
0
 /// <summary>
 /// 从工作空间下获取到pFeatureClassName对应的 IDatasetName
 /// </summary>
 /// <param name="pWs"></param>
 /// <param name="pFeatureClassName"></param>
 /// <returns></returns>
 public static ESRI.ArcGIS.Geodatabase.IDatasetName GetDatasetName(ESRI.ArcGIS.Geodatabase.IWorkspace pWs, string pFeatureClassName)
 {
     try
     {
         ESRI.ArcGIS.Geodatabase.IEnumDatasetName pDsName    = pWs.get_DatasetNames(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTAny);
         ESRI.ArcGIS.Geodatabase.IDatasetName     pDsSetName = pDsName.Next();
         while (pDsSetName != null)
         {
             //遍历FeatureDataset
             if (pDsSetName.Type == ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTFeatureDataset)
             {
                 ESRI.ArcGIS.Geodatabase.IEnumDatasetName pDsFtName   = pDsSetName.SubsetNames;
                 ESRI.ArcGIS.Geodatabase.IDatasetName     pDsSetName1 = pDsFtName.Next();
                 while (pDsSetName1 != null)
                 {
                     if (pDsSetName1.Name == pFeatureClassName)
                     {
                         System.Runtime.InteropServices.Marshal.ReleaseComObject(pDsName);
                         System.Runtime.InteropServices.Marshal.ReleaseComObject(pDsFtName);
                         return(pDsSetName1);
                     }
                     pDsSetName1 = pDsFtName.Next();
                 }
             }
             else if (pDsSetName.Name == pFeatureClassName)
             {
                 System.Runtime.InteropServices.Marshal.ReleaseComObject(pDsName);
                 return(pDsSetName);
             }
             System.Runtime.InteropServices.Marshal.ReleaseComObject(pDsSetName);
             pDsSetName = pDsName.Next();
         }
         return(null);//pDsSetName;
     }
     catch (Exception ex)
     { return(null); }
 }