public static void AddAndVisualizeTreelistBackground(TreeList parentTree, IMapControl2 mapControl1) { try { if (mapControl1 == null) { return; } IMapDocument pMapDoc = new MapDocument(); string pFileName = Config.GetConfigValue("2DMxdBackground");//获得背景图文件路径 if (string.IsNullOrEmpty(pFileName) || !File.Exists(pFileName)) { return; } SplashScreenManager.Default.SendCommand(null, "正在加载二维基础数据......"); pMapDoc.Open(pFileName, null); //打开地图 IMap pMap = pMapDoc.get_Map(0); //获得地图 List <ILayer> loadLayer = new List <ILayer>(); //初始化待加载地理信息图层list int layerNum = mapControl1.Map.LayerCount; //获得当前主地图控件的图层数 for (int i = 0; i < pMap.LayerCount; i++) //对地图的图层进行遍历 { ILayer layer = pMap.get_Layer(i); AddComLayerNode(parentTree, rootNode, layer, loadLayer);//为图层树控件加载新图层,并将待加载图层写入loadLayer rootNode.CollapseAll(); } if (loadLayer.Count > 0) { foreach (ILayer layer in loadLayer) { mapControl1.AddLayer(layer, layerNum); layerNum++; //if (layer is IRasterLayer) //{ // mapControl2.AddLayer(layer); //} } IEnvelope pEnv = mapControl1.ActiveView.Extent; IPoint point = new ESRI.ArcGIS.Geometry.Point(); point.PutCoords((pEnv.XMax + pEnv.XMin) / 2, (pEnv.YMax + pEnv.YMin) / 2); pEnv.CenterAt(point); mapControl1.ActiveView.Extent = pEnv; mapControl1.MapUnits = pMap.MapUnits; mapControl1.ReferenceScale = pMap.ReferenceScale; mapControl1.ActiveView.Refresh(); } } catch (System.Exception ex) { return; } }
public static void AddComLayerNode(TreeList parentTree, TreeNodeComLayer node, ILayer layer, List <ILayer> loadlayer) { object renderer = null; TreeNodeComLayer comLayerNode; if (layer is ICadLayer) { return; } if (node == null)//如果当前节点为空 { comLayerNode = new TreeNodeComLayer() { Name = layer.Name, CustomValue = layer }; comLayerNode.OwnNode = parentTree.AppendNode(new object[] { comLayerNode.Name }, (TreeListNode)null);//为树创建根节点 comLayerNode.ImageIndex = 0; node = comLayerNode; rootNode = comLayerNode; rootNode.Visible = true; } else { comLayerNode = new TreeNodeComLayer() { Name = layer.Name, CustomValue = layer }; comLayerNode.Visible = true; if (comLayerNode.Name.Contains("注记")) { comLayerNode.ImageIndex = 10; } else { comLayerNode.ImageIndex = 0; } node.Add(comLayerNode); //为当前节点添加子节点 } if (layer is ESRI.ArcGIS.Carto.IGroupLayer) //如果图层是复合图层组 { ICompositeLayer comLayer = layer as ICompositeLayer; for (int i = 0; i < comLayer.Count; i++) { AddComLayerNode(parentTree, comLayerNode, comLayer.get_Layer(i), loadlayer);//递归 comLayerNode.CollapseAll(); } } else if (layer is IGeoFeatureLayer) //如果图层是地理要素图层 { loadlayer.Add(layer); //将该图层添加到待加载图层 IGeoFeatureLayer geoFtLayer = layer as IGeoFeatureLayer; if (geoFtLayer == null) { return; } if (geoFtLayer.FeatureClass == null) { node.CollapseAll(); return; } esriGeometryType geoType = geoFtLayer.FeatureClass.ShapeType; switch (geoType) { case esriGeometryType.esriGeometryPoint: case esriGeometryType.esriGeometryMultipoint: comLayerNode.ImageIndex = 4; break; case esriGeometryType.esriGeometryLine: case esriGeometryType.esriGeometryPolyline: comLayerNode.ImageIndex = 5; break; case esriGeometryType.esriGeometryPolygon: comLayerNode.ImageIndex = 6; break; } renderer = geoFtLayer.Renderer; AddSymbolNode(comLayerNode, renderer);//对当前树节点进行符号化 node.CollapseAll(); comLayerNode.CollapseAll(); if (geoFtLayer.FeatureClass == null) { return; } DF2DFeatureClass dffc = new DF2DFeatureClass(geoFtLayer.FeatureClass, comLayerNode);//根据当前要素类创建DF2DFC,并添加到管理类 dffc.SetLayer(layer); DF2DFeatureClassManager.Instance.Add(dffc); DF2DFeatureClassManager.Instance.Add(comLayerNode); } else if (layer is IRasterLayer) //如果图层是栅格图层 { loadlayer.Add(layer); //将该图层添加到待加载图层 //comLayerNode.Visible = true; //当前图层为可见(显示影像图) IRasterLayer rasterLayer = layer as IRasterLayer; IRaster raster = rasterLayer.Raster; if (raster == null) { return; } DF2DRaster dfrd = new DF2DRaster(raster, comLayerNode); dfrd.SetLayer(layer); DF2DRasterManager.Instance.Add(dfrd); } else if (layer is IAnnotationLayer) { loadlayer.Add(layer); IFeatureLayer featureLayer = layer as IFeatureLayer; if (featureLayer.FeatureClass == null) { return; } DF2DFeatureClass dffc = new DF2DFeatureClass(featureLayer.FeatureClass, comLayerNode); dffc.SetLayer(layer); DF2DFeatureClassManager.Instance.Add(dffc); DF2DFeatureClassManager.Instance.Add(comLayerNode); } else { loadlayer.Add(layer);//其它图层也加入待加载图层 } }