private ESRI.ArcGIS.Carto.ILayer GetBackgroundLayer(ESRI.ArcGIS.Carto.IMap map) { ESRI.ArcGIS.Carto.ILayer pLayer = map.get_Layer(0); ESRI.ArcGIS.Carto.ILayer pTempLayer = null; for (int i = 1; i < map.LayerCount; i++) { pTempLayer = map.get_Layer(i); if (pLayer.AreaOfInterest.Width < pTempLayer.AreaOfInterest.Width) { pLayer = pTempLayer; } } return(pLayer); }
protected override void OnPopup(ItemCollection items) { ESRI.ArcGIS.Carto.IMap map = ArcMap.Document.FocusMap; for (int i = 0; i < map.LayerCount; i++) { ESRI.ArcGIS.Carto.ILayer layer = map.get_Layer(i); Item item = new Item(); item.Caption = layer.Name; item.Enabled = layer.Visible; item.Message = layer.Name; item.Tag = layer; items.Add(item); } }
/// <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); }
/// <summary> /// Get the index number for the specified layer name /// </summary> /// <param name="activeView">An IActiveView interface</param> /// <param name="layerName">A System.String that is the layer name in the active view. Example: "states"</param> /// <returns> /// A System.Int32 representing a layer number. /// Return values of 0 and greater are valid layers. A return value of -1 means the layer name was not found. /// </returns> public static Int32 GetIndexNumberFromLayerName(ESRI.ArcGIS.Carto.IActiveView activeView, System.String layerName) { if (activeView == null || layerName == null) { return(-1); } ESRI.ArcGIS.Carto.IMap map = activeView.FocusMap; // Get the number of layers int numberOfLayers = map.LayerCount; // Loop through the layers and get the correct layer index for (System.Int32 i = 0; i < numberOfLayers; i++) { if (layerName == map.get_Layer(i).Name) { // Layer was found return(i); } } // No layer was found return(-1); }