var ids = new List<int>(); var parentLayers = _dmsl.Layers.Where(x => x.SubLayerIds != null).ToArray(); foreach (var l in _dmsl.Layers) { if (parentLayers.Contains(l) && l.DefaultVisibility) { ids.Add(l.ID); } else { //find the parent of the child layer var pl = parentLayers.Where(x => x.SubLayerIds.Contains(x.ID)).FirstOrDefault(); //iterate through parent layers until we reached the outermost parent while (parentLayers.Contains(pl)) { var tempPl = parentLayers.Where(x => x.SubLayerIds.Contains(pl.ID)).FirstOrDefault(); if (tempPl == null) break; else pl = tempPl; } //determine if the layer should be visible if (pl != null) { if (pl.DefaultVisibility && l.DefaultVisibility) ids.Add(l.ID); } } }
That being said, my feeling is that you shoud get the expected result with code like:Dim dvl As List(Of Integer) = (From x In agdsl.Layers Where CBool(x.DefaultVisibility) = True Select x.ID).ToList agdsl.VisibleLayers = dvl.ToArray
Dim dvl As List(Of Integer) = (From x In agdsl.Layers Where CBool(x.DefaultVisibility) = True Select x.ID).ToList agdsl.VisibleLayers = dvl.ToArray
For Each livm As LayerItemViewModel In esriLegend.LayerItems If TypeOf livm.Layer Is ArcGISDynamicMapServiceLayer Then Dim agdsl As ArcGISDynamicMapServiceLayer = CType(livm.Layer, ArcGISDynamicMapServiceLayer) Dim dvl As List(Of Integer) = (From x In agdsl.Layers Where CBool(x.DefaultVisibility) = True And x.SubLayerIds Is Nothing Select x.ID).ToList Dim gl As List(Of LayerInfo) = (From x In agdsl.Layers Where CBool(x.DefaultVisibility) = False And x.SubLayerIds IsNot Nothing).ToList For Each li As LayerInfo In gl For Each i As Integer In li.SubLayerIds dvl.Remove(i) Next Next agdsl.VisibleLayers = dvl.ToArray End If Next
Angemeldete Mitglieder können Beiträge verfassen, Updates folgen und mehr. Neu hier? Registriere ein kostenloses Konto.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.