예제 #1
0
        // 递归获取 GroupLayer 中的图层
        private List <IFeatureLayer> GetFeatureLayerFromGroupLayer(IGroupLayer groupLayer)
        {
            List <IFeatureLayer> outLayerList = new List <IFeatureLayer>();
            var compositeLayer = (ICompositeLayer)groupLayer;

            for (int j = 0; j < compositeLayer.Count; j++)
            {
                var subLayer = compositeLayer.Layer[j];
                if (subLayer is IFeatureLayer)
                {
                    var featureLayer = (IFeatureLayer)subLayer;
                    var featureClass = featureLayer.FeatureClass;
                    if (featureClass == null)
                    {
                        continue;
                    }
                    if (featureClass.ShapeType == esriGeometryType.esriGeometryPolygon)
                    {
                        outLayerList.Add(featureLayer);
                    }
                }
                else if (subLayer is IGroupLayer)
                {
                    GetFeatureLayerFromGroupLayer((IGroupLayer)subLayer).ForEach(p => outLayerList.Add(p));
                }
            }

            return(outLayerList);
        }
예제 #2
0
 private void method_5(IGroupLayer igroupLayer_0, ILayer ilayer_0, bool bool_1)
 {
     if (bool_1)
     {
         bool flag = true;
         if (ilayer_0 is IGeoFeatureLayer)
         {
             IFeatureClass featureClass = (ilayer_0 as IGeoFeatureLayer).FeatureClass;
             flag = featureClass.FeatureCount(null) > 0;
         }
         if (flag)
         {
             if (this.ienvelope_0 != null)
             {
                 IEnvelope areaOfInterest = ilayer_0.AreaOfInterest;
                 if ((areaOfInterest.SpatialReference is IUnknownCoordinateSystem ||
                      this.ienvelope_0.SpatialReference is IUnknownCoordinateSystem ||
                      this.ienvelope_0.SpatialReference == null
                     ? false
                     : areaOfInterest.SpatialReference != null))
                 {
                     areaOfInterest.Project(this.ienvelope_0.SpatialReference);
                     this.ienvelope_0.Union(areaOfInterest);
                 }
             }
             else
             {
                 this.ienvelope_0 = ilayer_0.AreaOfInterest;
             }
         }
     }
     igroupLayer_0.Add(ilayer_0);
 }
예제 #3
0
        /// <summary>
        /// 图层查找 确定图层的存在性 包括组合图层
        /// </summary>
        /// <param name="groupName"></param>
        /// <param name="layerName"></param>
        /// <param name="gLayer"></param>
        /// <returns></returns>
        public static ILayer QueryLayerInMap(AxMapControl mapControl, string layerName, ref IGroupLayer gLayer, out int layerIndex, out int groupIndex)
        {
            layerIndex = -1;
            groupIndex = -1;
            ILayer queryLayer = null;

            for (int i = 0; i < mapControl.Map.LayerCount; i++)
            {
                ILayer tempLayer = mapControl.Map.get_Layer(i);
                if (tempLayer is IGroupLayer)
                {
                    IGroupLayer tempGlayer  = tempLayer as IGroupLayer;
                    ILayer      querylayer2 = QueryLayerInGroupLayer(layerName, tempGlayer, ref layerIndex);
                    if (querylayer2 != null)
                    {
                        queryLayer = querylayer2;
                        gLayer     = tempGlayer;
                        groupIndex = i;
                        break;
                    }
                }
                if (tempLayer.Name == layerName)
                {
                    queryLayer = tempLayer;
                    layerIndex = i;
                    break;
                }
            }
            return(queryLayer);
        }
예제 #4
0
        /// <summary>
        /// 查找图层 包括组合图层
        /// </summary>
        /// <param name="groupName"></param>
        /// <param name="layerName"></param>
        /// <param name="gLayer"></param>
        /// <returns></returns>
        public static bool QueryLayerInMap(IMapControl3 mapControl, ILayer searchLayer, ref IGroupLayer gLayer, out int layerIndex, out int groupIndex)
        {
            layerIndex = -1;
            groupIndex = -1;
            ILayer queryLayer = null;

            for (int i = 0; i < mapControl.Map.LayerCount; i++)
            {
                ILayer tempLayer = mapControl.Map.get_Layer(i);
                if (tempLayer is IGroupLayer)
                {
                    IGroupLayer tempGlayer = tempLayer as IGroupLayer;
                    if (QueryLayerInGroupLayer(searchLayer, tempGlayer, ref layerIndex))
                    {
                        gLayer     = tempGlayer;
                        groupIndex = i;
                        return(true);
                    }
                }
                if (tempLayer == searchLayer)
                {
                    queryLayer = tempLayer;
                    layerIndex = i;
                    return(true);
                }
            }
            return(false);
        }
예제 #5
0
        private static IFeatureLayer IsFeatureLayerInGroupLayer(string sSource, IGroupLayer pGrpLyr)
        {
            if (pGrpLyr == null)
            {
                return(null);
            }

            ESRI.ArcGIS.ArcMapUI.IMxDocument pMXDoc = ArcMap.Document;
            IMap            pMap           = pMXDoc.FocusMap;
            ICompositeLayer compositeLayer = pGrpLyr as ICompositeLayer;

            if (compositeLayer != null & compositeLayer.Count > 0)
            {
                for (int i = 0; i <= compositeLayer.Count - 1; i++)
                {
                    if (compositeLayer.Layer[i] is IFeatureLayer)
                    {
                        ESRI.ArcGIS.Geodatabase.IDataset pLayer = (ESRI.ArcGIS.Geodatabase.IDataset)compositeLayer.Layer[i];
                        string pLayerPath = Path.Combine(pLayer.Workspace.PathName, pLayer.BrowseName + ".shp");
                        if (string.Compare(pLayerPath, sSource, true) == 0)
                        {
                            return((IFeatureLayer)pLayer);
                        }
                    }
                }
            }

            return(null);
        }
예제 #6
0
        public override void OnClick()
        {
            int           playerCount   = myHook.MapControl.Map.LayerCount;//获得MapControl上图层的数量
            IFeatureLayer pFeatureLayer = new FeatureLayerClass();

            ILayer mLayer = myHook.MapControl.CustomProperty  as ILayer;

            if (mLayer is IGroupLayer)
            {
                IGroupLayer pGLayer = mLayer as IGroupLayer;
                if (pGLayer.Expanded == false)
                {
                    pGLayer.Expanded = true;
                }
                ExpandGroupLayer(pGLayer);
            }
            else if (mLayer is IFeatureLayer)
            {
                pFeatureLayer = mLayer as IFeatureLayer;
                ExpandLayer(pFeatureLayer);
            }
            if (this.WriteLog)
            {
                Plugin.LogTable.Writelog(Message); //xisheng 2011.07.08 增加日志
            }
            myHook.TOCControl.Update();
        }
        private IGroupLayer GetGroupLayer()
        {
            IGroupLayer result = null;
            IMap        map    = ArcUtils.Map;

            if (map != null)
            {
                // ReSharper disable UseIndexedProperty
                var    layers = map.get_Layers();
                bool   leave  = false;
                ILayer layer;

                while (((layer = layers.Next()) != null) && (!leave))
                {
                    if (layer.Name == Name)
                    {
                        if (layer is GroupLayer)
                        {
                            result = layer as IGroupLayer;
                            leave  = true;
                        }
                        else
                        {
                            map.DeleteLayer(layer);
                        }
                    }
                }

                // ReSharper restore UseIndexedProperty
            }

            return(result);
        }
예제 #8
0
        private void ParseGroupLayer(XmlDocument axl, IGroupLayer gLayer)
        {
            if (gLayer == null)
            {
                return;
            }

            foreach (ILayer layer in gLayer.ChildLayer)
            {
                if (layer is IGroupLayer)
                {
                    ParseGroupLayer(axl, layer as IGroupLayer);
                }
                else
                {
                    XmlNode layerNode = GetLayernode(axl, layer as IFeatureLayer);
                    if (layerNode == null)
                    {
                        continue;
                    }

                    SetLayernameAndScales(layerNode, layer as IFeatureLayer);
                    SetRenderers(layerNode, layer as IFeatureLayer);

                    if (_doc != null && _doc.Application is IMapApplication)
                    {
                        ((IMapApplication)_doc.Application).RefreshTOCElement(layer);
                    }
                }
            }
        }
예제 #9
0
        /// <summary>
        ///  处理空间统计
        /// </summary>
        /// <param name="mapControl"></param>
        /// <param name="pGeometry"></param>
        /// <param name="layerName"></param>
        public void DealFeatureQuery(AxMapControl mapControl, IGeometry pGeometry, string queryStr, string layerName)
        {
            IGroupLayer gLayer = null;

            if (string.IsNullOrEmpty(layerName))
            {
                return;
            }
            int           gIndex;
            int           layerIndex;
            IFeatureLayer pFeatureLayer = LayerUtil.QueryLayerInMap(mapControl, layerName, ref gLayer, out layerIndex, out gIndex) as IFeatureLayer;

            if (pFeatureLayer == null)
            {
                return;
            }
            IQueryFilter   queryFilter    = null;
            IFeatureCursor pFeatureCursor = null;

            if (string.IsNullOrEmpty(queryStr))
            {
                pFeatureCursor = FeatureDealUtil.QueryFeatureInLayer(pFeatureLayer, pGeometry, ref queryFilter);
            }
            else
            {
                pFeatureCursor = FeatureDealUtil.QueryFeatureInLayer(pFeatureLayer, queryStr, ref queryFilter);
            }
            IList <IFeature> features = FlashFeatureShape(mapControl, pFeatureLayer, pFeatureCursor);

            ShowFeatureDetail(pFeatureLayer, features, queryFilter);
        }
예제 #10
0
        //使图层组内所有图层可见
        private bool VisibleGroupLayer(IGroupLayer pGroupLayer)
        {
            bool            changed   = false;
            ICompositeLayer pComLayer = pGroupLayer as ICompositeLayer;

            if (pComLayer != null)
            {
                for (int i = 0; i < pComLayer.Count; i++)
                {
                    ILayer player = pComLayer.get_Layer(i);
                    if (!player.Visible)
                    {
                        player.Visible = true;
                        changed        = true;
                    }
                    if (player is IGroupLayer)
                    {
                        bool bRes = VisibleGroupLayer(player as IGroupLayer);
                        if (bRes)
                        {
                            changed = true;
                        }
                    }
                }
            }
            return(changed);
        }
예제 #11
0
        private bool AddGroupLayer(IGroupLayer pGroupLayer)
        {
            bool            flag;
            ICompositeLayer compLayer = pGroupLayer as ICompositeLayer;

            for (int i = 0; i < compLayer.Count; i++)
            {
                ILayer layer = compLayer.Layer[i] as ILayer;
                if (layer is IGroupLayer)
                {
                    this.AddGroupLayer(layer as IGroupLayer);
                }
                else if (layer is IFeatureLayer)
                {
                    IFeatureLayer featureLayer = layer as IFeatureLayer;
                    if (featureLayer != null)
                    {
                        if (featureLayer is IFDOGraphicsLayer)
                        {
                            continue;
                        }
                        if (featureLayer.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolygon)
                        {
                            this.AddLayer(layer, 0);
                            flag = true;
                            break;
                        }
                    }
                }
            }
            return(true);
        }
예제 #12
0
        /// <summary>
        /// 移动图层到组合图层的对应位置 单纯移除
        /// </summary>
        /// <param name="removedLayer"></param>
        /// <param name="toGroupLayer"></param>
        /// <param name="toIndex"></param>
        private static void MoveLayerToGroupIndex(ILayer removedLayer, IGroupLayer toGroupLayer, int toIndex)
        {
            ICompositeLayer pComposite = toGroupLayer as ICompositeLayer;
            IList <ILayer>  tempLayers = new List <ILayer>();

            //移除toIndex后面的所有图层
            for (int i = toIndex; i < pComposite.Count; i++)
            {
                ILayer tempLayer = pComposite.get_Layer(i);
                tempLayers.Add(tempLayer);
            }
            foreach (var layer in tempLayers)
            {
                toGroupLayer.Delete(layer);
            }
            //添加待移除图层
            toGroupLayer.Add(removedLayer);
            //添加图层
            foreach (var layer in tempLayers)
            {
                if (layer != removedLayer)
                {
                    toGroupLayer.Add(layer);
                }
            }
        }
예제 #13
0
        //通过intersect关系进行裁切
        public void ClipByExtent(int groupNm, int extNum)
        {
            IGeometry       extent   = GetClipExtent(extNum);
            string          findName = "grp" + groupNm.ToString() + "ext0";
            IGroupLayer     grpLy    = avlbLayers.Find(item => item.Name == findName);
            ICompositeLayer comLy    = grpLy as ICompositeLayer;

            IGroupLayer newGroupLayer = new GroupLayerClass();

            newGroupLayer.Name = "grp" + groupNm.ToString() + "ext" + extNum.ToString();

            for (int i = 0; i < comLy.Count; i++)
            {
                IFeatureLayer feaLy  = comLy.get_Layer(i) as IFeatureLayer;
                IFeatureClass clipFC = feaLy.FeatureClass;
                IFields       flds   = clipFC.Fields;

                ISpatialFilter spatialFilter = new SpatialFilterClass();
                spatialFilter.Geometry   = extent;
                spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
                IFeatureCursor cursor = clipFC.Search(spatialFilter, false);

                IWorkspaceFactory workspaceFactory = new InMemoryWorkspaceFactoryClass();
                IWorkspaceName    workspaceName    = workspaceFactory.Create(null, "MyWorkspace", null, 0);
                IName             name             = (IName)workspaceName;
                IWorkspace        workspace        = (IWorkspace)name.Open();
                IFeatureWorkspace inmemFeaWksp     = workspace as IFeatureWorkspace;

                if (clipFC.ShapeType == esriGeometryType.esriGeometryPoint)
                {
                    IFeatureClass inmemPTFC = CreateWithoutDescription("inmemPTFC_" + groupNumber.ToString(), null, inmemFeaWksp, clipFC.ShapeType, flds);
                    InsertFeaturesBoun(inmemPTFC, cursor, extent);

                    IFeatureLayer inmemPTFCLayer = new FeatureLayerClass();
                    inmemPTFCLayer.FeatureClass = inmemPTFC;
                    newGroupLayer.Add(inmemPTFCLayer);
                }

                else if (clipFC.ShapeType == esriGeometryType.esriGeometryPolyline)
                {
                    IFeatureClass inmemLNFC = CreateWithoutDescription("inmemLNFC" + groupNumber.ToString(), null, inmemFeaWksp, clipFC.ShapeType, flds);
                    InsertFeaturesBoun(inmemLNFC, cursor, extent);

                    IFeatureLayer inmemLNFCLayer = new FeatureLayerClass();
                    inmemLNFCLayer.FeatureClass = inmemLNFC;
                    newGroupLayer.Add(inmemLNFCLayer);
                }

                else if (clipFC.ShapeType == esriGeometryType.esriGeometryPolygon)
                {
                    IFeatureClass inmemPLGFC = CreateWithoutDescription("inmemPLGFC" + groupNumber.ToString(), null, inmemFeaWksp, clipFC.ShapeType, flds);
                    InsertFeaturesBoun(inmemPLGFC, cursor, extent);

                    IFeatureLayer inmemPLGFCLayer = new FeatureLayerClass();
                    inmemPLGFCLayer.FeatureClass = inmemPLGFC;
                    newGroupLayer.Add(inmemPLGFCLayer);
                }
            }
            avlbLayers.Add(newGroupLayer);
        }
예제 #14
0
        private IGroupLayer AddErrorSurfacesGroupLayer(DEMSurvey dem)
        {
            IGroupLayer pSurveyGrpLyr = AddSurveyGroupLayer(dem);
            IGroupLayer pErrGrpLyr    = ArcMapUtilities.GetGroupLayer(ErrorSurfacesGroupLayer, pSurveyGrpLyr);

            return(pErrGrpLyr);
        }
예제 #15
0
 /// <summary>
 /// 将一个地图中的所有图层加入Hashtable
 /// </summary>
 /// <param name="obj"></param>
 /// <param name="list"></param>
 public static void GetAllFeatureLayer(object obj, Hashtable ht)
 {
     if (obj is IMap)
     {
         IMap pMap = obj as IMap;
         for (int i = 0; i < pMap.LayerCount; i++)
         {
             GetAllFeatureLayer(pMap.get_Layer(i), ht);
         }
     }
     else if (obj is IGroupLayer)
     {
         IGroupLayer pGroupLayer = obj as IGroupLayer;
         if (pGroupLayer.Visible == true)
         {
             ICompositeLayer comLayer = obj as ICompositeLayer;
             for (int i = 0; i < comLayer.Count; i++)
             {
                 GetAllFeatureLayer(comLayer.get_Layer(i), ht);
             }
         }
     }
     else if ((obj is IFeatureLayer) && !(obj is IAnnotationLayer) && !(obj is ICadLayer))
     {
         if (ht != null)
         {
             IFeatureLayer pFeaLay = obj as IFeatureLayer;
             if (ht[pFeaLay.FeatureClass.FeatureClassID] == null && pFeaLay.Visible == true) //--------By 袁怀月--------------
             {
                 ht.Add(pFeaLay.FeatureClass.FeatureClassID, pFeaLay);
             }
         }
     }
 }
예제 #16
0
        public void AddMask(GCDCore.Project.Masks.AttributeFieldMask mask)
        {
            IGroupLayer pProjLyr      = AddProjectGroupLayer();
            IGroupLayer pGrpLayer     = ArcMapUtilities.GetGroupLayer(MasksGroupLayer, pProjLyr);
            short       dTransparency = GCDCore.Properties.Settings.Default.TransparencyAssociatedLayers ? GCDCore.Properties.Settings.Default.AutoTransparencyValue : (short)-1;

            IFeatureRenderer pRenderer   = null;
            string           queryFilter = string.Empty;
            string           labelField  = string.Empty;

            if (mask is GCDCore.Project.Masks.RegularMask)
            {
                GCDCore.Project.Masks.RegularMask rMask = mask as GCDCore.Project.Masks.RegularMask;

                pRenderer = VectorSymbolization.GetRegularMaskRenderer(rMask) as IFeatureRenderer;

                // Create a definition query if some features are not included

                if (rMask._Items.Any(x => !x.Include))
                {
                    queryFilter = string.Format("\"{0}\" IN ('{1}')", mask._Field, string.Join("','", rMask._Items.Where(x => x.Include).Select(y => y.FieldValue)));
                }
            }
            else if (mask is GCDCore.Project.Masks.DirectionalMask)
            {
                GCDCore.Project.Masks.DirectionalMask dirMask = mask as GCDCore.Project.Masks.DirectionalMask;
                // Directional mask. Black outline with labels
                pRenderer = VectorSymbolization.GetDirectionalMaskRenderer(dirMask) as IFeatureRenderer;

                labelField = string.IsNullOrEmpty(dirMask.LabelField) ? dirMask._Field : dirMask.LabelField;
            }

            VectorSymbolization.AddToMapVector(mask.Vector.GISFileInfo, mask.Name, pGrpLayer, mask._Field, pRenderer, queryFilter, labelField, dTransparency);
        }
예제 #17
0
        private IGroupLayer AddAnalysesGroupLayer()
        {
            IGroupLayer pProjLyr    = AddProjectGroupLayer();
            IGroupLayer pAnalGrpLyr = ArcMapUtilities.GetGroupLayer(AnalysesGroupLayer, pProjLyr);

            return(pAnalGrpLyr);
        }
예제 #18
0
        public void AddAssociatedSurface(AssocSurface assocRow)
        {
            IGroupLayer pAssocGrpLyr = AddAssociatedSurfaceGroupLayer(assocRow.DEM);

            short dTransparency = GCDCore.Properties.Settings.Default.TransparencyAssociatedLayers ? GCDCore.Properties.Settings.Default.AutoTransparencyValue : (short)-1;

            IRasterRenderer rasterRenderer = null;

            switch (assocRow.AssocSurfaceType)
            {
            case AssocSurface.AssociatedSurfaceTypes.InterpolationError:

                if (!GCDCore.Properties.Settings.Default.ApplyComparativeSymbology)
                {
                    rasterRenderer = RasterSymbolization.CreateClassifyRenderer(assocRow.Raster, 11, "Slope");
                }
                break;

            case AssocSurface.AssociatedSurfaceTypes.PointQuality3D:

                if (!GCDCore.Properties.Settings.Default.ApplyComparativeSymbology)
                {
                    rasterRenderer = RasterSymbolization.CreateClassifyRenderer(assocRow.Raster, 11, "Precipitation", true);
                }
                break;

            case AssocSurface.AssociatedSurfaceTypes.PointDensity:
                assocRow.Raster.ComputeStatistics();
                decimal rasterMax = assocRow.Raster.GetStatistics()["max"];

                if (rasterMax <= 2 & rasterMax > 0.25m)
                {
                    rasterRenderer = RasterSymbolization.CreateClassifyRenderer(assocRow.Raster, 11, "Green to Blue", 1.1, true);
                }
                else
                {
                    rasterRenderer = RasterSymbolization.CreateClassifyRenderer(assocRow.Raster, 11, "Green to Blue", true);
                }
                break;

            case AssocSurface.AssociatedSurfaceTypes.GrainSizeStatic:

                rasterRenderer = RasterSymbolization.CreateGrainSizeStatisticColorRamp(assocRow.Raster, ProjectManager.Project.Units.VertUnit);
                break;

            case AssocSurface.AssociatedSurfaceTypes.Roughness:
                rasterRenderer = RasterSymbolization.CreateRoughnessColorRamp(assocRow.Raster);
                break;

            case AssocSurface.AssociatedSurfaceTypes.SlopeDegree:
                rasterRenderer = RasterSymbolization.CreateSlopeDegreesColorRamp(assocRow.Raster);
                break;

            case AssocSurface.AssociatedSurfaceTypes.SlopePercent:
                rasterRenderer = RasterSymbolization.CreateSlopePrecentRiseColorRamp(assocRow.Raster);
                break;
            }

            AddRasterLayer(assocRow.Raster, rasterRenderer, assocRow.Name, pAssocGrpLyr, assocRow.LayerHeader, dTransparency);
        }
        // =========================================================================
        // Functions (private)
        // =========================================================================
        private void CreateLayers()
        {
            if (GroupLayer == null)
            {
                IMap map = ArcUtils.Map;

                if (map != null)
                {
                    _groupLayer = new GroupLayerClass();

                    if (_groupLayer != null)
                    {
                        _groupLayer.Name = Name;
                    }

                    CreateFeatureLayers();
                    var layer = _groupLayer as ILayer;
                    map.AddLayer(layer);
                }
            }
            else
            {
                CreateFeatureLayers();
            }
        }
예제 #20
0
        private void method_2(IGroupLayer igroupLayer_1, ILayer ilayer_0, int int_0)
        {
            ICompositeLayer layer = igroupLayer_1 as ICompositeLayer;

            if ((layer.Count - 1) == int_0)
            {
                igroupLayer_1.Delete(ilayer_0);
                igroupLayer_1.Add(ilayer_0);
            }
            else
            {
                int    num;
                IArray array = new ArrayClass();
                for (num = 0; num < layer.Count; num++)
                {
                    array.Add(layer.get_Layer(num));
                }
                igroupLayer_1.Clear();
                for (num = 0; num < array.Count; num++)
                {
                    if (layer.Count == int_0)
                    {
                        igroupLayer_1.Add(ilayer_0);
                    }
                    ILayer layer2 = array.get_Element(num) as ILayer;
                    if (layer2 != ilayer_0)
                    {
                        igroupLayer_1.Add(layer2);
                    }
                }
            }
        }
예제 #21
0
        public override void OnClick()
        {
            int           playerCount   = myHook.MapControl.Map.LayerCount;//获得MapControl上图层的数量
            IFeatureLayer pFeatureLayer = new FeatureLayerClass();

            for (int i = 0; i < playerCount; i++)
            {
                ILayer player = myHook.MapControl.Map.get_Layer(i);
                if (player is IGroupLayer)
                {
                    //如果图层是GroupLayer,那么将它的Expanded设置成FALSE
                    IGroupLayer pGroupLayer = player as IGroupLayer;
                    CollapseGroupLayer(pGroupLayer);
                    pGroupLayer.Expanded = false;
                }
                else if (player is IFeatureLayer)
                {
                    //如果不是GroupLayer,利用pLegendGroup.Visible来折叠图层
                    pFeatureLayer = player as IFeatureLayer;
                    CollapseLayer(pFeatureLayer);
                }
            }
            Plugin.LogTable.Writelog(base._Tooltip);//xisheng 2011.07.08 增加日志
            myHook.TOCControl.Update();
        }
예제 #22
0
        private IGroupLayer AddReferenceErrorSurfacesGroupLayer(Surface surf)
        {
            IGroupLayer pSurveyGrpLyr = AddReferenceSurfaceGroupLayer(surf);
            IGroupLayer pErrGrpLyr    = ArcMapUtilities.GetGroupLayer(ErrorSurfacesGroupLayer, pSurveyGrpLyr);

            return(pErrGrpLyr);
        }
예제 #23
0
        public override void OnClick()
        {
            int           playerCount   = myHook.MapControl.Map.LayerCount;//获得MapControl上图层的数量
            IFeatureLayer pFeatureLayer = new FeatureLayerClass();

            for (int i = 0; i < playerCount; i++)
            {
                ILayer player = myHook.MapControl.Map.get_Layer(i);
                if (player is IGroupLayer)
                {
                    //如果时GroupLayer,则利用它的Expended属性来扩展图层
                    IGroupLayer pGroupLayer = player as IGroupLayer;
                    ExpandGroupLayer(pGroupLayer);
                    pGroupLayer.Expanded = true;
                }

                else if (player is IFeatureLayer)
                {
                    //如果是普通的图层,利用pLegendGroup.Visible来扩展图层
                    pFeatureLayer = player as IFeatureLayer;
                    ExpandLayer(pFeatureLayer);
                }
            }
            if (this.WriteLog)
            {
                Plugin.LogTable.Writelog(Message);//xisheng 2011.07.08 增加日志
            }
            myHook.TOCControl.Update();
        }
예제 #24
0
        private IGroupLayer AddSurveyGroupLayer(DEMSurvey dem)
        {
            IGroupLayer pInputsGrpLyr  = AddInputsGroupLayer();
            IGroupLayer pSurveysGrpLyr = ArcMapUtilities.GetGroupLayer(SurveysGroupLayer, pInputsGrpLyr);

            return(ArcMapUtilities.GetGroupLayer(dem.Name, pSurveysGrpLyr));
        }
예제 #25
0
        public static IGroupLayer GetGroupLayer(string sName, IGroupLayer pParentGroupLayer, bool bCreateIfNeeded = true)
        {
            if (string.IsNullOrEmpty(sName))
            {
                // This route might be needed if the GCD calls this function without an open project.
                return(null);
            }

            // Try and find the group layer already in the hierarchy
            ICompositeLayer pCompositeLayer = (ICompositeLayer)pParentGroupLayer;

            for (int i = 0; i <= pCompositeLayer.Count - 1; i++)
            {
                if (string.Compare(pCompositeLayer.Layer[i].Name, sName, true) == 0)
                {
                    return((IGroupLayer)pCompositeLayer.Layer[i]);
                }
            }

            IGroupLayer pResultLayer = new GroupLayer();

            pResultLayer.Name = sName;
            ((IMapLayers)ArcMap.Document.FocusMap).InsertLayerInGroup(pParentGroupLayer, pResultLayer, true, 0);

            return(pResultLayer);
        }
예제 #26
0
        private IGroupLayer AddReferenceSurfaceGroupLayer(Surface surf)
        {
            IGroupLayer pInputsGrpLyr  = AddInputsGroupLayer();
            IGroupLayer pRefSurfGrpLyr = ArcMapUtilities.GetGroupLayer(RefSurfGroupLayer, pInputsGrpLyr);

            return(ArcMapUtilities.GetGroupLayer(surf.Name, pRefSurfGrpLyr));
        }
예제 #27
0
        /// <summary>
        /// 在组合图层内部进行移动
        /// </summary>
        /// <param name="removedLayer"></param>
        /// <param name="groupLayer"></param>
        /// <param name="fromIndexObj"></param>
        /// <param name="toIndexObj"></param>
        private static void MoveInSameGroupLayer(ILayer removedLayer, IGroupLayer groupLayer, object fromIndexObj, object toIndexObj)
        {
            if (toIndexObj == null)
            {
                groupLayer.Delete(removedLayer);
                AddMyLayer(groupLayer, removedLayer);
                return;
            }
            int fromIndex = (int)fromIndexObj;
            int toIndex   = (int)toIndexObj;

            if (fromIndex == toIndex)
            {
                return;
            }
            if (fromIndex < toIndex)
            {
                groupLayer.Delete(removedLayer);
                //  toIndex--;
            }
            //else
            //{
            //    toIndex--;
            //    groupLayer.Delete(removedLayer);
            //}
            MoveLayerToGroupIndex(removedLayer, groupLayer, toIndex);
        }
예제 #28
0
        private void AddChildrenToMap(TreeNode e)
        {
            e.Nodes.OfType <TreeNode>().ToList().ForEach(x => AddChildrenToMap(x));

            GISDataset ds = null;

            if (e.Tag is GISDataset)
            {
                ds = e.Tag as GISDataset;
            }
            else if (e.Tag is ProjectView)
            {
                ((ProjectView)e.Tag).Layers.ForEach(x => AddChildrenToMap(x.LayerNode));
            }

            if (ds is GISDataset)
            {
                GISDataset  layer        = (GISDataset)e.Tag;
                IGroupLayer parentGrpLyr = BuildArcMapGroupLayers(e);
                FileInfo    symbology    = GetSymbology(layer);

                string def_query = ds is Vector ? ((Vector)ds).DefinitionQuery : string.Empty;

                ArcMapUtilities.AddToMap(layer, layer.Name, parentGrpLyr, GetPrecedingLayers(e), symbology, transparency: layer.Transparency, definition_query: def_query);
                Cursor.Current = Cursors.Default;
            }
        }
예제 #29
0
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            groupNumber = listBox1.SelectedIndex + 1;
            int extentStatus = findExtentStatus(groupNumber);

            comboBox1.SelectedIndex = extentStatus;

            //检查grouplayer列表中是否已经存在当前请求的图层
            bool   exist    = CheckAvailability(groupNumber, extentStatus);
            string findName = "grp" + groupNumber.ToString() + "ext" + extentStatus.ToString();

            //如果已经存在,直接加载
            if (exist == true)
            {
                Clear();
                IGroupLayer viewGrpLys = avlbLayers.Find(item => item.Name == findName);
                mapControl.AddLayer(viewGrpLys);
            }
            //如果不存在,先进行裁切并添加到grouplayer列表中,再加载
            else
            {
                Clear();
                ClipByExtent(groupNumber, extentStatus);
                IGroupLayer newGrpLys = avlbLayers.Find(item => item.Name == findName);
                mapControl.AddLayer(newGrpLys);
            }
        }
예제 #30
0
        private void AddLayer(IGroupLayer igroupLayer_0, ILayer ilayer_0, ref IEnvelope ienvelope_0)
        {
            bool flag = true;

            if (ilayer_0 is IGeoFeatureLayer)
            {
                IFeatureClass featureClass = (ilayer_0 as IGeoFeatureLayer).FeatureClass;
                flag = (featureClass.FeatureCount(null) > 0);
            }
            if (flag)
            {
                if (ienvelope_0 == null)
                {
                    ienvelope_0 = ilayer_0.AreaOfInterest;
                }
                else
                {
                    IEnvelope areaOfInterest = ilayer_0.AreaOfInterest;
                    if (!(areaOfInterest.SpatialReference is IUnknownCoordinateSystem) && !(ienvelope_0.SpatialReference is IUnknownCoordinateSystem) && ienvelope_0.SpatialReference != null && areaOfInterest.SpatialReference != null)
                    {
                        areaOfInterest.Project(ienvelope_0.SpatialReference);
                        ienvelope_0.Union(areaOfInterest);
                    }
                }
            }
            igroupLayer_0.Add(ilayer_0);
        }
예제 #31
0
        public IGroupLayer FindParentGroupLayer(IGroupLayer groupLayer, ILayer layer)
        {
            if (!(groupLayer is ICompositeLayer))
            {
                return groupLayer;
            }

            ICompositeLayer comLayer = groupLayer as ICompositeLayer;
            ILayer tmpLayer;
            for (int i = 0; i <= comLayer.Count - 1; i++)
            {
                tmpLayer = comLayer.get_Layer(i);
                if (tmpLayer == layer)
                    return groupLayer;
                else if (tmpLayer is IGroupLayer)
                    return FindParentGroupLayer(tmpLayer as IGroupLayer, layer);
            }
            return null;
        }
예제 #32
0
 private void setgisxml(ref System.Data.DataTable dt,IGroupLayer pGroupLayer)
 {
     ICompositeLayer comLayer = pGroupLayer as ICompositeLayer;
     System.Data.DataRow dr;
     for (int i = 0; i < comLayer.Count; i++)
     {
         ILayer player = comLayer.get_Layer(i);
         if (player is IGroupLayer)
         {
             dr = dt.NewRow();
             dr[0] = "layer";
             dr[1] = player.Name;
             dr[2] = player.Visible.ToString();
             dt.Rows.Add(dr);
             setgisxml(ref dt, player as IGroupLayer);
         }
         else
         {
             dr = dt.NewRow();
             dr[0] = "layer";
             dr[1] = player.Name;
             dr[2] = player.Visible.ToString();
             dt.Rows.Add(dr);
         }
     }
 }
		/// <summary>
		/// AddNATraversalResultLayersToGroup will take the traversal results from an INAResult and add them to the map as a group layer
		/// </summary>
		private void AddNATraversalResultLayersToGroup(IGroupLayer groupLayer, INAResult result)
		{
			var naTraversalResultQuery = result as INATraversalResultQuery2;
			groupLayer.Add(GetTraversalResultLayer(esriNetworkElementType.esriNETJunction, naTraversalResultQuery));
			groupLayer.Add(GetTraversalResultLayer(esriNetworkElementType.esriNETTurn, naTraversalResultQuery));
			groupLayer.Add(GetTraversalResultLayer(esriNetworkElementType.esriNETEdge, naTraversalResultQuery));
		}
예제 #34
0
 private static List<ILayer> GetLayerListByKey(IGroupLayer pGroupLayer, string key)
 {
     ICompositeLayer comLayer = pGroupLayer as ICompositeLayer;
     ILayer tmpLayer;
     List<ILayer> listtmpLayer = new List<ILayer>();
     for (int j = 0; j <= comLayer.Count - 1; j++)
     {
         tmpLayer = comLayer.get_Layer(j);
         if (tmpLayer is IGroupLayer)
         {
             List<ILayer> list = GetLayerListByKey((IGroupLayer)tmpLayer, key);
             if (list.Count > 0)
                 listtmpLayer.AddRange(list);
         }
         else
         {
             if (tmpLayer.Name.Contains(key) || key == "")
                 listtmpLayer.Add(tmpLayer);
         }
     }
     return listtmpLayer;
 }
예제 #35
0
 private static ILayer GetLayerByName(IGroupLayer pGroupLayer, string layerName)
 {
     ICompositeLayer comLayer = pGroupLayer as ICompositeLayer;
     ILayer tmpLayer;
     for (int j = 0; j <= comLayer.Count - 1; j++)
     {
         tmpLayer = comLayer.get_Layer(j);
         if (tmpLayer is IGroupLayer)
         {
             tmpLayer = GetLayerByName((IGroupLayer)tmpLayer, layerName);
             if (tmpLayer != null)
                 return tmpLayer;
         }
         else
         {
             if (tmpLayer.Name == layerName)
                 return tmpLayer;
         }
     }
     return null;
 }
예제 #36
0
 private static ILayer SetLayerVisibleByName(IGroupLayer pGroupLayer, string layerName, bool visible)
 {
     ICompositeLayer comLayer = pGroupLayer as ICompositeLayer;
     ILayer tmpLayer;
     for (int j = 0; j <= comLayer.Count - 1; j++)
     {
         tmpLayer = comLayer.get_Layer(j);
         if (tmpLayer is IGroupLayer)
         {
             tmpLayer = SetLayerVisibleByName((IGroupLayer)tmpLayer, layerName, visible);
             if (tmpLayer != null && visible == true)
             {
                 comLayer.get_Layer(j).Visible = visible;
                 return tmpLayer;
             }
         }
         else
         {
             if (tmpLayer.Name == layerName)
             {
                 tmpLayer.Visible = visible;
                 return tmpLayer;
             }
         }
     }
     return null;
 }